암호에 대해 폼에 TEdit 컨트롤을 배치했습니다. 내 목표는 TEdit 컨트롤이 포커스가 맞지 않을 때 별표를 표시하도록하고, 다른 사람들이 그것을 보지 못하게하고, 포커스가있을 때 편집을 허용하도록 암호를 표시하는 것입니다.TEdit.onEnter 이벤트에서 TEdit.PasswordChar 속성을 설정하면 TEdit에서 Delphi XE seattle의 선택 및 커서를 표시 할 수 없습니다.
이 작업을 수행하기 위해 OnEnter 및 OnExit 처리기를 추가하여 PasswordChar 속성을 # 0 및 '*'로 설정했습니다.
이것은 델파이 7에서 잘 작동했지만 델파이 XE seattle에서 잘못 처리되었습니다. TEdit 컨트롤은 깜박이는 편집 커서 나 OnEnter 이벤트가 발생한 후 강조 표시된 파란색 배경 선택을 표시하지 않는 이상한 상태가되었습니다. PasswordChar가 # 0으로 설정된).
디버그 모드에서 TEdit 컨트롤 소스 코드를 밟았으며 PasswordChar를 설정할 때 TEdit 컨트롤이 일부 핸들 (Windows API를 많이 알지 못함)을 다시 만듭니다. 나는 이것이 문제를 일으켰지 만 확실하지는 않으며 그것을 피하는 방법을 모른다.
제발 도와주세요, 나는 많은 시도를했지만 길을 찾지 못했습니다.
type
TTestForm = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
procedure Edit1Enter(Sender: TObject);
procedure Edit1Exit(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
TestForm: TTestForm;
implementation
{$R *.dfm}
procedure TTestForm.Edit1Enter(Sender: TObject);
begin
Edit1.PasswordChar := #0;
end;
procedure TTestForm.Edit1Exit(Sender: TObject);
begin
Edit1.PasswordChar := '*';
end;
end.
DFM : EM_SETPASSWORDCHAR 메시지
object TestForm: TTestForm
Left = 0
Top = 0
Caption = 'TestForm'
ClientHeight = 242
ClientWidth = 472
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Edit1: TEdit
Left = 72
Top = 48
Width = 225
Height = 21
PasswordChar = '*'
TabOrder = 0
Text = 'You can not see text selection'
OnEnter = Edit1Enter
OnExit = Edit1Exit
end
object Edit2: TEdit
Left = 72
Top = 75
Width = 225
Height = 21
TabOrder = 1
Text = 'Click this control to trigger TEdit1.OnExit'
end
end
감사합니다. J.Pelttari. 코드는 매력처럼 작동합니다! 그리고 당신은 그 메커니즘을 잘 설명했습니다. 너 정말 멋지다! 다시 감사합니다! –
왜''OnExit'에서''SendMessage (Edit1.Handle, EM_SETPASSWORDCHAR, Ord ('*'), 0)'를하지 않으시겠습니까? –
암호 메쏘드'SendMessage (Edit1.Handle, EM_SETPASSWORDCHAR, Ord ('*'), 0)'로 암호 char을 설정하면 암호 마스크에 해당 문자 (*)가 사용됩니다. AFAIK ES_PASSWORD 스타일은 Comctl32.dll ver 6 편집 컨트롤에 검은 색 원을 암호 마스크로 표시하는 데 필요한 모든 것입니다. –