TApplication类型的OnMessage事件
消息处理的技术,可以通过使用TApplication的OnMessage事件来处理消息。我们可以指将一个过程指向OnMessage,当应用程序从消息队列中取出一条消息,关准备处理该消息时就会调用该过程。应用程序在Windows处理这条消息前,调用这个事件处理过程。
Application.OnMessage事件处理过程是TMessageEvent类型,并且定义该过程时,需要带一个参数列表。如:
procedure SomeObject.AppMessageHandler(var Msg:TMsg;var Handled:Boolean);
begin
//doSth;
end;
这里会将队列里的所有消息填入到Msg参数中,再传递给OnMessage事件处理过程。
注意这个参数是Windows TMsg记录(结构体)类型的,而Handled参数取值为Boolean类型,它表示是否已经处理了这个消息。
Demo1 清单
// 可以从组件选项板中选择 TApplicationEvents[AppEvnts] 组件,
// 从而创建一个OnMessage事件处理过程。
begin
var
NumMessage : Integer;
//对所有消息函数的过滤
procedure TForm1.ApplicationEvents1Message(var Msg : TMsg;var Handled : Boolean);
begin
inc(NumMessage);
Handled = false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := ApplicationEvents1Message;
end;
end.
Demo2清单
//自定义过程函数
begin
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnMessage := WinMsg;
end;
Procedure Tform1.WinMsg (Var Msg : TMsg; Var Handled : Boolean);
Begin
//对WM_SYSCOMMAND该消息处理
If Msg.Message = WM_SYSCOMMAND Then
If Msg.WParam = ItemID1 Then
begin
ShowMessage('My menu!');
Exit;
end;
End;
end.
提示:OnMessage的惟一限制就是它能处理的消息只有从消息队列取出的消息,而不能处理应用程序中直接发给Windows窗体过程的消息。
注意:OnMessage过程中会接受到应用所有Windows发送的消息。它是应用程序中最繁忙的事件处理过程(1秒钟约有上千条消息),因此不要在OnMessage过程中做耗时的工作,否则会把应用程序变得很慢。很显然,在这个过程中设置断点来调试程序也是很是明智的。
[摘自:<<Delphi6 开发人员指南>> 一本值得推荐的书!]
分享到:
相关推荐
应用程序在接收到任何Windows消息后都会触发TApplication类的OnMessage事件,通过定义这个事件的处理程序,可以捕获发送给应用程序的所有Windows消息(这当然不包括在程序中用SendMessage函数发送的消息)。
在`www.pudn.com.txt`文件中,可能包含的是关于这个主题的详细教程或者代码示例,它可能解释了如何在Delphi项目中设置`OnMessage`事件,如何解析`TMessage`结构体,以及如何根据不同的消息类型执行相应的操作。...
甚至可能通过OnMessage事件,在其中截取所有post到应用程序中所有窗口的消息,如WM_PAINT,WM_KEYDOWN, WM_KEYUP等常见的windows消息; 所以当有消息到来的时候就会触发它的OnMessage事件,在OnMessage中监视消息就...
5.5.3 TApplication的OnMessage事件 119 5.6 发送自己的消息 120 5.6.1 Perform() 120 5.6.2 sendMessage()和PostMessage() 120 5.7 非标准的消息 121 5.7.1 通知消息 121 5.7.2 VCL内部的消息 122 5.7.3 用户自定义...
5. **事件过滤与分发**: Delphi的VCL框架提供了一种机制来过滤或分发事件,通过`TApplication.OnMessage`事件,可以拦截和处理窗口消息,包括鼠标消息。 6. **自定义组件**: 如果标准组件的鼠标事件处理不能满足...
在Delphi中,可以使用`TApplication.OnMessage`事件来设置全局消息过滤器,根据消息类型决定是否处理。 6. **自定义消息(Custom Messages)**:除了系统定义的消息外,开发者还可以定义自己的消息类型,通过`...
// 注册OnMessage事件处理器 Application.OnMessage := ApplicationMessage; end; end. ``` 在这个例子中,我们在`FormCreate`事件中注册了`ApplicationMessage`作为`OnMessage`事件处理器。`ApplicationMessage...
在Delphi中,可以通过重载`WndProc`函数或使用`TApplication.OnMessage`事件来拦截并处理特定的消息,从而阻止弹窗的显示。 6. **消息循环**:Windows操作系统使用消息循环来处理窗口消息。理解这个机制可以帮助...
Delphi提供了OnMessage事件,允许程序员自定义消息处理逻辑。这使得开发者可以拦截、修改或处理系统未定义的消息。 7. **Dispatch方法**: 当消息被发送到控件时,控件的Dispatch方法会决定如何处理这个消息。...
- **OnMessage事件**: VCL通过`OnMessage`事件提供了一种方式,让开发者可以自定义处理全局消息。在`TApplication`的`OnMessage`事件处理器中,可以捕获并处理任何未被其他处理程序处理的消息。 - **WM_COMMAND...
5.5.3 TApplication的OnMessage事件 119 5.6 发送自己的消息 120 5.6.1 Perform() 120 5.6.2 sendMessage()和PostMessage() 120 5.7 非标准的消息 121 5.7.1 通知消息 121 5.7.2 VCL内部的消息 122 5.7.3 用户自定义...
在这个例子中,`ApplicationEvents1`是`TApplicationEvents`组件,它提供了`OnMessage`事件来处理系统消息。`WM_LBUTTONDOWN`和`WM_RBUTTONDOWN`分别表示左键和右键的按下,`WM_LBUTTONDBLCLK`和`WM_RBUTTONDBLCLK`...
Delphi提供了`TApplication`对象来处理系统消息,我们可以在其`OnMessage`事件中捕获键盘事件。例如,设置组合键如Ctrl+P为截图快捷键,可以通过检查消息的`wParam`字段是否包含VK_CONTROL和VK_P的虚拟键码来判断。 ...
在VCL中,窗口过程被封装在TApplication和TComponent类中,你可以通过覆盖`OnMessage`方法来处理自定义消息。默认情况下,VCL会自动处理标准的Windows消息。 3. **消息映射**: 在MFC(Microsoft Foundation ...
在Delphi中,可以使用`TApplication`对象的`OnMessage`事件或者创建自定义键盘钩子来监听键盘事件,如Alt+F4组合键,以便在用户按下该组合键时关闭程序。 4. **源码结构**: 一个简单的屏幕截图程序可能包含以下几...
例如,我们可以使用OnMessage事件处理特定的消息,或者使用TApplication的ProcessMessages方法来处理消息队列中的消息。 在“811VCL消息系统的剖析--四级消息处理”这个文档中,可能详细讲解了如何在Delphi中理解和...