如何在TEdit onkeyup事件中将字符更改为星号?

时间:2016-12-04 20:09:31

标签: delphi

我的客户要求我做出一个"效果"每次释放任何键盘键时,将该字符更改为字段上的星号。

在Delphi中如何做到这一点?

我有Html + Javascript,如this。 .js代码可以找到here

2 个答案:

答案 0 :(得分:2)

使用标准的Delphi控件无法实现您的目标。

VCL编辑控件使用底层Windows EDIT控件的功能来屏蔽“密码”类型编辑控件的输入字符。因此,行为由Windows(OS)控件决定,而不是Delphi本身。

您可以尝试通过使用非密码字段并处理键事件来根据需要用星号或任何其他屏蔽字符替换字符来获得所需的效果,但您还需要单独维护编辑的预期内容控制。

这几乎可以更容易地实现为自定义编辑控件,而不是尝试使用事件自定义标准编辑控件的行为。

我怀疑自定义控件的实现不是您所追求的解决方案。

答案 1 :(得分:1)

以下模拟了js代码的行为,并且还处理了差异退格。

type
  TForm2 = class(TForm)
    Edit1: TEdit;
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  private
    FEditText: string;

procedure TForm2.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Key = ^H then
    SetLength(FEditText, Length(FEditText) - 1)
  else
    FEditText := FEditText + Key;
end;

procedure TForm2.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  Edit1.Text := StringOfChar('*', Length(Edit1.Text));
  Edit1.SelStart := Length(Edit1.Text);
end;

FEditText相当于js代码中的df[0].Value,即输入的实际值。

请注意,没有选项可以重置文本,因为js代码中没有。