2013-06-21 134 views
7

对于TEdit组件,组件是否可以通过将换行符转换为空格来处理Windows剪贴板中的多行粘贴?将多行代码粘贴到TEdit中

换句话说,如果下面的数据是在Windows剪贴板:

Hello 
world 
! 

...和用户把他们的光标在TEDIT然后按CTRL + V,将有可能有TEdit显示输入为:

Hello world!

回答

12

您将需要使用的中介类的子类的TEdit,并添加一个处理程序WM_PASTE消息:

unit Unit3; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls, DB, adsdata, adsfunc, adstable; 

type 
    TEdit= class(StdCtrls.TEdit) 
    procedure WMPaste(var Msg: TWMPaste); message WM_PASTE; 
    end; 

type 
    TForm3 = class(TForm) 
    AdsTable1: TAdsTable; 
    Edit1: TEdit; 
    private 
    { Private declarations } 
    public 
    { Public declarations } 
    end; 

var 
    Form3: TForm3; 

implementation 

{$R *.dfm} 

uses 
    Clipbrd; 

{ TEdit } 

procedure TEdit.WMPaste(var Msg: TWMPaste); 
var 
    TempTxt: string; 
begin 
    TempTxt := Clipboard.AsText; 
    TempTxt := StringReplace(TempTxt, #13#10, #32, [rfReplaceAll]); 
    Text := TempTxt; 
end; 

end. 
+6

如果你有一个特定的情况下,你觉得子类是矫枉过正,你可以指定一个“YourEdit.WindowProc”的新消息处理程序。 – GolezTrol

相关问题