怎样地Memo中屏蔽掉右键弹出活动菜单功能,如何实现消息拦截 请问怎样拦截消息使得右击不出现活动菜单? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有个很简便的办法,拖一个PopupMenu1到窗体,空得,什么都不要添加,然后把memo1得PopupMenu属性设成这个PopupMenu1就可以了。你还可以自定义这个PopupMenu1 procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);begin Handled := true;end; 为什么要拦消息呢?拖一个PopupMenu1到窗体,空得,什么都不要添加,然后把memo1得PopupMenu属性设成这个PopupMenu1就可以了。 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; g_proc:pointer; g_procInt:Integer;implementation{$R *.dfm}Function HookWindowProc(hwnd:HWND;uMsg:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;var i: Integer;begin case uMsg of WM_RBUTTONDOWN : //Form1.Memo1.Lines.Add('aa'); //可以加入自己的代码,也可以什么都不添加 else Result:=CallWindowProc(g_proc,hwnd,uMsg,Wparam,Lparam); end;end;procedure Hook(s_handle:HWND);begin g_procInt:=SetWindowLong(s_handle,GWL_WNDPROC,Integer(@HookWindowProc)); g_Proc:=Pointer(g_procInt);end;procedure UnHook(s_handle:HWND);begin if g_procInt<>0 then begin SetWindowLong(s_handle,GWL_WNDPROC,g_procInt); g_procInt:=0; end;end;procedure TForm1.FormCreate(Sender: TObject);begin Hook(memo1.Handle);end;procedure TForm1.FormDestroy(Sender: TObject);begin UNHook(memo1.Handle);end;end. private { Private declarations } procedure WMContextMenu(var msg: TWMContextMenu);message wm_contextmenu; public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMContextMenu(var msg: TWMContextMenu);begin //showmessage('catch contextmenu message'); msg.Result := -1;end; 谢谢各位的鼎立支持:bluezwt(蓝色天涯):我如果在Form1.Create的事件过程中用不止一个的HOOK的话(比如:Hook(Edit1.Handle)),来监视其它的控件,好象不行啊,这是什么原因啊?谢谢! 在WORD中使用微软拼音打字时截获不了WM_IME_COMPOSITION Delphi DBGrid 排序 特别简单 关于数据库中日期类型数据比较问题!急!!! 在线等待!急!关于域用户验证 请教要使stringgrid中的某几列用五笔输入法,另几列用拼音输入法,如何实现?在线等待,急! delphi中如何使用com 各位大侠:如何将表中的记录用树形控件表示出来? DELPHI7中有MD5加密的控年吗?好像DELPHI6中有! 有意思的鼠标与键盘消息的录制与回放 delphi 怎么把 一个小程序封装成一个类 工作找到了,散点分吧 线条的移动问题!(简单啊!)
拖一个PopupMenu1到窗体,空得,什么都不要添加,
然后把memo1得PopupMenu属性设成这个PopupMenu1就可以了。
你还可以自定义这个PopupMenu1
var Handled: Boolean);
begin
Handled := true;
end;
拖一个PopupMenu1到窗体,空得,什么都不要添加,
然后把memo1得PopupMenu属性设成这个PopupMenu1就可以了。
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
g_proc:pointer;
g_procInt:Integer;implementation{$R *.dfm}Function HookWindowProc(hwnd:HWND;uMsg:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;
var
i: Integer;
begin
case uMsg of
WM_RBUTTONDOWN : //Form1.Memo1.Lines.Add('aa'); //可以加入自己的代码,也可以什么都不添加
else
Result:=CallWindowProc(g_proc,hwnd,uMsg,Wparam,Lparam);
end;
end;procedure Hook(s_handle:HWND);
begin
g_procInt:=SetWindowLong(s_handle,GWL_WNDPROC,Integer(@HookWindowProc));
g_Proc:=Pointer(g_procInt);
end;procedure UnHook(s_handle:HWND);
begin
if g_procInt<>0 then
begin
SetWindowLong(s_handle,GWL_WNDPROC,g_procInt);
g_procInt:=0;
end;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
Hook(memo1.Handle);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
UNHook(memo1.Handle);
end;end.
{ Private declarations }
procedure WMContextMenu(var msg: TWMContextMenu);message wm_contextmenu;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}{ TForm1 }procedure TForm1.WMContextMenu(var msg: TWMContextMenu);
begin
//showmessage('catch contextmenu message');
msg.Result := -1;
end;
bluezwt(蓝色天涯):我如果在Form1.Create的事件过程中用不止一个的HOOK的话(比如:Hook(Edit1.Handle)),来监视其它的控件,好象不行啊,这是什么原因啊?谢谢!