屏蔽编辑框的右键菜单
2010-12-10 23:25
246 查看
开发中,经常需要对一些编辑框作输入限制,如限制只能输入0..9的数字,这通过OnKeyPress事件即可达到:if not (Key in ['0'..'9', #8]) then Key := #0; 但是这只能限制键盘输入,对通过鼠标右键粘贴的情况就无法进行限制啦。下面的代码是通过对编辑框进行subclass而过滤掉WM_CONTEXTMENU右键菜单消息,从而达到屏蔽右键菜单。
var
FHookCtrls: TStringList;
{ 截获过滤编辑框Edit弹出右键菜单消息WM_CONTEXTMENU }
procedure UnhookControl(const Control: array of TWinControl);
var
I, X: Integer;
begin
for X := Low(Control) to High(Control) do
begin
I := FHookCtrls.IndexOf(IntToStr(Control[X].Handle));
if I >= 0 then
begin
SetWindowLong(Control[X].Handle, GWL_WNDPROC, Longint(FHookCtrls.Objects[I]));
FHookCtrls.Delete(I);
end;
end;
end;
initialization
FHookCtrls := TStringList.Create;
FHookCtrls.Sorted := True;
finalization
FHookCtrls.Free;
end.
来源:http://www.delphibbs.com/keylife/iblog_show.asp?xid=17224
var
FHookCtrls: TStringList;
{ 截获过滤编辑框Edit弹出右键菜单消息WM_CONTEXTMENU }
function EditWndProc(hwnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; var I: Integer; begin if Msg = WM_CONTEXTMENU then Result := 1 else begin I := FHookCtrls.IndexOf(IntToStr(hwnd)); if I >= 0 then Result := CallWindowProc(Pointer(FHookCtrls.Objects[I]), hwnd, Msg, WParam, LParam) else Result := 1; end; end; { 添加对编辑框Edit弹出右键菜单消息WM_CONTEXTMENU的过滤 }
procedure HookControl(const Control: array of TWinControl); var I, X: Integer; begin for X := Low(Control) to High(Control) do begin I := FHookCtrls.Add(IntToStr(Control[X].Handle)); FHookCtrls.Objects[I] := Pointer(GetWindowLong(Control[X].Handle, GWL_WNDPROC)); SetWindowLong(Control[X].Handle, GWL_WNDPROC, Longint(@EditWndProc)); end; end; { 取消对编辑框Edit弹出右键菜单消息WM_CONTEXTMENU的过滤 }
procedure UnhookControl(const Control: array of TWinControl);
var
I, X: Integer;
begin
for X := Low(Control) to High(Control) do
begin
I := FHookCtrls.IndexOf(IntToStr(Control[X].Handle));
if I >= 0 then
begin
SetWindowLong(Control[X].Handle, GWL_WNDPROC, Longint(FHookCtrls.Objects[I]));
FHookCtrls.Delete(I);
end;
end;
end;
initialization
FHookCtrls := TStringList.Create;
FHookCtrls.Sorted := True;
finalization
FHookCtrls.Free;
end.
来源:http://www.delphibbs.com/keylife/iblog_show.asp?xid=17224
相关文章推荐
- 屏蔽RCP的编辑区以及ViewPart右键菜单
- 屏蔽CHtmlView\WebBrower控件右键菜单技巧合集
- javascript——屏蔽右键快捷菜单
- 屏蔽windows应用程序中,windows自带的右键菜单
- 屏蔽FLEX右键菜单以及实现自定义的FLEX右键功能
- 学习 Message(5): 关于 TApplicationEvents.OnMessage 的第二个参数 可以屏蔽 TWebBrowser右键菜单:
- 屏蔽选中、粘贴、复制、剪切、右键菜单
- JS屏蔽右键菜单,复制,粘帖xxxxx........
- JS屏蔽右键菜单
- 屏蔽CHtmlViewWebBrower控件右键菜单技巧合集_转载自http://www.binzi.net/html/vc/2006/0902/10050.html
- js如何用判断鼠标的右键还是左键,屏蔽右键菜单
- CefSharp(三)屏蔽右键菜单
- 屏蔽右键菜单
- js屏蔽右键菜单,鼠标选中,兼容IE,FireFox
- Eclipse RCP中编辑器右键菜单与默认可拖动属性的屏蔽方法
- 屏蔽浏览器右键菜单
- 关于.NET中pictureBox右键菜单的屏蔽
- 屏蔽silverlight 4应用中的右键菜单
- 修改图片右键菜单的“编辑”程序
- js屏蔽浏览器右键菜单