如何获取PageControl上某个标签的宽度和位置?
我想实现通过拖动标签来改变TabSheet顺序,当DragDrop位置在某个标签的左半边时就把tabsheet放到这页的左边,在右半边就放到右边,但pagecontrol没有指定tabwidth,每个标签的宽度都不一样,请问如何实现知道是鼠标释放在某个标签的左半边还是右半边?
我想的是获取标签的宽度和位置来确定,但似乎找不到相应的属性?
[解决办法]
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;
[解决办法]
TRzPageControl可以达到楼主的要求,建议看看它的源代码。