举个例子:
一个窗体上有 几个 Label。我想实现,选择Form上的一个 label 并且让他能随着鼠标移动。类似我们在IDE中调整控件位置一样。不过要求是在运行的程序中,选取,并移动某个控件。谢谢,在线等。马上结贴。
一个窗体上有 几个 Label。我想实现,选择Form上的一个 label 并且让他能随着鼠标移动。类似我们在IDE中调整控件位置一样。不过要求是在运行的程序中,选取,并移动某个控件。谢谢,在线等。马上结贴。
解决方案 »
- 问下delphi中的三层是怎么分的,可以用三层访问Internet上的数据吗?
- 如何解决BusinessSkinForm中bsDateEdit的星期不能正常显示?
- 如何能操作activeX里的控件???
- 在太原能找到好的D程序员吗?
- 关于文本框的小问题,请各位大侠帮帮我!
- DBGRID问题
- 在DbGridEH中如何根据实际数据的宽度来控制列宽
- 再次提问加100分。用DELPHI如何编写ISAPI过滤器(IIS)
- 关于ADO+ACCESS的问题,请大家帮忙一下!
- 在D5或D6中怎样安装和卸载第三方构件!
- 江湖救急,在线等,小问题——如何拖动Panel上的一个Image
- 请问delphi 中如何来判断dbnavigator 上按钮的状态……….
var xpanel,ypanel,xlabel,ylabel:integer;
PANEL的MouseMove事件:xpanel:=x;ypanel:=y;
PANEL的DragOver事件:xpanel:=x;ypanel:=y;
LABEL的MouseMove事件:xlabel:=x;ylabel:=y;
LABEL的EndDrag事件:label.left:=xpanel-xlabel;label.top:=ypanel-ylabel;
Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
Button1.PerForm(WM_syscommand,$F012,0);
end;
期间也可以通过拖动实现控件的移动。可以使用函数P e r f o r m来传递Wi n d o w s消息给控件,用
来完成控件的移动。
P e r f o r m函数的原型如下:
function Perform(Msg: Cardinal; WParam, LParam: Longint): Longint;
其中参数M s g传递一个消息的I D号。消息通过W p a r a m、L p a r a m传递给进程。
下面的例程S 4 _ 1 0对运行时控件的移动进行了说明。在例程S 4 _ 1 0的窗体中,有一个E d i t组
件和一个用来说明的L a b e l组件,可以使用鼠标使E d i t组件在窗体中移动。
具体实现过程如下:
1) 通过File | New Application创建一个新工程。
2) 在窗体F o r m 1中添加一个E d i t组件和一个L a b e l组件。
3) 在E d i t 1组件的O n M o u s e D o w n事件的处理过程中添加以下代码:
procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
c o n s t
SC_DragMove=$F012;
b e g i n
R e l e a s e C a p t u r e ;
(Sender as TWi n C o n t r o l ) . P e r f o r m ( W M _ S y s C o m m a n d , S C _ D r a g M o v e , 0 ) ;
e n d ;
4) 编译、链接和运行程序,测试效果。
说明:
• 读者可以将常数S C _ D r a g M o v e的数值改成其他数值,如改成:
SC_DragMove=$F020;
运行后测试效果。
• 上面的拖动只能对窗口控件进行。
• 上面拖动的实际用途可以让用户改变C o n t r o l B a r中各组件的位置。
118基本第二部分Delphi 编程的核心技能