2013-06-21 6 views
7

TEdit 구성 요소는 줄 바꿈 문자를 공백으로 변환하여 Windows 클립 보드에서 여러 줄 붙여 넣기를 처리 할 수 ​​있습니까? 다음 데이터가 Windows 클립 보드에 있다면 즉TEdit에 여러 줄 붙여 넣기

는 :

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