首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
首页 | JAVA | C# | VB | VB.NET | C/C++ | delphi | 工程管理 | 其他语言 | 论坛
各大城市软件开发培训、软件人才免费咨询热线:400-700-5807
 您现在的位置: 中国IT实验室 >> 桌面开发 >> Delphi >> 文章正文
如何使用Delphi实现无边界窗体的移动
来源:中国IT实验室收集整理 作者:佚名 时间:2007-8-9

    在用Delphi制作Windows程序的窗体时,窗体的边界有四种选择:对话框式(bsDialog),单边固定式(bsSingle),双边可变式(bsSizeable),无边界式(bsNone)。当设置为bsNone时,窗体也就没有标题条,很显然,程序运行以后就无法移动窗体了。事实上,无边界窗体是很有用的,例如,象Word里面的浮动式工具箱其实就是无边界窗体,它可以大大节约屏幕空间。那么,如何用Delphi实现这个功能呢?显然,这需要修改Windows的内部消息,也就是说,需要把“MouseDownonForm”这个消息改为“MouseDownonCaption”,这其中有三个关键: 捕捉MouseDown消息、判断光标位置、发送MouseDown消息。如果光标在窗体中,则发送MouseDownonCaption消息。
    在Delphi的对象巡检器中列出的所有事件是不能捕捉到Windows消息的,因为这些都是已经发出的消息,无法修改了。捕捉Windows消息有两种办法:一个就是增加一个消息处理句柄,直接处理Windows消息;另一个是对消息进行过滤,滤出所需消息。第二个办法比较常用,适用于各种情况,下面就是移动无边界窗体程序片断,加注释部分是手动加入的:

  unitUnit1;

  :

  type

  TForm1Κclass(TForm)

  procedureFormCreate(Sender:TObject);

  :

  public

  {申明消息过滤过程}

  procedureAppMessage(varMsg:TMsg;varHandled
:Boolean);

  :

  implementation

  procedureTForm1.FormCreate(Sender:TObject)

  begin

  {捕捉消息:将程序的收到消息事件与消息过滤过程
关联起来}

  Application.OnMessage:ΚAppMessage;

  end;

  procedureTForm1.AppMessage(varMsg:TMsg;var
Handled:Boolean);

  begin

  {如果鼠标左键按下的话}

  ifMsg.messageΚWM—LButtonDownthen

  begin

  {判断光标是否在用户工作区内}

  ifDefWindowProc(Handle,WM—NCHitTest,0,Get
MessagePos)ΚHTClientthen

  begin

  {发出鼠标在用户标题栏内被按下的消息}

  SendMessage(Handle,WM—NCLButtonDown,

  HTCaption,GetMessagePos);

  Handled:Κtrue;{消息处理完毕,窗体不再接受M
ouseDown及Click事件,如果为false,程序的运行稍微有
些不正常。}

  end;

  end;

  end;

  end.
 

【责编:Youping】
中国IT教育热线咨询
相关文章
Delphi初学者应小心的六大陷阱
基于Delphi的异常处理技术探究
在Visual C#中定义和使用自己的特性
Delphi中用API实现在MSN的信息提示
Delphi中"包"的妙用
如何用Delphi实现子目录级的文件查询
在Delphi数据库应用程序中常见错误
C语言中的位域的使用
java 参数是如何传递的
如何用Delphi创建快捷方式
推荐文章

 精彩友情推荐
·锐捷交换机报价
·锐捷交换机
·锐捷网络网络交换机
·smc交换机
·smc交换机报价
·IDC资讯大全
·机房品质万里行
·IDC托管必备知识
·全国IDC报价
·网站推广优化
最新更新 推荐文章
·基于HOOK和MMF的Win密码渗透技术11-15
·Visual C++设计超强仿QQ自动伸缩…11-15
·Java SE 6.0实现高质量桌面集成开…11-15
·史玉柱东山再起幕后高人11-15
·Visual Basic 9.0隐式类型的局部…09-30
·JMX+J2SE5.0实现Web应用的安全管…09-30
·多线程、Socket技术及委托技术的…09-21
·Visual C#多线程参数传递浅析09-21
·浅谈Java中利用JCOM实现仿Excel编…09-21
·基于Java的界面布局DSL的设计与实…09-21
·Java开发中的事件驱动模型实例详…09-21
·用C#创建COM对象09-06
·IT管理十大失误及其对策08-30
·VC中利用MFC设计绘图程序初步08-23
·JAVA中对象创建和初始化过程08-23
·C语言中的位域的使用08-09
·浅谈Java桌面应用程序开发08-09
·C#的前途如何?08-02
·几种VC++数据库开发技术的相对比较07-12
·用Visual C#实现网络封包监视07-12
·VB.NET中的TextBox控件详解07-12
·VB.NET实现PC与掌上电脑PPC的双向通信07-05