Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.10;
Скачать: CL | DM;

Вниз

Как прервать показ формы для потомка TCustomForm   Найти похожие ветки 

 
Saint   (2003-06-27 05:51) [0]

Перед показом потомка проводится инициализация в перекрытом DoShow (открытие БД, таблиц и создание объектов), если происходит сбой, кидаю Exception. Но форма все равно появляется!!! Менять Visible нельзя - перед вызовом DoShow устанавливается внутренний флаг, запрещающий это (как в обработчиках событий OnShow и OnHide).
Есть вариант при сбое инициализаци послать форме сообщение о закрытии, но это криво (и почему-то не работает для главной формы приложения)(хотелось бы прервать показ формы в самом начале процесса, до установки всяких флагов, посылки WM_SHOWWINDOW и т.д.).
Возможно нужно переместить инициализацию в другой метод, или ловить какое сообщение? Есть у кого мысли по этому поводу?


 
Hooch ©   (2003-06-27 08:14) [1]

не проще инициализацию вынести в отдельную процедуру, потом
With TMyForm.Create(Application) do
try
MyInit;
Show;
except
Free;
end;


 
Zemal ©   (2003-06-27 10:47) [2]

Ну и зачем так делать? Не лучше ли воспользоваться событием OnCreate формы? Событие OnShow возникает уже после показа формы и в этом событии нельзя использовать свойство Visible, оно только для чтения и нельзя использовать метод Show, т.к. это будет зацикливание.
Я что-то непойму зачем тебе такая кривизна понадобилась???
При запуске приложения события возникают в таком порядке: OnCreate, OnActivate, OnShow. Бери события которые тебе нужны для задачи, а не лезь в дебри... может ещё скажешь что этих событий тебе нехватает или они кривые??? А может ты думаешь что событие OnCreate возбуждается до создания формы??? От того и пошол на такую кривизну? Тогда запомни что OnCreate возбуждается после создания формы и всех объектов, владельцем которых она является.


 
Юрий Федоров ©   (2003-06-27 10:55) [3]

Лучше всего в конструкторе формы. Если поднимешь Exception - атоматически вызовется деструктор - и вообще никаких проблем


 
Zemal ©   (2003-06-27 11:15) [4]

Ну и зачем так делать? Не лучше ли воспользоваться событием OnCreate формы? Событие OnShow возникает уже после показа формы и в этом событии нельзя использовать свойство Visible, оно только для чтения и нельзя использовать метод Show, т.к. это будет зацикливание.
Я что-то непойму зачем тебе такая кривизна понадобилась???
При запуске приложения события возникают в таком порядке: OnCreate, OnActivate, OnShow. Бери события которые тебе нужны для задачи, а не лезь в дебри... может ещё скажешь что этих событий тебе нехватает или они кривые??? А может ты думаешь что событие OnCreate возбуждается до создания формы??? От того и пошол на такую кривизну? Тогда запомни что OnCreate возбуждается после создания формы и всех объектов, владельцем которых она является.


 
FoxBox   (2003-06-27 11:53) [5]

Можно по-другому поступить - создай функцию, которая
будет проводить операции с данными (подготовка там всякая),
что делаешь в onShow. Если функция вернула тебе "все крутняво",
делаешь Show для немодальных или ShowModal для модльных
(сам знаешь, что делать). В противном случае можно даже
обругать юзверя или еще что-то там.


 
Alex_***   (2003-06-27 14:14) [6]

Если вызываешь ShowModal, то можно ее перекрыть, и не вызывать inherited в случае сбоя.



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

Текущий архив: 2003.07.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.02 c
14-31404
sapsi
2003-06-25 09:32
2003.07.10
Знание английского языка


11-31166
Alexander
2002-10-28 22:33
2003.07.10
Прудложение по реструктуризации и стандартизации компонент.


9-31064
Кен
2003-01-24 02:20
2003.07.10
GLScene Какие есть редакторы для создания, редактирования, конвер


3-31141
EndDie
2003-06-18 14:34
2003.07.10
Как выбрать нужную запись через CommandText TADODataSet-a?


4-31574
Sliski Slimak
2003-05-12 09:09
2003.07.10
Собщения для МедиаПлеера.....