Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Закрытие формы. [D7, XP]


Страницы:   1 2 3 4 5 6

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


Страницы:   1 2 3 4 5 6

Наверх

Титульная страница Поиск, карта сайта Написать письмо