在瀏覽器中運行一個uniGUI應用,當超過一定時間,無人操作時,我們想實現自動退出應用,該如何實現呢?
下面是具體的實現方法:
在MainForm中,增加了一個事件OnSessionIdle,當超過一定時間無人操作時,會觸發這個事件,這個時間在哪里設置呢?答案是UniServerModule的AjsxTimeout這個屬性,單位毫秒。
利用上面的原理,我們開始實現一個超過30秒無人操作時,自動退出應用。
1.設置UniServerModule.AjaxTimeout:=30000
2.實現MainForm.OnSessionIdle事件:
在這個事件中,我們顯示一個提示窗口UniIdleForm,當這個窗口不返回mrOK時,關閉應用。
procedure TMainForm.UniFormSessionIdle(Sender: TObject); begin UniIdleForm.ShowModal( procedure(Sender: TComponent; AResult:Integer) begin if AResult <> mrOK then begin UniSession.Terminate('Your session terminated because it was idle for 30 seconds!'); end; end ); end;
3.接下來,看UniIdleForm的實現:
建立一個UniIidleForm,放置一個UniTimer1,設置Interval=5000,即5秒觸發一次。
建立一個私有變量FCnt,初始值設置為6,在UniTimer1的OnTimer事件中,利用FCnt變量,控制計時。當FCnt小等於0時,自動退出窗口並設置返回值為mrCancel。具體的代碼:
procedure TUniIdleForm.UniTimer1Timer(Sender: TObject); begin if FCnt <= 0 then begin ModalResult := mrCancel; Exit; end; UniLabel1.Caption := 'Session will be terminated in <b>' + IntToStr(FCnt * 5) + '</b> seconds.<br>' + 'Please press "Continue" to return to your session.'; Dec(FCnt); end;
本文基於官方的例子Session Idle Timeout所寫,具體項目在FMSoft\Framework\uniGUI\Demos\Desktop\Session Idle Timeout目錄。
