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

Вниз

Закрытие формы в её FormActivate   Найти похожие ветки 

 
Не знающий   (2003-07-09 23:53) [0]

Есть две формы. На превой форме лежит баттон, по нажатию на который открывается вторая форма.

procedure TForm1.Button1Click(Sender:TObject);
begin
ShowMessage("1");
Form2.ShowModal;
ShowMessage("2");
end;

procedure TForm2.OnActivate(Sender:TObject);
begin
{Чего-то делается}
{................}
Form2.Close;
end;

После нажатия на баттон получаю сообщ 1 и открывается вторая форма. После того как чего-то во второй форме выполняется выскакивает сообщение 2, но форма остаётся на экране, т.е. во второй форме всё проходит успешно, управление передаётся в форму 1. Почему так происходит (вторая форма не закрывается)?


 
Marat ©   (2003-07-10 01:27) [1]

Дело в том, что у неглавных форм вызов метода Close не
приводит к закрытию (уничтожению) формы, как это происходит
при вызове Close главной формы. У второй формы это равносильно
вызову метода Hide, т.е. она просто "прячется", но не
уничтожается. А события типа OnActivate,OnCreate,OnShow и т.д.
не позволяют менять свойство Visible (что и происходит при
вызове Close второй формы). Если бы ты вместо Form2.ShowModal
написал просто Form2.Show, то у тебя вообще бы исключение
выскочило.В данном случае вместо OnActivate засунь весь код в
OnPaint и всё будет работать нормально.


 
Германн ©   (2003-07-10 01:55) [2]

Еще один вариант - заменить "прямое" закрытие на "отложенное". Т.е. вместо
Form2.Close;
поставить
PostMessage(Handle,WM_Close,0,0);
при необходимости добавив Exit сразу после PostMessage;


 
Skier ©   (2003-07-10 08:52) [3]

>Не знающий (09.07.03 23:53)
Мне кажется в твоей программе неправильная логика.
И OnActivate тут ни при чём.
Дело в том что Form2.ShowModal это функция .
Попробуй это использовать...


 
ЮЮ ©   (2003-07-10 09:11) [4]

и модальная форма "изнутри" должна закрывается ModalResult := mrXXX, а не Close


 
Дин Каа   (2003-07-10 12:04) [5]

Кстати в хелпушнике на ShowModal очень подходящий пример есть.
Как раз такой случай


 
Не знающий   (2003-07-10 19:02) [6]

OK. Спасибо


 
FoxBox   (2003-07-14 09:22) [7]

Как вариант, по условию в onActivate
запускай таймер, если надо закрыть окно.

Timer1.Enabled := true;

а в таймере напиши:
Timer1.Enabled := false; // от греха подальше, достаточно одного вызова
Close;

Проблема решится...



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

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

Наверх




Память: 0.48 MB
Время: 0.02 c
9-77704
Antichacker
2003-01-31 10:21
2003.07.24
Существует ли какая-либо документация по GLScene?(Eng)


3-77718
Zigs
2003-06-30 12:06
2003.07.24
Проблема с точностью значения на клиенте ...


14-78109
Lika
2003-07-08 13:03
2003.07.24
Срочно! Пожалуйста помогите!


1-77967
denick
2003-07-10 01:31
2003.07.24
Delphi & MS Word.


14-78062
Aga
2003-07-05 13:13
2003.07.24
Ура!!