我的客户要求我做出一个"效果"每次释放任何键盘键时,将该字符更改为字段上的星号。
在Delphi中如何做到这一点?
答案 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代码中没有。