Вопрос по – Как перехватить (обнаружить) команду Вставить в TMemo?

7

Как поймать команду Вставить и изменить текст из буфера обмена до того, как этот текст будет вставлен в TMemo, но после вставки текст в буфере обмена должен быть таким же, как и до изменения?

Например, в буфере обмена есть текст «Простой вопрос», текст, который помещается в TMemo, является «& # x421; & # x438; & # x43C; & # x43F; & # x43B; e Q & # x443; e & # x441;" # x442; & # x438; o & # x43D; ", и после этого текст в буфере обмена остается таким же, как и до изменения," простой вопрос ".

Ваш Ответ

2   ответа
3

Это альтернатива отличному ответу Sertac, который заключается в переопределении WndProc элемента управления:

// 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;
15

Получите новый элемент управления, который происходит от «TMemo» перехватить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;

Если вы хотите вообще запретить любую операцию вставки, очистите обработчик WMPaste.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы