CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

★★WM_WINDOWPOSCHANGING这个消息如何截获?

楼主onlydelphiandi(领会精神)2003-08-02 22:11:13 在 Delphi / VCL组件开发及应用 提问

★★WM_WINDOWPOSCHANGING这个消息如何截获?  
  在窗体上放一个ApplicationEvents1控件,在其OnMessage事件中加上:  
  procedure   TForm1.ApplicationEvents1Message(var   Msg:   tagMSG;  
      var   Handled:   Boolean);  
  begin  
      if   msg.message   =   WM_WINDOWPOSCHANGING   then  
      begin  
          messagebeep(mb_ok);  
      end;  
  end;  
  在窗体上放一个Button1,在起OnClick事件中加上:  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
        sendmessage(form1.Handle,WM_WINDOWPOSCHANGING,$00000000,$0012F6D0);  
  end;  
  我特意的在一个按钮的事件中发送WM_WINDOWPOSCHANGING这个消息,居然不能截获!!ApplicationEvents的OnMessage事件不是能截获所有的消息吗?为什么这个消息不能截获?请各位高手指导,谢谢!  
  问题点数:28、回复次数:12Top

1 楼lwluser(lwluser)回复于 2003-08-02 22:20:41 得分 0

方法一:  
  //自定义方法  
  procedure   TForm1.MyProce(par1:type....)Message   WM_WINDOWPOSCHANGING;  
  方法二:  
  //自定义方法  
  procedure   TForm1.MyProce(var   Msg:TMessage);  
  begin  
      if   Msg.wParam=WM_WINDOWPOSCHANGING   then  
  ......................  
  ................  
  end;Top

2 楼onlydelphiandi(领会精神)回复于 2003-08-02 22:56:38 得分 0

行吗?为什么我的方法捕不到?Top

3 楼microd(重构一切)回复于 2003-08-03 17:29:09 得分 0

up,我也一样,无法截获其消息。  
  Top

4 楼bluenightsky()回复于 2003-08-03 20:43:24 得分 0

同意   lwluser(lwluser)  
  Top

5 楼FrameSniper(http://naoku.net/blogs/framesniper/)回复于 2003-08-03 20:47:02 得分 0

学习......Top

6 楼onlydelphiandi(领会精神)回复于 2003-08-04 13:50:14 得分 0

为什么我的方法捕不到?Top

7 楼lw549(那个孩子他爹)回复于 2003-08-04 19:52:57 得分 5

因为你没有procedure   TForm1.MyProce(par1:type....)Message   WM_WINDOWPOSCHANGING;  
  Message   WM_WINDOWPOSCHANGING;很重要Top

8 楼onlydelphiandi(领会精神)回复于 2003-08-05 11:47:34 得分 0

to;楼上的  
  ApplicationEvents的OnMessage事件不是能截获所有的消息吗?Top

9 楼movingboy2(海蓝)回复于 2003-08-05 12:06:42 得分 5

推荐使用lwuser的方法一  
  ApplicationEvents的OnMessage只能捕获传递给Application这个对象的消息,其它的是无能为力的。帮助里TApplicationEvents的OnMessage页的第一行已经说得很明白了。Top

10 楼xzgyb(老达摩)回复于 2003-08-05 12:09:58 得分 15

Windows消息分两种,一个是进队的消息,一个是不进队的消息  
  OnMessage只能捕获进队的消息,象一般的键盘消息,鼠标消息,WM_PAINT,WM_TIMER这些消息  
  而你的SendMessage是直接调用窗口过程,所以OnMessage是收不到的,即使用PostMessage也不好使,因为WM_WINDOWPOSCHANGING就是进队消息,  
  如  
      if   PostMessage(Handle,WM_WINDOWPOSCHANGING,$00000000,$0012F6D0)   then  
          ShowMessage('succeed')  
      else  
          RaiseLastOSError;  
   
  会弹出     "消息只能与同步操作一起使用",PostMessage不成功Top

11 楼xzgyb(老达摩)回复于 2003-08-05 12:11:06 得分 3

我说错了,应该为  
  WM_WINDOWPOSCHANGING就不是进队消息  
  Top

12 楼onlydelphiandi(领会精神)回复于 2003-08-07 13:59:50 得分 0

靠,书上骗我,MD。  
  我回去研究一下先。Top

相关问题

  • PreTranslateMessage怎么截获WM_CHAR消息啊?
  • 怎么截获WM_IME_CHAR,消息?
  • 截获消息!
  • 请教:Builder中如何截获WM_SIZE中的SIZE_MINIMIZED消息?
  • 我想用系统钩子截获WM_SHOWWINDOW消息
  • CHtmlView为什么截获不到WM_CHAR消息?
  • 截获WM_QUERYENDSESSION消息,Windows不能关闭。
  • 用钩子截获了WM_IME_CHAR消息,如何得到其中的汉字?
  • 从CButton继承的按钮如何能够截获WM_IME_NOTIFY消息?
  • 如何截获windows消息?

关键词

  • 消息
  • windowposchanging
  • 截获
  • onmessage
  • applicationevents
  • wm
  • myproce
  • postmessage
  • 事件
  • procedure tform

得分解答快速导航

  • 帖主:onlydelphiandi
  • lw549
  • movingboy2
  • xzgyb
  • xzgyb

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo