|
|
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Добрый день! Мне в момент загрузки основной формы при определенных условиях нужно делать выход из программы. Если делать это на событие OnShow - функция exit (из stdlib.h) ругается, что нельзя менять фокус ненарисованных объектов, а метод Application->Terminate() молчит, но и не завершает прогу. Так что получается два вопроса: - на какое все-таки событие корректнее вешать выход? и - какую функцию выхода правильнее использовать в такой ситуации? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 12:08 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
PostQuitMessage ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 12:25 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Не, похоже событие OnShow не дает так просто выйти: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 12:50 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Короче не очень я понял природы такого явления: в процессе обработки OnShow методы Application->Terminate(), Form->Close() и др. сразу не срабатывают, а только после завершения OnShow. Хотя наверно так и правильно. Сделал, как надо, добавив условие Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 13:47 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
блин..., добавив условие Код: plaintext 1. 2. 3. 4. Тогда все завершается, когда мне надо. Все. вопрос закрыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 13:49 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
А просто Close(); не подходит чтоли ? i_i (';') (V),(V),, JS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 14:05 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Какое-то неудачное событие выбрано. То есть мы показываем форму и тут же ее убираем. Зачем это мелькание формой? В таких случаях я использую OnCreate или конструктор, что логично, запуск приложения - инициализация - форма не показывается, а приложение полностью работает, в этот момент и проверяем условие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 17:07 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
а про просто Close() я и не догадался :). Для интереса проверил - точно также сразу не закрывает, а только пройдя до конца OnShow. 2dishlo - а никакого мелькания нет. Первым делом выводится диалог запроса пароля и пользователя, а дальше - либо сразу сброс, либо перезапрос пароля, либо (если все ОК) уже рисуется форма. А OnCreate в моем случае не катит, т.к. форма главная, а там мне надо еще к элементам формы DataModul обращаться, получается Access Violation. 2All - в любом случае спасибо за ответы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2004, 18:09 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Не может быть. Если ты делаешь выход в Show, то стопудово мелькание есть, просто у тебя слишком быстрая видеокарта и процессор. Посмотри на слабых тачках-заметишь. Лучше у нее visible убирать, а когда все ОК, включать IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2004, 13:17 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Если нужно закрывать все приложение целиком, то можно вставить проверку в сам запуск приложения: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop //--------------------------------------------------------------------------- USEFORM("unit1.cpp", Form1); USEFORM("unit2.cpp", DataModule1); /* TDataModule: File Type */ USEFORM("unit3.cpp", Login); //--------------------------------------------------------------------------- #include "unit3.h" #include "unit2.h" WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { Application->Initialize(); Application->CreateForm(__classid(Tdm), &DataModule1); TLogin *Login = new TLogin(Application); Login->... - Если нужно что-то запустить перед проверкой. if(Login->ShowModal() == mrOk) { Application->CreateForm(__classid(TfrmMain), &Form1); Application->Run(); } delete Login; } catch (Exception &exception) { Application->ShowException(&exception); if(Login != NULL) delete Login; } catch (...) { try { throw Exception(""); } catch (Exception &exception) { Application->ShowException(&exception); } if(Login != NULL) delete Login; } return 0; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 09:09 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
авторформа главная, а там мне надо еще к элементам формы DataModul обращаться, получается Access Violation Вообще, можно без проблем сначала создавать дата модуль, а потом главную форму. В свойствах проекта поменяйте порядок создания. Самый кашерный способ - это вставить в функцию WinMain свою проверку, после создания всех форм, как уже было предложено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 09:56 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Короче не очень я понял природы такого явления: в процессе обработки OnShow методы Application->Terminate(), Form->Close() и др. сразу не срабатывают, а только после завершения OnShow. Само собой :) это азы событийного программирования для Windows (да и не только) - ведь вся обработка событий происходит в одном потоке - так что это просто физически невозможно - "заморозить" выполнение одного события и выполнить следующее! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 10:25 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Да там вобще капец с событиями. Вот на прошлой неделе... Разруливал как раз очередь событий. Нотификация о потере фокуса приходит вне очереди(отчего весь головняк и был). MSDN советовал накатать своё сообщение, чтобы в очередь эту нотификацию поставить. Ага... у меня 30 классов и я сщас всё брошу пойду для каждого обработчики делать(MFC).. Решил в существующем(OnChar) сделать исключительную ситуацию. Не получилось. Точнее получилось, но винды в MFC это сообщение порезали. Ок. Беру SendMessage и напрямую посылаю в окно сообщение (WM_CHAR). Оно приходит тут же!!! Прям недоробатывая текущий обработчик! Ничё не пойму... Это MFC такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 10:48 |
|
||
|
Простой вопрос по очередности событий
|
|||
|---|---|---|---|
|
#18+
Спасибо всем продолжающим отвечать! :) В принципе, разобрался уже с ситуацией, но комментарии читать было все равно полезно и интересно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.04.2004, 11:45 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=451&tid=2035148]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 225ms |
| total: | 375ms |

| 0 / 0 |
