0

我有一个组件,它附加到任何 TCustomEdit 控件。它过滤输入到 TCustomEdit 控件的键盘输入,使控件的行为类似于 maskedit。

但是我遇到了另一个问题。虽然我可以在粘贴之前分析剪贴板的内容,然后决定是否粘贴(OnKeyDown 事件 CTRL + V),但我无法通过右键菜单捕捉粘贴。

我不想拦截 OnChange 事件,因为我想在控件的文本实际更改之前进行操作。

感谢您的建议

4

2 回答 2

2

我认为您可以通过侦听发送到目标控件的 WM_PASTE 消息来做您需要的事情。最简单的方法是通过 WindowProc 属性替换窗口过程。

于 2013-08-25T20:03:42.047 回答
1

这是如何做到的:

  TTextMask = class (TComponent)
  private
    FtempWndProc: TWndMethod;
    FWinControl:TWinControl;
    procedure DoWindowProc(var Message: TMessage);
    procedure SetWinControl(Value: TWinControl);
    //...
  published
    //...
    property WinControl : TWinControl read FWinControl write SetWinControl;
  end;

// ...

procedure TTextMask.SetWinControl(Value: TWinControl);
begin
  if Assigned(Value) and  not Assigned(FWincontrol)
      then
            begin
            FtempWndProc := Value.WindowProc;
            Value.WindowProc := DoWindowProc;
            end;
   //...
   FWincontrol:=Value;
end;



procedure TTextMask.DoWindowProc(var Message: TMessage);
var s:string;
    Index:Integer;
    m:integer;
begin
   if Message.Msg = WM_Paste then
     begin
     // code here
     end;
   FtempWndProc(Message);
end;

谢谢你的好建议,大卫。

于 2013-08-25T19:54:14.577 回答