![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Form.Close
ZX48 © (2006-08-14 17:39:00)GjПомите плиз. Не могу закрыть форму. В коде Form4.close, но не выполняется. В чем может быть проблема?
Anatoly Podgoretsky (2006-08-14 19:28:00) [1]при таком подходе не забудь убрать эту форму из списка Auto-Create
Этого недостаточно, надо еще убрать переменную формы, с этого и начать.
ZX48 (2006-08-14 19:10:00) [2]Спасибо. Все получилось
StriderMan (2006-08-14 18:26:00) [3]сделай так:
procedure ShowForm4;
begin
//тут сделай все проверки
with TForm4.Create(nil) do
try
ShowModal;
finally
Free;
end;
end;
при таком подходе не забудь убрать эту форму из списка Auto-Create
(Project-Options-Forms)
Loginov Dmitry (2006-08-14 18:24:00) [4]> хоть с помощью Halt.
А лучше так:
if ВсеНормально then
begin
Application.Initialize;
...
Application.Run;
end;
Loginov Dmitry (2006-08-14 18:22:00) [5]> Поподробнее можно? Как это будет работать.
В файле проекта *.dpr перед Application.Initialize выполняешь все необходимые проверки. И тама можешь выходить из программы как хочешь, хоть с помощью Halt.
ZX48 (2006-08-14 18:22:00) [6]Хорошо! Всем спасибо! Буду выносить проверку в отдельный модуль.
StriderMan (2006-08-14 18:20:00) [7]
> ZX48 © (14.08.06 18:17) [29]
в скобках указывается т.н. Owner. Чтоб понять для чего это нужно, лучше почитать книжки. в данном случае если создавать так, то можно не беспокоиться о разрушении объекта формы, Owner разрушит все сам когда разрушится. если ты указываешь nil, то сам должен побеспокоиться о разрушении созданного тобой объекта формы.
ZX48 (2006-08-14 18:17:00) [8]3. Делай все проверки до создания формы, а форму создавай вручную
form4 = TForm4.Create(nil);
Поподробнее можно? Как это будет работать. Я думал form4:=tform4.Create(form0) должно быть?
StriderMan (2006-08-14 18:16:00) [9]
> Loginov Dmitry © (14.08.06 18:15) [26]
да, пардон, с Abortэто я махнул не глядя
Loginov Dmitry (2006-08-14 18:16:00) [10]> 3. Делай все проверки до создания формы, а форму создавай
> вручную
> form4 = TForm4.Create(nil);
Лучше Application.CreateForm(),
иначе автор просто умрет отлавливать глюки с вездесущим form4.
Loginov Dmitry (2006-08-14 18:15:00) [11]> если ты уверен что закрытие будет производится из обработчика
> OnCreate или процедур, вызванных этим обработчиком, достаточно
> вызвать Abort, и форма не создастся.
Создастся
StriderMan (2006-08-14 18:14:00) [12]1. убери вездевнутри методов класса TForm4 обращение к переменной form4. Класс и так сам о себе все знает.
2. дело в том что у тебя действительно:
> ANB © (14.08.06 17:54) [11]
> Есть у меня подозрение, что все это в OnCreate вызывается.
> Потому и не кусает :)
сделай вместо close Application.Terminate. (Мастера просьба не ругаться :))
если ты уверен что закрытие будет производится из обработчика OnCreate или процедур, вызванных этим обработчиком, достаточно вызвать Abort, и форма не создастся.
3. Делай все проверки до создания формы, а форму создавай вручную
form4 = TForm4.Create(nil);
Loginov Dmitry (2006-08-14 18:14:00) [13]> Да уж...Как-то некрасиво получается...
Что получается некрасиво?
ZX48 (2006-08-14 18:11:00) [14]Loginov Dmitry © (14.08.06 18:08) [22]
Попробуй вместо Close
Application.Terminate
Да уж...Как-то некрасиво получается...
Loginov Dmitry (2006-08-14 18:08:00) [15]Попробуй вместо Close
Application.Terminate
ZX48 (2006-08-14 18:08:00) [16]Что тогда предлагаете? Отдельный модуль и не морочиться?
Плохиш (2006-08-14 18:08:00) [17]
> объект Form4 еще не создан
Form4 - это не объект.
tesseract (2006-08-14 18:07:00) [18]
> ZX48 © (14.08.06 18:06) [17]
Создан-то он создан, но вызывать close или hide из OnCreate и OnShow категорически запрещается в справке.
> Т.е. создать отдельный модуль и потом из него вызывать основную
> форму?
да это можно сделать в *.dpr project -> View Source
Loginov Dmitry (2006-08-14 18:07:00) [19]> Я так понял что не работает закрытие потому что объект Form4
> еще не создан?
Если бы это было так, то ты бы ловил AV каждые надцать секунд.
ZX48 (2006-08-14 18:06:00) [20]>>MessageDlg вообще показывается?
Да. Все отрабатывается. Я так понял что не работает закрытие потому что объект Form4 еще не создан?