【问题标题】:Pasting multiple lines into a TEdit将多行粘贴到 TEdit
【发布时间】:2013-06-18 02:33:21
【问题描述】:

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

换句话说,如果 Windows 剪贴板上有以下数据:

Hello
world
!

...用户将光标放在 TEdit 中然后按下 CTRL+V,是否可以让 TEdit 将输入显示为:

世界你好!

【问题讨论】:

    标签: delphi-xe2 delphi-7 delphi-2010 delphi


    【解决方案1】:

    您需要使用插入器类对 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.
    

    【讨论】:

    • 如果你有一个特定的情况并且你觉得子类化是多余的,你可以为YourEdit.WindowProc分配一个新的消息处理程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 2012-05-01
    • 2010-10-24
    • 1970-01-01
    • 2023-01-07
    • 2023-03-22
    • 2021-07-24
    相关资源
    最近更新 更多