Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.02 c
14-31411
NickName
2003-06-25 17:34
2003.07.10
Репликации


7-31532
Leos
2003-04-25 21:35
2003.07.10
ShellListView


1-31200
anod
2003-06-25 22:41
2003.07.10
Определение отступов страницы


14-31476
Onward
2003-06-23 00:10
2003.07.10
Строковые переменные...


14-31447
anbezr
2003-06-23 18:43
2003.07.10
Определить, уничтожен ли объект




   Наверх