在TMemo,TEdit控件之外拦截pastefromclipboard消息

时间:2013-08-25 18:18:27

标签: delphi

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

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

我不想拦截OnChange事件,因为我想在控制文本实际发生变化之前采取行动。

感谢您的建议

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;

Thanx提出了一个很好的建议,大卫。