屏蔽编辑框的右键菜单

开发中,经常需要对一些编辑框作输入限制,如限制只能输入0..9的数字,这通过OnKeyPress事件即可达到:if not (Key in ['0'..'9', #8]) then Key := #0; 但是这只能限制键盘输入,对通过鼠标右键粘贴的情况就无法进行限制啦。下面的代码是通过对编辑框进行subclass而过滤掉WM_CONTEXTMENU右键菜单消息,从而达到屏蔽右键菜单。

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; 
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; 
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

转载于:https://www.cnblogs.com/railgunman/archive/2010/12/10/1902726.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值