当激活已经创建的动态组件时,如何使OnActivate事件处理程序(如OnEnter / OnExit)触发?

时间:2014-09-09 17:08:07

标签: delphi

我目前正在为一个学校项目编写代码。我提前为一个可能的noob问题道歉。

我需要为一个虚构的非政府组织制作一个系统,我需要让所有用户在使用该程序时注册并登录。

我使用editboxes和maskedits来接收登录数据。登录屏幕有两个编辑框,一个用于用户名,另一个用于密码。注册屏幕是相同的形式,已调整大小,并带有两个额外的动态编辑框:一个用于确认密码,另一个用于用户的电子邮件地址。

现在,我使静态编辑框包含默认值:如果用户进入编辑框,则默认值将消失。如果用户随后退出编辑框而未输入任何值,则会再次出现默认值。我还没有设法让动态编辑框也这样做。

如果激活已创建的动态组件,OnActivate事件处理程序(如OnEnter / OnExit)是如何触发的?

1 个答案:

答案 0 :(得分:5)

如果您使用的是支持XP +视觉样式的相对现代的Delphi版本,那么TEdit具有TextHint属性,可以完全满足您的要求,而无需使用任何事件

procedure TMyForm.FormCreate(Sender: TObject);
var
  Edit: TEdit;
begin
  Edit := TEdit.Create(Self);
  Edit.Parent := ...;
  ...
  Edit.TextHint := 'default text here';
end;

否则,如果你真的想要使用这些事件,那么你可以这样做:

procedure TMyForm.FormCreate(Sender: TObject);
var
  Edit: TEdit;
begin
  Edit := TEdit.Create(Self);
  Edit.Parent := ...;
  ...
  Edit.Text := 'default text here';
  Edit.OnEnter := EditEnter;
  Edit.OnExit := EditExit;
end;

procedure TMyForm.EditEnter(Sender: TObject);
begin
  if TEdit(Sender).Text = 'default text here' then
    TEdit(Sender).Text := '';
end;

procedure TMyForm.EditExit(Sender: TObject);
begin
  if TEdit(Sender).Text = '' then
    TEdit(Sender).Text := 'default text here';
end;