Wednesday, May 13, 2009

Move TPageControl's Tabs Using Drag and Drop in Delphi Applications

TPageControl is a set of pages used to make a multiple page dialog box. Why not enable your users to rearrange tabs in a TPageControl component at run-time using drag and drop...
Drop a TPageControl on a form, add several (tab) pages and handle the MouseDown, DragDrop and DragOver events of the TPageControl (PageControl1) component


Why not enable your users to rearrange tabs in a TPageControl component at run time using drag and drop...
Drop a TPageControl on a form, add several (tab) pages and handle the MouseDown, DragDrop and DragOver events of the TPageControl (PageControl1) component.


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;

No comments: