我有一个组件,它附加到任何TCustomEdit控件。它过滤来自TCustomEdit控件的键盘输入,因此控件的行为类似于maskedit。
但我遇到了另一个问题。虽然我可以在粘贴之前分析剪贴板的内容,然后决定是否粘贴(OnKeyDown事件CTRL + V),我无法通过右键菜单捕获粘贴。
我不想拦截OnChange事件,因为我想在控制文本实际发生变化之前采取行动。
感谢您的建议
答案 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提出了一个很好的建议,大卫。