我想实现通过拖动标签来改变TabSheet顺序,当DragDrop位置在某个标签的左半边时就把tabsheet放到这页的左边,在右半边就放到右边,但pagecontrol没有指定tabwidth,每个标签的宽度都不一样,请问如何实现知道是鼠标释放在某个标签的左半边还是右半边?我想的是获取标签的宽度和位置来确定,但似乎找不到相应的属性?

解决方案 »

  1.   


    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;
      

  2.   

    既然可以取到rect,那么也就可以判断,当前鼠标靠左半边还是右半边
      

  3.   

    TRzPageControl可以达到楼主的要求,建议看看它的源代码。