求教了
解决方案 »
- Delphi TServerSocket和TClientSocket通信问题
- 那位大虾给我写个小算法,100分献上,不够在给!~
- 一个很简单的问题,请帮手,在线等…
- 这个查询的sql语句应怎么写-急急!!!
- 我想找两位专职帮手,待遇可能比较低,工作地点在中关村.不知道有没有感兴趣的?
- 我在用ActiveX的TShockwaveFlash的时候,当改变窗体大小的时候,TShockwaveFlash却不能………
- dbgrid的索引有什么用处?
- 能否声明一个数组,数据类型是自定义的类?
- 一个主MID窗体含有多个子窗体!
- 急急急急!!!关于updatesql
- 如何把Access中的数据对应地放入Excel
- 如何确定project.exe执行了
就是在一个form 的createform 中application.OnMessage:=Form1.MyProcess;
然后在Form1.MyProcess中截获消息,这儿的消息应该是所有窗口的消息,但好像有问题,我再试试
首先, 你所有的form中必须在相同位置增加一个TWndMethod类型变量(比如都加到private部分的第一个), 例如: TForm1 = class(TForm)
....
private
OldWndProc: TWndMethod;
...
end;第二步: 定义一个普通函数,
procedure MyWndProc(objSelf: TForm; var Message: TMessage);
begin
case Message.Msg of // 处理消息
...
end;
TForm1(objSelf).OldWndProc(Message); // 调用原form的WndProc
end;
用如下方法可以将各form的wndproc设置成相同的值:procedure SetFormWndProc(Frm: TForm);
var
m: TWndMethod;
begin
TForm1(Frm).OldWndProc := Frm.WindowProc;
m.Code := @MyWndProc;
m.Data := Pointer(Frm);
Frm.WindowProc := m;
end;
设置时
m.Code := @MyWndProc;
m.Data := Pointer(Frm);
请改为:
TMethod(m).Code := @MyWndProc;
TMethod(m).Data := Pointer(Frm);