delphi如何在form显示出来后处理指定的事件(例如自动登录)

时间:2023-03-09 19:18:27
delphi如何在form显示出来后处理指定的事件(例如自动登录)

最近写一个delphi客户端,遇到一个自动登录问题,已经解决了思路如下:

1.在Form的oncreate事件中读取用户配置文件,检查及处理是否保存了用户密码,是否自动登录,如果需要自动登录,

自动登录前的checkbox打勾,用户名,密码放入

2.在Form的FormActivate事件中处理自动登录业务,因为这个activate事件发生于formshow出来之后

用这个windows函数发送消息: PostMessage(Handle, UM_CHECKFIRSTRUN, 0, 0);

定义自己的函数来捕获处理消息:
---------------------
作者:银河使者
来源:****
原文:https://blog.****.net/zkrui2008/article/details/40511597
版权声明:本文为博主原创文章,转载请附上博文链接!

procedure UmCheckFirstRun(var Message: TMessage); message UM_CHECKFIRSTRUN;

procedure TForm1.UmCheckFirstRun(var Message: TMessage);
begin delay(); //延迟一个时间,不然用户会很诧异
readyLoginData; //处理自动登录业务的方法
end; ---------------------
作者:银河使者
来源:****
原文:https://blog.****.net/zkrui2008/article/details/40511597
版权声明:本文为博主原创文章,转载请附上博文链接!
begin
//sleep(1000);
PostMessage(Handle, UM_CHECKFIRSTRUN, , ); end;
//延迟指定时间
procedure delay(msecs:integer);
var
Tick: DWord;
Event: THandle; begin
Event := CreateEvent(nil, False, False, nil);
try
Tick := GetTickCount + DWord(msecs);
while (msecs > ) and (MsgWaitForMultipleObjects(, Event, False, msecs, QS_ALLINPUT) <> WAIT_TIMEOUT) do
begin
Application.ProcessMessages;
msecs := Tick - GetTickcount;
end;
finally
CloseHandle(Event);
end
end;