2012-04-15 18 views
7

Cách bắt lệnh Dán và thay đổi văn bản của Clipboard trước khi văn bản đó được dán vào một TMemo, nhưng sau khi Dán, văn bản trong Clipboard phải giống như trước khi thay đổi?Làm thế nào để chặn (phát hiện) lệnh Dán vào TMemo?

Ví dụ, Clipboard có văn bản 'Câu hỏi đơn giản', văn bản đi trong TMemo là 'Симплe Qуeстиoн', và sau đó văn bản trong Clipboard giống như trước khi thay đổi, 'Câu hỏi đơn giản'.

Trả lời

13

Rút ra một điều khiển mới mà xuống từ 'TMemo' để đánh chặn thông điệp WM_PASTE:

type 
    TPastelessMemo = class(TMemo) 
    protected 
    procedure WMPaste(var Message: TWMPaste); message WM_PASTE; 
    end; 

uses 
    clipbrd; 

procedure TPastelessMemo.WMPaste(var Message: TWMPaste); 
var 
    SaveClipboard: string; 
begin 
    SaveClipboard := Clipboard.AsText; 
    Clipboard.AsText := 'Simple Question'; 
    inherited; 
    Clipboard.AsText := SaveClipboard; 
end; 

Nếu bạn muốn ngăn cấm bất kỳ thao tác dán ở tất cả, trống rỗng xử lý WMPaste.

+0

Cảm ơn @Ken, tôi misread câu hỏi. –

+0

:) Tôi nghĩ bạn đã đóng đinh nó. +1 và xóa nhận xét của tôi. –

3

Đây là một thay thế cho câu trả lời tuyệt vời Sertac, mà là để ghi đè WndProc của kiểm soát:

// For detecting WM_PASTE messages on the control 
OriginalMemoWindowProc: TWndMethod; 
procedure NewMemoWindowProc(var Message: TMessage); 
//... 

// In the form's OnCreate procedure: 
// Hijack the control's WindowProc in order to detect WM_PASTE messages 
OriginalMemoWindowProc := myMemo.WindowProc; 
myMemo.WindowProc := NewMemoWindowProc; 
//... 

procedure TfrmMyForm.NewMemoWindowProc(var Message: TMessage); 
var 
    bProcessMessage: Boolean; 
begin 
    bProcessMessage := True; 
    if (Message.Msg = WM_PASTE) then 
     begin 
     // Data pasted into the memo! 
     if (SomeCondition) then 
      bProcessMessage := False; // Do not process this message any further! 
     end; 

    if (bProcessMessage) then 
     begin 
     // Ensure all (valid) messages are handled! 
     OriginalMemoWindowProc(Message); 
     end; 
end; 
Các vấn đề liên quan