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

Вниз

В событии Form1 onShow пишу Form2.ShowModal, но Form1 не показыва   Найти похожие ветки 

 
rolex   (2005-08-09 11:49) [0]

Нужно чтобы при запуске проги появилась Form1, а поверх неё Form2. Но при запуске Form1 не появляется, а появляется сразу Form2, только после закрытия Form2 Form1 уже видно.
Пытался в событии Form1 OnShow написать Visible:=true, но бестолку.
Прошу помочь.


 
msguns ©   (2005-08-09 12:07) [1]

Приведи код Project.pas


 
Юрий Зотов ©   (2005-08-09 12:12) [2]

Событие OnShow формы возникает ПЕРЕД тем, как она становится видимой. В этот момент Вы показываете вторую форму модально - а при модальном показе форма сама обрабатывает все сообщения приложения. Вот поэтому первая форма и не может стать видимой, пока не закроется вторая.

Вывод - показывать вторую форму надо позже, уже ПОСЛЕ того, как первая стала видимой. Решение - перенести код показа второй формы из OnShow в OnActivate и (если надо) ввести флажок показа (как поле первой формы):

type
 TForm1 = class(TForm)
   procedure FormCreate(...);
   procedure FormActivate(...);
   ...
 private
   FShowSecondForm: boolean;
 ...
 end;

procedure TForm1.FormCreate(...);
begin
 FShowSecondForm := True;
 ...
end;

procedure TForm1.FormActivate(...);
begin
 if FShowSecondForm then
 begin
   FShowSecondForm := False;
   ... // Здесь Ваш код модального показа второй формы
 end
end;


 
rolex   (2005-08-09 12:22) [3]

Я как раз с самого начала об этом подумывал.
Большое спасибо.


 
msguns ©   (2005-08-09 13:01) [4]

OnActivate - опасное место для выполнения каких-либо инициализирующих действий. Ваша модальная форма будет "вылазить" каждый раз, когда приложение будет активироваться (например, при переключених между приложениями из панели активных задач). Поэтому надо испрользовать либо флажок (например Tag формы 1), выставляемый сразу после инициализации и проверяемый в обработчике OnActivate, либо повесить вызов формы 2 на элемент управления (кнопку, пункт меню,..). ИМХО, второй способ предпочтительнее ибо не "навязывает" пользователю какие-либо действия сразу же после запуска приложения.


 
Юрий Зотов ©   (2005-08-11 13:43) [5]

Из cправки:

The OnActivate event of the application (TApplication), not the form, occurs when Windows switches control from another application.



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

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

Наверх




Память: 0.48 MB
Время: 0.029 c
14-1124836056
ArMellon
2005-08-24 02:27
2005.09.18
Проект .lazarus как бесплатная альтернатива делфи


4-1122359742
idiliya
2005-07-26 10:35
2005.09.18
Как правильно нотифицировать сервис из Winlogon Notification Pack


4-1122532698
MegaVolt
2005-07-28 10:38
2005.09.18
Какое событие отвечает за изменение размеров колонки ListView?


1-1124886439
Sidex
2005-08-24 16:27
2005.09.18
Как перемещать две формы ОДНОВРЕМЕННО?


14-1124796782
Antonn
2005-08-23 15:33
2005.09.18
Реализация голосования на сайте