我有一個組件,它附加到任何TCustomEdit控件。它過濾到TCustomEdit控件的鍵盤輸入,這樣控件的行爲就像一個maskedit。在TMemo,TEdit控件之外攔截pastefromclipboard消息
但我遇到了另一個問題。雖然我可以在粘貼之前分析剪貼板的內容,然後決定是否粘貼(OnKeyDown事件CTRL + V),但我無法通過右鍵單擊菜單來粘貼。
我不想攔截OnChange事件,因爲我想在控件的文本實際更改之前進行操作。
感謝建議
我有一個組件,它附加到任何TCustomEdit控件。它過濾到TCustomEdit控件的鍵盤輸入,這樣控件的行爲就像一個maskedit。在TMemo,TEdit控件之外攔截pastefromclipboard消息
但我遇到了另一個問題。雖然我可以在粘貼之前分析剪貼板的內容,然後決定是否粘貼(OnKeyDown事件CTRL + V),但我無法通過右鍵單擊菜單來粘貼。
我不想攔截OnChange事件,因爲我想在控件的文本實際更改之前進行操作。
感謝建議
這裏是如何做到這一點:
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;
感謝名單了很好的建議,大衛。
你可以聽WM_PASTE嗎? –
@DavidHeffernan:我想,但是如何:-)我不知道如何攔截另一個控件的WM_Paste。有沒有辦法通過這個控制管事件到達附加的TCustomEdit控件? – lyborko
替換窗口過程。我想你使用WindowProc屬性。 –