یه روش به صورت زیر است:
یک پیام اختصاصی ایجاد کرده در این صورت در هنگام اجرای برنامه تان چهار حالت وجود خواهد داشت:
1- برنامه تان برای اولین بار اجرا شده است بدون پارامتر ورودی که در این صورت نیازی به کاری نیست.
2- برنامه تان برای اولین بار اجرا شده است ولی با پارامتر ورودی ای مانند show که در این حالت یک پیام به خود برنامه( ...SendMessage(TMainForm.Handle) ارسال شده و کار مورد نظر شما در روال پاسخ گویی به رویداد پیام می بایست آورده شود.
3- برنامه تان قبلا اجرا شده و دوباره برنامه را بدون پارامتر ورودی اجرا شده که در این صورت فقط برنامه دوم می بایست Terminate شود.
4- برنامه تان قبلا اجرا شده و دوباره برنامه را با پارامتر ورودی اجرا شده که در این صورت ابتدا یک پیام ارسال شده و سپس بلافاصله برنامه دوم که برنامه جاری باشد Terminate کرده و پیام به نسخه اول برنامه که در حافظه است تحویل خواهد شد که در این حالت دقیقا مانند حالت 2 به رویداد پیام پاسخ گویی می شود.
const
MY_MESSAGE = WM_USER + 4242;
type
TMainForm = class(TForm)
procedure MessageReceiver(var msg: TMessage); message MY_MESSAGE;
…
procedure TMainForm.FormCreate(Sender: TObject);
begin
if ParamStr(1)='show' then
begin
SendMessage(TMainForm.Handle, MY_MESSAGE, 0, DWORD(PChar('show')));
if ProgramIsRunning then Application.Terminate;
end;
end;
end;
procedure TMainForm.MessageReceiver(var msg: TMessage);
var
txt: PChar;
begin
txt := PChar(msg.lParam);
msg.Result := 1;
if txt='show' then
DoAnyThingThatYouWant;
end;