Delphi实现窗体控件自由移动

Delphi实现窗体控件自由移动

2008-04-25 16:22

在做Mis项目过程中,有时需要让用户自己来实现窗体控件的布局,比如酒店管理中就需要对餐厅餐桌位置进行布局。要实现这种功能,必须做好三件事:
  1、设置进入控件边缘的光标形状;

  2、改变控件的大小及位置;

  3、保存窗体控件的位置及状态,窗体下次启动时重新设置它们的这些信息。具体步骤如下:

  1、修改控件光标。只需要在进入控件的时候,将screen的cursor属性设置成对应形状即可,控件都有一个OnMouseMove事件,在这个事件中调用它就可以实现。我已经将它封装成函数如下:

procedure CursorControl(Control: TControl; Shift: TShiftState; X, Y, Prec: integer);
 begin
  //光标在控件的最左侧 
  if (X<=Prec) and (Y>Prec) and (Y<Control.Height-Prec) then Control.Cursor := crSizeWE
  // 光标在控件的最右侧 
  else if (X>=Control.Width-Prec) and (Y>Prec) and (Y<Control.Height-Prec) then   Control.Cursor := crSizeWE
  // 光标在控件的最上侧 
  else if (X>Prec) and (X<Control.Width-Prec) and (Y<=Prec) then Control.Cursor := crSizeNS
   // 光标在控件的左上角 
  else if (X<=Prec) and (Y<=Prec) then Control.Cursor := crSizeNWSE
   // 光标在控件的右上角 
  else if (X>=Control.Width-Prec) and (Y<=Prec) then Control.Cursor := crSizeNESW
  // 光标在控件的最下侧 
  else if (X>Prec) and (X<Control.Width-Prec) and (Y>=Control.Height-Prec) then Control.Cursor := crSizeNS
  // 光标在控件的左下角 
  else if (X<=Prec) and (Y>=Control.Height-Prec) then Control.Cursor := crSizeNESW
// 光标在控件的右下角 
  else if (X>=Control.Width-Prec) and (Y>=Control.Height-Prec) then 
   Control.Cursor := crSizeNWSE
   // 光标在控件的客户区(移动整个控件)
  else if (X>5) and (Y>5) and (X<Control.Width-5) and (Y<Control.Height-5) then Control.Cursor := crSizeAll
  else Control.Cursor := crDefault;//恢复默认光标
end; 
  2、修改窗体控件的大小和位置。其实有一种最简便的方法那就是向控件发送相应的消息即可。我也已将它封装成一个函数,在控件的OnMouseDown事件中调用即可。函数如下:

procedure ManipulateControl(Control: TControl; Shift: TShiftState; X, Y, Prec: integer);
 var 
  SC_MANIPULATE: Word;//保存对应消息值
 begin
  // 光标在控件的最左侧 
  if (X<=Prec) and (Y>Prec) and (Y<Control.Height-Prec) then SC_MANIPULATE := $F001
   // 光标在控件的最右侧 
  else if (X>=Control.Width-Prec) and (Y>Prec) and (Y<Control.Height-Prec) then SC_MANIPULATE := $F002
   // 光标在控件的最上侧 
  else if (X>Prec) and (X<Control.Width-Prec) and (Y<=Prec) then begin
   SC_MANIPULATE := $F003
   // 光标在控件的左上角 
  else if (X<=Prec) and (Y<=Prec) then SC_MANIPULATE := $F004
   // 光标在控件的右上角 
  else if (X>=Control.Width-Prec) and (Y<=Prec) then SC_MANIPULATE := $F005
   // 光标在控件的最下侧 
  else if (X>Prec) and (X<Control.Width-Prec) and (Y>=Control.Height-Prec) then SC_MANIPULATE := $F006
   // 光标在控件的左下角 
  else if (X<=Prec) and (Y>=Control.Height-Prec) then SC_MANIPULATE := $F007
   // 光标在控件的右下角 
  else if (X>=Control.Width-Prec) and (Y>=Control.Height-Prec) then SC_MANIPULATE := $F008
   // 光标在控件的客户区 ( 移动整个控件 )
  else if (X>5) and (Y>5) and (X<Control.Width-5) and (Y<Control.Height-5) then SC_MANIPULATE := $F009
  else SC_MANIPULATE := $F000;
   if Shift=[ssLeft] then
   begin
    ReleaseCapture;
    Control.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);//向控件发送改变光标消息
  end;
end; 
  3、保存和恢复窗体控件的大小及位置。通过对窗体的Component元件进行遍历,然后将它们的位置及大小属性值写入INI文件中,窗体下次启动时再通过读取INI文件恢复窗体控件的这些属性即可。关于这个解决办法网上有很多,还有现成的控件不用写一行代码就可实现的,限于篇幅在此我就不再累述了。有兴趣的朋友不防一试。所有代码在WIN2000/ Delphi 7下测试通过。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Delphi 10.3 是一个强大的开发环境,支持使用 COM 控件进行 Windows 应用程序开发。 COM(Component Object Model)是一种面向组件的软件架构模型,可以用于实现组件之间的通信和交互。COM 控件是使用 COM 技术开发的可复用的软件组件,可以在 Delphi 中轻松集成和使用。 在 Delphi 10.3 中使用 COM 控件非常简单。首先,需要在系统中注册 COM 控件。可以使用命令行工具 regsvr32 或者 Delphi IDE 中的 Tools 菜单下的 Register ActiveX Server 或者 Install Component 选项来注册 COM 控件。 注册完成后,在 Delphi 中添加一个 ActiveX 控件的实例,可以在 Components 菜单下的 Import Component 或者 Component Palette 中找到 COM 控件的安装向导。通过向导选择需要添加的控件,然后点击安装按钮,Delphi 会自动生成控件的包装类和代码。 一旦添加了 COM 控件的实例,就可以像使用其他 Delphi 控件一样对其进行操作。可以在代码中通过引用控件属性、方法和事件来实现相应的功能。 Delphi 10.3 提供了一系列与 COM 控件相关的工具和组件,比如 TComObject 类和 ComObj 单元,可以帮助开发者更加便捷地使用和管理 COM 控件。 总而言之,Delphi 10.3 提供了强大的支持和便捷的工具,使开发者能够在 Windows 平台下高效地使用和集成 COM 控件,为应用程序的开发带来了很大的便利。 ### 回答2: Delphi 10.3是一款以Object Pascal为基础的软件开发环境,它包含了许多强大的功能和工具,可以用于开发各种类型的应用程序,包括使用COM控件进行开发。 COM(Component Object Model)是一种组件技术,它允许不同的应用程序之间进行通信和交互。Delphi 10.3提供了对COM控件的全面支持,开发人员可以使用它们来创建具有丰富功能和用户界面的应用程序。 使用Delphi 10.3开发COM控件的过程非常简单。首先,开发者需要使用Delphi的代码编辑器创建一个新的COM库项目。然后,可以在项目中添加所需的COM控件Delphi 10.3提供了丰富的控件库,包括文本框、按钮、菜单等。开发人员可以通过拖放操作将这些控件添加到窗体上,并使用属性编辑器对其进行自定义设置。 一旦COM控件添加到窗体上,开发人员就可以使用Delphi的强大的代码编辑器编写代码来操作和控制这些控件。可以使用Delphi语言提供的各种功能和API来实现控件的各种操作,例如事件处理、数据绑定、图形绘制等。 Delphi 10.3还提供了一系列的调试工具,开发人员可以使用这些工具来调试和测试他们的应用程序。可以使用调试器来逐步执行代码,并观察代码的执行过程和变量的值。此外,还可以使用性能分析器来进行性能优化,以提高应用程序的运行效率。 综上所述,Delphi 10.3提供了强大而灵活的功能,使开发人员能够轻松地使用COM控件开发各种类型的应用程序。无论是开发桌面应用程序、Web应用程序还是移动应用程序,Delphi 10.3都是一个强大的工具。 ### 回答3: Delphi 10.3是一个流行的开发工具,用于创建Windows应用程序和组件。在Delphi 10.3中,COM(Component Object Model)是一种常用的技术,用于在不同的应用程序之间进行通信和交互。 COM控件Delphi开发中常用的一种控件,它可以被其他应用程序调用和使用。通过COM控件,我们可以将一个Delphi应用程序暴露给其他编程语言(如C++、C#等),从而实现跨语言的开发和集成。 使用Delphi 10.3创建COM控件非常简单。首先,我们需要创建一个新的Delphi项目。然后,通过选择“File”菜单中的“New”和“Other”选项,从“Delphi Projects”文件夹中选择“ActiveX Library”,并设置相应的项目名称和保存位置。 在COM控件的代码中,我们可以定义接口和方法,以及属性和事件。通过接口定义,其他应用程序可以使用COM控件中的方法和属性。我们还可以使用GUID(全球唯一标识符)来标识COM控件,并在注册表中注册COM控件。 在编写COM控件代码后,我们需要编译并生成COM控件的DLL文件。然后,我们可以将该DLL文件注册到系统的注册表中,以便其他应用程序可以找到和使用该COM控件。 在其他编程语言中,我们可以引用该COM控件并使用其中定义的方法和属性。例如,在C#中,我们可以使用“TypeLib Importer”工具生成一个代理类,并通过该代理类实例化COM控件,并调用其方法和属性。 总而言之,Delphi 10.3的COM控件是一种用于在不同的应用程序之间进行通信和交互的常用技术。通过创建COM控件,我们可以将Delphi应用程序暴露给其他编程语言,并实现跨语言的开发和集成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值