Delphi中拖动的方式来移动TPageControl的Tab

procedure TMainForm.PageControl1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer) ;
begin
  PageControl1.BeginDrag(False) ;
end;

procedure TMainForm.PageControl1DragDrop(Sender, Source: TObject; X,
  Y: Integer) ;
const
  TCM_GETITEMRECT = $130A;
var
  TabRect: TRect;
  j: Integer;
begin
  if (Sender is TPageControl) then
  for j := 0 to PageControl1.PageCount - 1 do
  begin
    PageControl1.Perform(TCM_GETITEMRECT, j, LParam(@TabRect)) ;
    if PtInRect(TabRect, Point(X, Y)) then
    begin
      if PageControl1.ActivePage.PageIndex <> j then
        PageControl1.ActivePage.PageIndex := j;
      Exit;
    end;
  end;
end;

procedure TMainForm.PageControl1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean) ;
begin
  if (Sender is TPageControl) then Accept := True;
end;

原文地址:https://www.cnblogs.com/yzryc/p/6329466.html