Як запустити процедуру після відкриття модального вікна

Привіт народ! Потрібна допомога.

Є не консольний додаток.

Треба зробити щоб воно запускалося з командного рядка і одночасно починало виконувати зазначені дії після того, як відкриється основна форма.

Як зробити? На обробники типу OnShow, OnActivate вішатися, мені здається, не красиво. На таймер також.

Хто знає, як це грамотно зробити?

Тьху, перепрошую, модальне вікно тут не до чого. Мається на увазі головна форма програми.

Другий потік пустити, мабуть

А якщо без потоку? Прога просто експортує і виводить результат в memo, а залежно від параметра в командному рядку закривається (або ні) після виконання. Програма проста з парою кнопок і не хотілося б морочитися з потоком.

Особисто я зараз надсилаю головній формі свою подію за допомогою Perform. І в обробнику програмно натискаю потрібні кнопки.

ну чому не гарно?

аналізуй в OnCreate командний рядок, і якщо не порожня, запускай те, що хочеш, а якщо порожня. (загалом твоя прога, що хочеш те й роби:)

procedure TfrmMain.FormCreate(Sender: TObject); begin < якась ініціалізація . filename := ""; . іf (ParamCount > 0) then begin filename := ParamStr(1); doOpen; end; end;

> На OnCreate ще не видно форми та результатів виконання > теж.

Так. Результати з'являться після виконання процедури, оскільки в Application.Run почнеться цикл обробки повідомлень.

Може, питання детальніше поставити варто?

В OnShow/OnCreate надіслати самому собі повідомлення, воно встане в чергу і буде отримано тоді, коли форма буде повністю відмальована і будуть виконані всі початкові обробники. Другий варіантвсе-таки таймер

> (4. Після виконання прога закривається)

тоді можеш взагалі без головної форми обійтися, показуй спліш

Залежно від параметрів, форма може закриватися, а може і ні.

Ну і роби на OnShow, нічого необачного в цьому немає

На OnShow форма не промальовується, спробуй:

procedure TForm1.FormShow(Sender: TObject); begin Application.ProcessMessages; Sleep(5000); end;

Для виконання дій всередині OnShow після спрацювання методу предка.

Вони спрацьовують і так.

Напиши тоді OnActivate або OnPaint з перевіркою на одноразовість запуску

> Напиши тоді OnActivate або OnPaint з перевіркою на одноразовість > запуску

Ось перевірки на одноразовість запуску мене і бентежать. Це ще один зайвий "If", хочеться простоти коду. Якщо можна зробити щось без "if" і наочніше то хотілося б так.

Просто я сподівався що є якийсь правильніший, ну незнаю, стандартний спосіб чи що.