Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];

Вниз

Закрытие формы в её 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
7-78163
Мфдукф
2003-05-15 19:29
2003.07.24
система


14-78077
Knight
2003-07-07 22:12
2003.07.24
Какими звонилками пользуется?


1-77983
Vasilii
2003-07-11 13:22
2003.07.24
двойная кнопка


3-77803
dougine
2003-06-30 13:49
2003.07.24
Как отследить ошибку


14-78151
you
2003-07-09 13:19
2003.07.24
проблема в findfirste





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский