如何在Delphi中使Splash Form超时

时间:2017-02-25 11:01:03

标签: delphi delphi-2007

似乎无法在这里找到答案。很可能非常简单,但因为我只是一个德尔福" Dabbler"我还没有弄清楚。 我有一个启动画面,它当然首先踢,但它也作为登录屏幕。用户输入他们的名字并获得访问权限。但是,如果在15分钟的时间段内没有任何输入,我希望应用程序无论如何都要使用默认用户名登录,并告诉我没有实际用户登录。大部分都已覆盖,只能#& 39;弄清楚如何让它超时。我假设它必须在类函数somwhere但是......这是代码。先谢谢你们。

    class function TSplashForm.Execute: boolean;
begin
  with TSplashForm.Create(nil) do
  try
    Result := ShowModal = mrOk;
  finally
    Free;
end;
end;

procedure TSplashForm.btnOKClick(Sender: TObject);
begin
  if edtLoginname.Text = UName then
    ModalResult := mrOK
  else
  begin
    ModalResult := mrNone;
    ShowMessage(edtLoginName.Text+' is an Incorrect Username.....Try AGAIN');
    edtLoginName.Text := '';
  end;
end;

1 个答案:

答案 0 :(得分:1)

只需在启动表单上添加TTimer,将其Interval设置为15分钟,然后让OnTimer事件关闭表单即可。每次用户输入内容时,请重置计时器。

procedure TSplashForm.edtLoginnameChange(Sender: TObject);
begin
  Timer1.Enabled := false;
  Timer1.Enabled:= true;
end;

procedure TSplashForm.Timer1Timer(Sender: TObject);
begin
  ModalResult := mrIgnore;
end;

procedure TSplashForm.btnOKClick(Sender: TObject);
begin
  if edtLoginname.Text = UName then
    ModalResult := mrOK
  else begin
    ModalResult := mrNone;
    ShowMessage(edtLoginName.Text+' is an Incorrect Username.....Try AGAIN');
    edtLoginName.Clear;
  end;
end;

然后你可以这样做:

class function TSplashForm.Execute: Integer; 
begin
  with TSplashForm.Create(nil) do
  try
    Result := ShowModal;
  finally
    Free;
  end;
end;

case TSplashForm.Execute of
  mrOK: // user logged in...
  mrIgnore: // timed out...
else
  // cancelled ...
end;