delphi vcl 的 TPageControl 控件,实现对页签的拖动

2022-12-25 12:42:21 作者:admin

本文整理自网络,侵删。

 delphi vcl 的 TPageControl 控件,实现对页签的拖动
我们在TPageControl 控件里 放了几个页签,但很多时候我们的需求是把某个页签放前面 和 另一个旁边的方便切换做对比。这个可以有更好的体验,类似Delphi IDE编辑器一样切换页签。
分别 在 DragDrop 、DragOver 、MouseDown 事件写上对应代码
unit Unit1;
interface
uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ComCtrls;
type  TForm1 = class(TForm)    PageControl1: TPageControl;    TabSheet1: TTabSheet;    TabSheet2: TTabSheet;    Label1: TLabel;    TabSheet3: TTabSheet;    Label2: TLabel;    procedure PageControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);    procedure PageControl1DragDrop(Sender, Source: TObject; X, Y: Integer);    procedure PageControl1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);  private    { Private declarations }  public    { Public declarations }  end;
var  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.PageControl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin  //拖动标签  if (Sender is TPageControl) then  if ssLeft in Shift then begin    TPageControl(Sender).BeginDrag(False);  end;end;
procedure TForm1.PageControl1DragDrop(Sender, Source: TObject; X, Y: Integer);const  TCM_GETITEMRECT = $130A;var  TabRect: TRect;  Idx: Integer;begin  //拖动标签  if (Sender is TPageControl) then  for Idx := TPageControl(Sender).PageCount - 1 downto 0 do  begin    TPageControl(Sender).Perform(TCM_GETITEMRECT, Idx, LParam(@TabRect));    if PtInRect(TabRect, Point(X, Y)) then // 搜索 每个Tab的区域并判断鼠标区域    begin      if TPageControl(Sender).ActivePage.PageIndex <> Idx then begin        TPageControl(Sender).ActivePage.PageIndex := Idx;      end;      Exit;    end;  end;end;
procedure TForm1.PageControl1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);begin  // 判断调用者为 TPageControl 类型可以拖动标签  Accept := (Sender is TPageControl);end;
end.
运行效果如下
来源:http://www.delphifmx.com/node/69

相关阅读 >>

Delphi httpclient async异步获取网页代码

Delphi从网上获取北京时间

Delphi ado 连接mssql数据库

Delphi 用dbexpress处理jpg图片

Delphi提示‘error loading midas.dll’的原因及解决方案

Delphi 图像操作

Delphi 能否把.txt文件的数据导入到access数据库中

Delphi中for in 语法应用实例

Delphi trystrtoint字符转换成整数

Delphi 如何get/post 调用http请求

更多相关阅读请进入《Delphi》频道 >>



在线咨询 拨打电话