首页 文章

如何在Delphi中使Splash Form超时

提问于
浏览
0

似乎无法在这里找到这个答案 . 很可能非常简单,但因为我只是一个德尔福“Dabbler”,我无法弄明白 . 我有一个Splash Screen,它当然首先开始,但它也可以作为登录屏幕 . 用户输入他们的名字并获得访问权限 . 但是,如果在15分钟的时间段内没有输入,我希望应用程序无论如何都要使用默认用户名登录,并告诉我没有实际用户登录 . 大部分内容都覆盖了,只是无法想象如何让它超时 . 我假设它必须在类函数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 回答

  • 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;
    

相关问题