Rol*_*son 13 delphi delphi-2007
我有一个小应用程序,大多数时候在Start-button后面有一个动作,应该从命令行参数/ AUTORUN触发.如果缺少该参数,用户也可以手动按下该参数.
我的问题是我应该在哪里对命令行进行此检查,以便在给出GUI时仍然更新.目前的解决方案是这样,但在动作完成之前不会更新GUI.
procedure TfrmMainForm.FormShow(Sender: TObject);
begin
if FindCmdLineSwitch('AUTORUN') then
btnStart.Click;
end;
Run Code Online (Sandbox Code Playgroud)
Dav*_*nan 20
从您的OnShow
事件处理程序发布自己的消息.一旦应用程序开始为其消息队列提供服务,就会立即处理此问题.只有在应用程序准备好接收输入时才会发生这种情况.这符合您对我的要求的理解.
const
WM_STARTUP = WM_USER;
....
procedure TfrmMainForm.FormShow(Sender: TObject);
begin
PostMessage(Handle, WM_STARTUP, 0, 0);
OnShow := nil;//only ever post the message once
end;
Run Code Online (Sandbox Code Playgroud)
添加消息处理程序来处理消息:
procedure WMStartup(var Msg: TMessage); message WM_STARTUP;
Run Code Online (Sandbox Code Playgroud)
你可以像这样实现:
procedure TfrmMainForm.WMStartup(var Msg: TMessage);
begin
inherited;
if FindCmdLineSwitch('AUTORUN') then
btnStart.Click;
end;
Run Code Online (Sandbox Code Playgroud)
在FormShow中向自己发布消息。在消息处理程序中,运行btnStart。
TfrmMainForm = class(TForm)
// snip
private
procedure AutoStart(var Message: TMessage); message wm_user;
// snip
end
procedure TfrmMainForm.FormShow(Sender: TObject);
begin
if FindCmdLineSwitch('AUTORUN') then
PostMessage(Handle, wm_user, 0, 0);
end;
procedure TfrmMainForm.AutoStart(var Message: TMessage);
begin
btnStart.Click;
end;
Run Code Online (Sandbox Code Playgroud)