我怎么不能拦截消息(100分)

  • 主题发起人 主题发起人 周晓晖
  • 开始时间 开始时间

周晓晖

Unregistered / Unconfirmed
GUEST, unregistred user!
我想拦截一些消息如:WM_SETFOCUS,WM_KILLFOCUS,WM_LBUTTONDOWN等但
DELPHI的控件好象把它们都屏蔽了怎样才能拦截呢?
 
可以在窗口过程里拦截。去看看TControl.WindowProc的帮助和例子就明白了。
 
1、建议到DELPHI的C:/Program Files/Borland/Delphi5/Demos目录下找一个瞧瞧!
2、Delphi自带一个“WinSight.exe”程序,你可以参考参考!
3、或你可以自定义一个过程取带DELPHI里的过程,通过钩子过滤和拦截一些消息!
 
这是拦截FLASH上右键的程序:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
OleCtrls, ShockwaveFlashObjects_TLB, StdCtrls, ExtCtrls, jpeg;
type
TForm1 = class(TForm)
flash: TShockwaveFlash;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure mymessage(var Msg: TMsg; var Handled: Boolean);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure tform1.mymessage(var Msg: TMsg; var Handled: Boolean);
begin
if (msg.message=WM_rbuttondown) and (msg.hwnd=flash.handle) then
begin
handled:=true;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
application.onmessage:=mymessage;
end;
end.
 
protected
procedure WMLBUTTONDOWN(Var Message:TWMLBUTTONDOWN); Message WM_LBUTTONDOWN;
procedure WMKILLFOCUS(VAR Message:TWMKILLFOCUS); Message WM_KILLFOCUS;
....


PROCEDURE TFORM1.WMLBUTTONDOWN(VAR MESSAGE:TWMLBUTTONDOWN);
BEGIN
Inherited;
// Do something ...
END;
...
 
Delphi就这点不好,拦控件的消息就最好得封装组件啦。
 
拦控件的消息和拦Windows消息一样的,
CBN_DBCLICK
CBN_EDITCHANGE
CBN_SETFOCUS
CBN_KILLFOCUS

CM_ACTIVATE
CM_DEACTIVATE

CN_CHAR
CN_KEYUP
CN_KEYDOWN

等等……
 
不封装当然可以, 可以像写一般程序一样
 
多人接受答案了。
 
后退
顶部