Вниз
Скачать: 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.012 c
3-31149
Oleg
2003-06-18 17:39
2003.07.10
Ошибка из-за индекса


1-31275
Астра
2003-06-26 11:30
2003.07.10
Поддержка нескольких языков в приложении


1-31353
_Dimitry
2003-06-27 10:18
2003.07.10
как разрешить пользователю вводить в Edit только цифры и запятую


4-31560
K_O_T
2003-05-06 22:35
2003.07.10
COM интерфейс IStorage. Help!


6-31384
alt7
2003-05-05 14:38
2003.07.10
TIdTelnet читать из буфера




   Наверх