文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Delphi中的消息处理机制

Delphi中的消息处理机制

时间:2011-01-17  来源:linyawen

    过滤消息一般有三种途径:(1)针对某消息编写消息处理句柄.(2)重载构件继承的虚拟方法wndproc.(3)重载构件继承的虚拟方法Defhandler,在其中对消息进行处理。

    (1)针对某消息编写消息处理句柄:用户可以自定义消息及消息处理句柄.消息处理句柄的定义有如下几个原则:
    消息处理句柄方法必须是一个过程,且只能传递一个Tmessage型变量参数.
    不需要用override命令来显式指明重载祖先的一个消息处理句柄,另外它一般声明在构件的protected或private区.
    在消息处理句柄中一般先是用户自己对消息的处理,最后用inherited命令调用祖先类中对应此消息的处理句柄.
    同样如果祖先类中没有对应此消息的处理句柄,inherited就会自动调用Defaulthandler方法.

(2)重载构件继承的虚拟方法wndproc:在wndproc方法中处理消息的优势是可以过滤整个范围内的消息,而不必为每个消息指定一个处理句柄,事实上Tcontrol构件中就是利用它来过滤并处理所有的鼠标消息的(从WM_mousefirst到WM_mouselast,如下代码示).同样利用它也可以阻止某些消息被发送给处理句柄。
procedure TControl.WndProc(var Message: TMessage);
begin
if (Message.Msg>=WM_MOUSEFIRST) and (Message.Msg <= WM_MOUSELAST) then
begin
    if Dragging then    { 处 理 拖 曳 事 件}
      DragMouseMsg(TWMMouse(Message))
    else
      ...        { 处 理 其 他 鼠 标 消 息}
end
else
    Dispatch(Message);        { 否 则 正 常 发 送 消 息}
end;

procedure Tmyedit.wndproc(var message:tmessage);
begin
if message.msg=wm_SetFocus then
    exit;   {屏蔽掉WM_setfocus消息,不让Tmyedit控件获得输入焦点}
inherited wndproc(message);{其他消息交父辈wndproc处理}
end;

相关阅读 更多 +
排行榜 更多 +
我是班长去广告版下载

我是班长去广告版下载

模拟经营 下载
什么鸭小游戏安卓版下载

什么鸭小游戏安卓版下载

策略塔防 下载
极光影院官方最新版本2025下载

极光影院官方最新版本2025下载

趣味娱乐 下载