2017-02-25 65 views
0

似乎无法找到这个在这里的答案。最有可能非常简单,但因为我只是一个德尔菲“Dabbler”我一直无法弄清楚。 我有一个初始屏幕,当然它会首先启动,但它也可以作为登录屏幕。用户输入他们的名字,他们可以访问。但是,如果在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; 
+0

运行的定时器。如果过期,请关闭表单。 –

+0

大卫。我认为定时器将是答案,但我在哪里放置代码,在类函数我相信但我使用REPEAT UNTIL语句或{If(result = mrOK)或(MyTimer = xxxxx)然后}默认登录。 ...... –

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