如何隐藏TEdit的内容并复制到剪贴板?

时间:2015-04-24 09:19:56

标签: delphi

我正在使用一个带有2个BitBtns和2个TEdits的Delphi XE2项目。两个TEdits都包含秘密数据,因此我隐藏了内容。我的要求是在BitBtn1点击之后将TEdit1的内容复制到剪贴板,对于TEdit2也是如此。这是我的示例代码:     单位Unit1;

http://stackoverflow.com/a/16910191/2511206
OR
http://stackoverflow.com/a/26749685/2511206

但问题如下:
1.如果设置了interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons, Clipbrd; type TMainForm = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; BitBtn3: TBitBtn; BitBtn4: TBitBtn; BitBtn5: TBitBtn; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.BitBtn1Click(Sender: TObject); begin Edit1.PasswordChar := #0; Clipboard.Clear; Edit1.CopyToClipboard; Edit1.PasswordChar := '*'; end; procedure TMainForm.BitBtn2Click(Sender: TObject); begin Edit2.PasswordChar := #0; Clipboard.Clear; Edit2.CopyToClipboard; Edit2.PasswordChar := '*'; end; procedure TMainForm.FormCreate(Sender: TObject); begin Edit1.Text := 'User Name'; Edit1.PasswordChar := '*'; Edit2.Text := 'Password'; Edit2.PasswordChar := '*'; end; end. ,则无法将内容复制到剪贴板 2.如果我编译了示例代码,PasswordChar := '*';单击TEdit1后将内容复制到剪贴板,但BitBtn1单击TEdit2后内容未复制到剪贴板,尽管第一次操作(BitBtn2)成功执行 3.如果我双击Clipboard.Clear;,然后点击TEdit2现在BitBtn2内容将被复制到剪贴板。
我不知道为什么会这样发生?

2 个答案:

答案 0 :(得分:1)

如果要将文本放在剪贴板中,请按以下步骤操作:

Clipboard.AsText := SecretEdit.Text;

Clipboard.AsText := SecretEdit.SelText;

控件的默认行为是阻止复制到剪贴板的原因是,如果您离开计算机而没有意识到您在剪贴板上以明文形式留下密码以供恶意攻击者窃取。您应该考虑是否要将此风险与应用程序的用户一起承担。

答案 1 :(得分:0)

如果未选择任何文本,则CopyToClipboard不执行任何操作。 使用此:

procedure TMainForm.BitBtn2Click(Sender: TObject);
begin
  Edit2.SetFocus;
  Edit2.PasswordChar := #0;
  Clipboard.Clear;
  Edit2.CopyToClipboard;
  Edit2.PasswordChar := '*';
end;

procedure TMainForm.BitBtn1Click(Sender: TObject);
begin
  Edit1.SetFocus;
  Edit1.PasswordChar := #0;
  Clipboard.Clear;
  Edit1.CopyToClipboard;
  Edit1.PasswordChar := '*';
end;