我正在嘗試修改粘貼在TEdit后代中的文本。
當用戶粘貼一些文本時,我想用“Y”替換所有“X”字符,而不修改實際的剪貼板文本內容。
我截獲了這WM_PASTE條訊息,但我不知道有任何“干凈”的方式來更改粘貼到控制元件中的文本。
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TMyEdit = class(Vcl.StdCtrls.TEdit)
private
procedure WMPaste(var Msg: TWMPaste); message WM_PASTE;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses
Clipbrd;
procedure TMyEdit.WMPaste(var Msg: TWMPaste);
begin
inherited;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Edt : TMyEdit;
begin
Edt := TMyEdit.Create(Self);
Edt.Top := 10;
Edt.Left := 10;
Edt.Parent := Self;
end;
end.
我發現的唯一作業方法是臨時替換剪貼板內容,但我正在尋找一種更清潔的解決方案(如果有的話......)。
procedure TMyEdit.WMPaste(var Msg: TWMPaste);
var
PrevClipboardText : string;
begin
if(IsClipboardFormatAvailable(CF_TEXT)) then
begin
PrevClipboardText := Clipboard.AsText;
try
Clipboard.AsText := StringReplace(Clipboard.AsText, 'X', 'Y', [rfReplaceAll]);
inherited;
finally
Clipboard.AsText := PrevClipboardText;
end;
end else
begin
inherited;
end;
end;
uj5u.com熱心網友回復:
為什么不做顯而易見的事情?
procedure TEdit.WMPaste(var Msg: TWMPaste);
begin
SelText := F(Clipboard.AsText);
end;
F你的字串轉換函式在哪里。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/471636.html
上一篇:將顏色過濾器應用于位圖
