Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];

Вниз

Как запустить процедуру после открытия модального окна?   Найти похожие ветки 

 
kull   (2002-06-17 15:00) [0]

Привет народ!
Нужна помощь.

Есть не консольное приложение.

Надо сделать чтоб оно запускалось из командной строки и сразу начинало выполнять указанные действия после того как откроется главная форма.

Как сделать?
На обработчики типа OnShow, OnActivate вешаться, мне кажется, не красиво. На таймер тоже...

Кто знает как это грамотно сделать?


 
kull   (2002-06-17 15:03) [1]

Тьфу, прошу прощения, модальное окно здесь не причем....
Имеется ввиду главная форма приложения.


 
Внук   (2002-06-17 15:18) [2]

Второй поток пустить, вероятно


 
kull   (2002-06-17 15:30) [3]

А если без потока?
Прога просто выполняет экспорт и выводит результат в memo, а в зависимости от параметра в командной строке закрывается (или нет) после выполнения.
Програмка простая с парой кнопок и нехотелось бы заморачиватся с потоком.


 
kull   (2002-06-17 15:32) [4]

Лично я сейчас посылаю главное форме свое событие с помощью Perform.
И в обработчике программно нажимаю нужные кнопки.


 
Lord Warlock   (2002-06-17 15:32) [5]


> 2 kull © (17.06.02 15:30)


ну почему не красиво?

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


 
Игорь Шевченко   (2002-06-17 15:37) [6]

procedure TfrmMain.FormCreate(Sender: TObject);
begin
{ некая инициализация }
.....
filename := "";
.....
if (ParamCount > 0) then begin
filename := ParamStr(1);
doOpen;
end;
end;


 
kull   (2002-06-17 15:44) [7]


> Игорь Шевченко © (17.06.02 15:37)

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



> Lord Warlock © (17.06.02 15:32)
> в общем твоя прога, что хочешь то и делай

Прога-то моя, но сделать хочется хорошо.


 
Lord Warlock   (2002-06-17 15:45) [8]


> kull © (17.06.02 15:44)


ну сделай на OnShow


 
Игорь Шевченко   (2002-06-17 15:49) [9]

kull © (17.06.02 15:44)


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


Да. Результаты появятся после выполнения процедуры потому как в Application.Run начнется цикл обработки сообщений.

Может, вопрос поподробнее задать стоило ?


 
Anatoly Podgoretsky   (2002-06-17 15:59) [10]

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


 
kull   (2002-06-17 16:08) [11]


> Игорь Шевченко © (17.06.02 15:49)
> Может, вопрос поподробнее задать стоило ?

Может я непонятно излагаю (...после того как откроется главная форма.), но картина должна быть такая:
1. запускается программа из командной строки.
2. Прорисовывается главная форма со всеми своими контролами.
3. Только после п.2 запускается на выполнение нужная задача.
(4. После выполнения прога закрывается)


> Anatoly Podgoretsky © (17.06.02 15:59)
> В OnShow/OnCreate послать самому себе сообщение,

Да я так пока и делаю, просто хотел узнать может есть еще какие способы получше.


 
Lord Warlock   (2002-06-17 16:11) [12]

2 kull © (17.06.02 16:08)


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


тогда можешь вообще без главной формы обойтись, показывай сплеш


 
kull   (2002-06-17 16:20) [13]


> Lord Warlock © (17.06.02 16:11)


В зависимости от параметров форма может закрываться, а может и нет.


 
Lord Warlock   (2002-06-17 16:27) [14]


> kull © (17.06.02 16:20)


Ну и делай на OnShow, ничего предрассудительного в этом нет



 
kull   (2002-06-17 16:39) [15]


> Lord Warlock © (17.06.02 16:27)


На OnShow форма не прорисовывается, попробуй:

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



 
Val   (2002-06-17 16:56) [16]

inherited;?


 
Lord Warlock   (2002-06-17 16:57) [17]


> Val © (17.06.02 16:56)


Зачем?


 
Val   (2002-06-17 17:00) [18]

для выполнения действий внутри OnShow после срабатывания метода предка.


 
Lord Warlock   (2002-06-17 17:03) [19]


> Val © (17.06.02 17:00)


Они срабатывают и так...



> kull © (17.06.02 16:39)


Напиши тогда на OnActivate или OnPaint с проверкой на однократность запуска


 
kull   (2002-06-17 17:09) [20]


> Напиши тогда на OnActivate или OnPaint с проверкой на однократность
> запуска


Вот проверки на однократность запуска меня и смущают.
Это еще один лишний "If", хочется простоты кода.
Если можно сделать что-то без "if" и нагляднее то хотелось бы так.

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


 
kull   (2002-06-17 18:04) [21]

Спасибо, Народ!!!



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.06.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.007 c
3-88766
Perec
2002-06-05 09:56
2002.06.27
Изменение наименования поля таблицы через системные таблыцы


3-88773
Сергей Матв
2002-06-05 15:06
2002.06.27
Работа с базами через ADO


14-89014
Bander_Log
2002-05-25 14:56
2002.06.27
Help


1-88802
abitur
2002-06-15 16:26
2002.06.27
Запись в файл(Глюки?)


1-88831
Bocman
2002-06-17 10:43
2002.06.27
Глюк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский