I have a small application that most of the time have an action behind a Start-button that should be triggered from the commandline parameter /AUTORUN. If that parameter is
In the FormShow post yourself a message. In the message handler run your 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;
An easy way would be a timer, with an event like this:
begin
Timer1.Enabled := False;
if FindCmdLineSwitch('AUTORUN') then
btnStart.Click;
end;
And an interval of a few thousand milliseconds.
Post yourself a message from your OnShow
event handler. This will be processed as soon as your application starts servicing its message queue. That only happens when the application is ready to receive input. Which matches your my understanding of your requirements.
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;
Add a message handler to deal with the message:
procedure WMStartup(var Msg: TMessage); message WM_STARTUP;
You'd implement that like this:
procedure TfrmMainForm.WMStartup(var Msg: TMessage);
begin
inherited;
if FindCmdLineSwitch('AUTORUN') then
btnStart.Click;
end;