Guest |
Отправлено: 21.06.2005, 19:38 |
|
Не зарегистрирован
|
Какая разница между созданием формы:
CODE | Application->CreateForm(__classid(TFMyForm), &FMyForm); |
и
CODE | TFMyForm* FMyForm = new TFMyForm(this); |
то есть между тем как это делает сам C++Builder и
как это можно делать нам.
И как правильней самому динамически создавать формы,
когда форма готова и размещена в
ProjectOptions->Forms->Available forms
Также попутно второй вопрос:
как правильно удалять динамически созданную форму
(находящуюся в списке Available forms) :
то есть — есть ли разница, установить форме при закрытии
Action = caFree;
CODE |
void __fastcall TFMyForm::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree; // вот так
}
|
или сделать так:
CODE |
TFMyForm* FMyForm = new TFMyForm(this);
FMyForm->ShowModal();
delete FMyForm; // или вот так
|
|
|
Guest |
Отправлено: 23.06.2005, 22:33 |
|
Не зарегистрирован
|
Так никто не знает ответа ? |
|
olegenty |
Отправлено: 24.06.2005, 07:23 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
разница в том, что при
CODE |
Application->CreateForm(__classid(TFMyForm), &FMyForm);
|
Owner'ом формы будет глобальный экземпляр TApplication,
а в случае
CODE |
TFMyForm* FMyForm = new TFMyForm(this);
|
Owner'ом будет то, чем является this
а правильное удаление вообще зависит скорее от твоей прикладной логики, чем от чего-то ещё. например, выставил ты
а тебе надо ещё что-то от формы получить после её закрытия. тогда так делать просто нелогично, поработаешь, да и delete её. а в случае, например, когда это MDI Child окно — в самый раз.
|
|
Guest |
Отправлено: 24.06.2005, 09:15 |
|
Не зарегистрирован
|
А в случае, если форма нормальная (не child), а открывается как модальная и возвращает значение:
CODE | int n = MyForm->ShowModal(); |
если на событие закрытия этой формы стоит Action = caFree;
CODE |
void __fastcall TFMyForm::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
} |
произойдет ли корректный возврат результата,
или могут быть AccessViolation по доступу
к уже уничтоженной форме ?
|
|
Gedeon |
Отправлено: 24.06.2005, 09:41 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
>> А в случае, если форма нормальная (не child) если на событие
>> закрытия этой формы стоит Action = caFree произойдет ли
>> корректный возврат результата
Да.
|
|
Sl@Sh |
Отправлено: 29.06.2005, 10:47 |
|
Мастер участка
Группа: Участник
Сообщений: 383
|
Я вообще если форму нужно создать динамически а потом удалить использую new delete, при этом в .срр удаляю TForm1 *Form1, а в *.н такое же с extern.
На это всё меня надоумила книжка Архангельского. Там именно так и рекомендуется динамически модальную форму использовать.
|
|