![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Закрытие формы. [D7, XP]
AlexDan © (2009-02-09 11:13:00)Форма при нажатии кнопки закрывает саму себя(Close). Напомните пожалуйста(забыл напрочь) что нужно указать в Properties, чтобы она закрылась корректно. иначе при повторном её вызове (show), выбивает приложение(.
AlexDan (2009-02-10 22:40:00) [61]> Сергей М. © (10.02.09 22:32) [50]
> И в чем все-таки виноват компилятор ?)
В том, что я перебросил код (процедуру onClose) из одного проекта в другой, и пока я не прописалеё в инспекторе обьектов она не инициализировалась, даже после указания FormClose из другой процедуры (ButtonClick)..
Сергей М. (2009-02-10 22:32:00) [62]
> Именно это я и пытался всю ветку обьяснить
Кому ? Самому себе ?
Чьей "дикости" в таком случае ты поражался ?
И в чем все-таки виноват компилятор ?)
AlexDan (2009-02-10 22:25:00) [63]> Servy © (10.02.09 19:32) [48]
> Есть мнение, что если автор написал все 'полностью' (как
> он выразился) от руки, и инспектор объектов не трогал, то
> при нажатии кнопки не будет ничего. Ну прям совсем ничего
> :).
Если проект(юнит) написать в 'блокноте', потом перекинуть его(через буфер обмена, например) в юнит созданной формы с уже готовым 'лицом' (кнопки и т.п.) и не трогать инспектор обьектов то не будет ничего, совсемничего.. Именно это я и пытался всю ветку обьяснить..
Servy (2009-02-10 19:32:00) [64]> [45], [46] {RASkov} ©
Есть мнение, что если автор написал все 'полностью' (как он выразился) от руки, и инспектор объектов не трогал, то при нажатии кнопки не будет ничего. Ну прям совсем ничего :).
> AlexDan
Видимо, для вас открытием будет тот факт, что можно целой горе кнопок, форм, лабелей назначить один обработчик OnClick, и назвать его можно как угодно, а не только Button1Click. Связь между событием и обработчиком события должен установить программист, либо в Design Time в инспекторе объектов, либо в Run Time, упомянутым в [38] способом.
AlexDan (2009-02-10 19:31:00) [65]> {RASkov} © (10.02.09 18:56) [45]
> При втором нажатии форма опять закрывается, но уже выполняется
> метод FormClose....
Вот этого наверное я не был в курсе..ссори.
{RASkov} (2009-02-10 19:02:00) [66]> А вот при третьем нажатии уже АВ....
Я говорил про нажатия кнопки, это - метод TForm2.Button1Click...
но последней строчкой в [45] - ошибся.... ибо до нее(а точнее до метода TForm2.Button1Click) дело не дойдет...
АВ будет при очередном Form2.Show; Или при любом обращении к Form2....
{RASkov} (2009-02-10 18:56:00) [67]Разжую:
при старте программы у формы2 нет обработчика OnClose.
Далее при нажатии кнопки форма2 закрывается, (по умолчанию в делфи формы не закрываются, а прячутся при Close(это не касается MDI)) и потом ей назначается обработчик OnClose. Но при первом нажатии метод FormClose не вызывается(не выполняется)....
При втором нажатии форма опять закрывается, но уже выполняется метод FormClose.... где она и убивается совсем.
А вот при третьем нажатии уже АВ....
> AlexDan
Хоть чего-нибудь понял?
:о)
{RASkov} (2009-02-10 18:48:00) [68]> [43] AlexDan © (10.02.09 18:42)
Что ты хотел этим сказать?
Показать как не нужно делать и свою тупость? Это и так было ясно :) сорри...
AlexDan (2009-02-10 18:42:00) [69]Господа, вы меня поражаете своей наивностью, код:
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure TForm2.Button1Click(Sender: TObject);
begin
form2.Close;
OnClose := FormClose;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
end;
end.
написанный полностьюот руки, т.е. без применения инспектора обьектов и клавишь Ctrl+Shift+C (при создании процедур, если это делается вручную) в делфи 7 игнорируется (не выполняется).
MsGuns (2009-02-10 15:50:00) [70]Так седому ветерану и не объяснили зачем точить шашку :)
Dennis I. Komarov (2009-02-10 15:09:00) [71]А тут ничего не изменилось :)
Cep (2009-02-10 14:18:00) [72]Да, коллеги, это нетленка :)))
AndreyV (2009-02-10 13:35:00) [73]> [17] AndreyV © (09.02.09 12:08)
> После Action:=caFree формы не существует, и если она открылась,
> то не успела перетереться память.
Фиг она откроется - деструктор уже отработал. А оказалось,
> [22] AlexDan © (09.02.09 13:25)
что метод не был вызван.
ЮЮ (2009-02-10 12:07:00) [74]
> Т.е. если я напишу код от руки полностью, вставлю в юнит
> формы, то он не будет работать, даже если правильный..
То что ты скатал с чужого проекта, это только методы формы. Чтобы код использовался - методы надо вызывать.
> Поражён. Оказывается, код во всех двух проектах одинаков.
> Но в одном из них метод close не выполнялся (соответственно
> и procedure TForm2.FormClose). Почему? В делфи 7 инспектор
> обьектов показывает Events для формы и если там прцедура
> не прописана (синенькими буквами), то и не выполняется (игнорируется),
> даже если она есть в коде! Офигеть. Значит смотреть нужно
> не только на код, а и на настройки инспектора обьектов..
>
Это не настройка инспектора обьектов, а облегчение работы батонокидателям.
Назначение методы формы в качестве обработчика событий компонента можно сделать и в коде:
OnClose := FormClose;
Главное, чтобы этот метод был синенькими буквами:)
Плохиш (2009-02-09 16:27:00) [75]
> Anatoly Podgoretsky © (09.02.09 16:05) [35]
>
> > Плохиш (09.02.2009 15:32:33) [33]
>
> Не отнять, а прибавить
Точно, спасибо за поправку.
AlexDan (2009-02-09 16:09:00) [76]> Плохиш © (09.02.09 15:32) [33]
Рано ещё.).
Anatoly Podgoretsky (2009-02-09 16:05:00) [77]> Плохиш (09.02.2009 15:32:33) [33]
Не отнять, а прибавить
Ega23 (2009-02-09 15:36:00) [78]
> Проблема лежит на стыке Bool и Boolean
А... Ну да, понял.
Плохиш (2009-02-09 15:32:00) [79]
> AlexDan © (09.02.09 13:43) [24]
>
>
Деточка, у тебя в анкете от года рождения 20 отнять не надо?
Anatoly Podgoretsky (2009-02-09 15:23:00) [80]> Ega23 (09.02.2009 15:02:31) [31]
Проблема лежит на стыке Bool и Boolean