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》频道 >>
猜你喜欢
联络方式:
400-123-789
邮箱:xiachao@163.com
Q Q:12345678
微信公众号
微信二维码