深入delphi编程理解之消息(三)发送消息函数的一般应用实例
通过对消息函数(SendMessage、PostMessage、Perform)的一般应用,来说明sendmessage、postmessage函数和perform 方法调用方式和结果的区别。
一、程序界面
二、程序代码及注释
unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls; type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure MyWMClose(var Amessage: TWMClose); message WM_CLOSE; {拦截关闭窗口消息}
end; var
Form1: TForm1; implementation uses
CommCtrl;
{$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(Edit1.Handle, WM_SETTEXT, 255, Integer(PChar('abc'))); {发送字符ABC}
// Edit1.Perform(WM_SETTEXT,255,Integer(PChar('abc')));
// PostMessage(Edit1.Handle,WM_SETTEXT,255,Integer(PChar('abc')));
//SendMessage(Edit1.Handle,WM_Char,Wparam('Q'),1); {传递字符 }
end; procedure TForm1.Button2Click(Sender: TObject);
var
MyBroadCastMsg:cardinal;
begin
MyBroadCastMsg:=RegeisterWindowsMessage('MyBroadCastMsg'); //向系统注册消息
SendMessage(HWND_BROADCAST,MyBroadCastMsg,0,0); //向系统广播消息。
//PostMessage(Button2.Handle, BM_SETSTYLE, BS_RADIOBUTTON, 1); //改变按钮风格
end; procedure TForm1.Button3Click(Sender: TObject);
begin
SendMessage(Handle, WM_CLOSE, 0, 0); {点击按钮后 ,弹出MyWMClose函数窗口,点击取消息按后才会显示“欢迎回来”窗口;}
//Form1.Perform(WM_CLOSE, 0, 0);
//PostMessage(Handle, WM_CLOSE, 0, 0); {点击按钮后 ,马上显示“欢迎回来”窗口,这是三个函数执行流程区别的体现。}
ShowMessage('欢迎回来');
end; procedure Tform1.MyWMClose(var Amessage: TWMClose); {拦截关闭窗口消息 }
begin
case MessageBoxW(Handle, '确认关闭窗口?', '提示', MB_OKCANCEL + MB_ICONQUESTION) of
IDOK:
begin
Close;
end;
IDCANCEL:
begin end;
end; end; end.
分析:PostMessage函数与SendMessage函数和Perform方法主要区别在执行流程上的区别,PostMessage函数就象甩手雷,只管甩,不管是不是哑弹,可以连续甩。而SendMessage函数和Perform不仅要甩,而且要等到手雷爆炸后才能甩下一个。
深入delphi编程理解之消息(三)发送消息函数的一般应用实例的更多相关文章
- 深入delphi编程理解之消息(二)发送消息函数及消息编号、消息结构体的理解
一.delphi发送消息的函数主要有以下三个: (一).SendMessage函数,其原型如下: function SendMessage( hWnd: HWND; {目标句柄} Msg: UINT; ...
- 【Java Web开发学习】Spring消息-ActiveMQ发送消息
ActiveMQ发送消息 转载:http://www.cnblogs.com/yangchongxing/p/9042401.html Java消息服务(Java Message Service, J ...
- 深入delphi编程理解之消息(一)WINDOWS原生窗口编写及消息处理过程
通过以sdk方式编制windows窗口程序,对理解windows消息驱动机制和delphi消息编程有很大的帮助. sdk编制windows窗口程序的步骤: 1.对TWndClass对象进行赋值; 2. ...
- delphi 主线程向子线程发送消息
while True do begin if not PeekMessage(msg,0,0,0,PM_REMOVE) then begin case MsgWaitForMultipleObject ...
- 深入delphi编程理解之消息(六)无窗口单元消息的创建、接受及dispatch模式编程
一.程序界面 二.程序代码 (一).主界面代码 //========================================================================== ...
- 深入delphi编程理解之消息(五)重写(override)dispatch、wndproc方法和Application.OnMessage事件
dispatch.wndproc是VCL framework在TWinCtronl定义的虚拟方法,下面程序通过重写(override)这两函数拦截WM_LBUTTONDOWN消息,来与Applicat ...
- 深入delphi编程理解之消息(四)使用TWMSysCommand结构体的WM_SysCommand消息应用
通过以下实例拦截窗体WM_SysCommand消息,我们可以获取到很多有趣的数据. 一.程序界面 二.程序代码 unit Unit1; interface uses Windows, Messages ...
- 深入delphi编程理解之接口(一)接口与类的异同及接口的声明和实现
一.抽象类与接口的异同 接口简单的理解可认为是一个抽象类,我们先定义一个抽象类和接口来对比之间的异同,代码如下: type IFormattedNumber = interface //定义接口 fu ...
- Linux环境进程间通信(三):消息队列
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
随机推荐
- path('<int:question_id>/vote/', views.vote, name='vote')中的<int:question_id>的含义
path('<int:question_id>/vote/', views.vote, name='vote')<int:question_id>用于匹配URL的值,并将扑捉到 ...
- C++中的参数类型
C++中的参数类型 数组 数组是相同类型数据的集合.引入数组就不需要在程序中定义大量的变量,大大减少程序中变量的数量,使程序精炼,而且数组含义清楚,使用方便,明确地反映了数据间的联系.许多好的算法都与 ...
- 第一次个人编程作业·寒假
这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/SE/ 这个作业要求在哪里 https://edu.cnblogs.com/campus/fzzcxy ...
- vue学习指南:第十五篇(详细) - Vuex
Vuex 一.基础 1. Vuex 相当于 vue的数据仓库 2. Vuex 是 vue 的状态管理工具 3. Vuex中的 state 只能通过mutations 改变 4. Vuex很适合做购物车 ...
- HDU1241 Oil Deposits(dfs+连通块问题)
背景描述 ztw同志负责探测地下石油储藏.ztw现在在一块矩形区域探测石油.他通过专业设备,来分析每个小块中是否蕴藏石油.如果这些蕴藏石油的小方格相邻(横向相邻,纵向相邻,还有对角相邻),那么它们被认 ...
- 2019-08-10 纪中NOIP模拟B组
T1 [JZOJ1235] 洪水 题目描述 一天, 一个画家在森林里写生,突然爆发了山洪,他需要尽快返回住所中,那里是安全的. 森林的地图由R行C列组成,空白区域用点“.”表示,洪水的区域用“*”表示 ...
- No Delegate set : lost message:libpng error: Not a PNG file
当出现这个问题时,是因为本来是jpg或其他格式的图片存成了png导致的.或者有的图片本来就是jpg的,Android Studio一编译,发现不是png才造成了这个问题.解决这个问题可以在Androi ...
- SuperSocket与SuperSocket.ClientEngine实现Protobuf协议
参考资料说明 SuperSocket文档 http://docs.supersocket.net/ Protobuf语言参考 https://developers.google.com/protoco ...
- 1-Django2.2安装指南
django快速安装指南 作为一个Python Web框架,Django需要Python环境.下面是Django需要对应的python版本. Django版本 python版本 1.11 2.7, 3 ...
- 关于layui的日期和时间组件laydate闪屏的坑
https://blog.csdn.net/liangwenli_/article/details/82786713 jsp页面: <input type="text" cl ...