2013-06-21 14 views
7

TEditコンポーネントに関しては、コンポーネントがWindowsのクリップボードから複数行の貼り付けを処理することは可能ですか?言い換えれば複数の行をTEditに貼り付け

、以下のデータは、Windowsのクリップボードにあった場合:

Hello 
world 
! 

...と、ユーザーはそれを持っていることが可能であろう、CTRL + Vを押した後、TEDITで自分のカーソルを置いTEditは次のように入力を表示します。

こんにちは!

答えて

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

関連する問題