如何制作浮动面板? ABC控件:http://www.obsof.com/public/download.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 将要浮动控件的DragKind设为dkDock,DragMode设为dmAutomatic!拖动即可! 一个例子:procedure Tmainform.GroupBox1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);const SC_DragMove = $F012; { a magic number }begin ReleaseCapture; groupbox1.Perform(WM_SysCommand, SC_DragMove, 0);end;其它的类似吧。多试试看。 关于这个问题,我在中国开发网管理网站曾经提出过,是关于控件的拖拽操作的,虽然有一些人(包括斑竹在内)参与了讨论,但我得到的只有失望,真是悲哀,或者是大家对此类问题比较不屑一顾吧!所以我到www.csdn.net来寻找志同道合的朋友,呵呵!关于你所提到的浮动面板的问题:1、我觉得ehom(?!)的方法最好,不过在拖拽的过程中会出现类似窗体的标题条,而且有类似窗体的关闭X,一旦点击,将会删除该控件;2、使用魔术数$F012: ReleaseCapture; 控件名.Perform(WM_SYSCOMMAND, $F012, 0); 不过使用这种方法也有不尽人意的地方,就是你所使用的控件必须是从TWinControl继承下来的,否则将不能操作,比如TImage等;3、我对控件的Drag与Dock进行了一下分析,在控件的OnEndDock事件中做如下控制:procedure TfrmMain.ImgMoveEndDock(Sender, Target: TObject; X, Y: Integer);var pt1: TPoint;begin pt1:= Point(x, y); pt1:= frmMain.ScreenToClient((Sender as TControl).ClientToScreen(pt1)); (Sender as TControl).Parent:= frmMain; (Sender as TControl).Left:= pt1.x - x - 3; (Sender as TControl).Top:= pt1.y - y - 20;end;这样一来,只要是可视控件都可以使用上面的代码进行控制,而且具有通用性,但是唯一美中不足的是代码中最后两行的3与20(这是我自己试出来的),我不知道应该如何将它处理得更加容易维护,而不是简单的填写数字,我的意思是最好能够不使用具体的数字,如果哪位大侠知道的话,希望能够与我交流交流,谢谢!我的Email:[email protected] 在把父控件的DockSite的属性设为True================================================================曾经有一碗热辣辣的烧猪手面放在我面前,我没有珍惜,等到晾凉了之后才后悔莫及。 也可把控件放在从TWinControl继承的控件上,采用gamevale(村长)的方法?不过这就成了纯粹的拖动,而没有了面版的意思!真正的面版就应该有表题栏! 求助系统托盘图标 头晕,散分。另请教个问题 Delphi7里为何换行是老是编译不过去? 这种FastReport问题怎么解决? 想不通实在想不通. 关于调用存储过程调用? 一个关于TreeView控件问题 我很喜欢delphi,但老板要我转学单片机,请兄弟们说几句,是福是祸?up、gz有分! 关于SQL的若干问题???在线等待 请问怎样在我的程序中实现让用户对按钮的拖拽动作 求DELPHI+DOM的资料和代码,分可再加! 不知道大家有没有碰到这个问题,头痛啊!!!多多指点,分数多多啊!!!
procedure Tmainform.GroupBox1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
groupbox1.Perform(WM_SysCommand, SC_DragMove, 0);
end;其它的类似吧。多试试看。
关于你所提到的浮动面板的问题:
1、我觉得ehom(?!)的方法最好,不过在拖拽的过程中会出现类似窗体的标题条,而且有类似窗体的关闭X,一旦点击,将会删除该控件;
2、使用魔术数$F012:
ReleaseCapture;
控件名.Perform(WM_SYSCOMMAND, $F012, 0);
不过使用这种方法也有不尽人意的地方,就是你所使用的控件必须是从TWinControl继承下来的,否则将不能操作,比如TImage等;
3、我对控件的Drag与Dock进行了一下分析,在控件的OnEndDock事件中做如下控制:
procedure TfrmMain.ImgMoveEndDock(Sender, Target: TObject; X, Y: Integer);
var
pt1: TPoint;
begin
pt1:= Point(x, y);
pt1:= frmMain.ScreenToClient((Sender as TControl).ClientToScreen(pt1));
(Sender as TControl).Parent:= frmMain;
(Sender as TControl).Left:= pt1.x - x - 3;
(Sender as TControl).Top:= pt1.y - y - 20;
end;
这样一来,只要是可视控件都可以使用上面的代码进行控制,而且具有通用性,但是唯一美中不足的是代码中最后两行的3与20(这是我自己试出来的),我不知道应该如何将它处理得更加容易维护,而不是简单的填写数字,我的意思是最好能够不使用具体的数字,如果哪位大侠知道的话,希望能够与我交流交流,谢谢!
我的Email:[email protected]
================================================================曾经有一碗热辣辣的烧猪手面放在我面前,我没有珍惜,等到晾凉了之后才后悔莫及。