Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
ВнизПравильно обработать OnCreate при динамическом создании формы Найти похожие ветки
← →
DelphiLexx © (2007-04-02 14:56) [0]Как правильно обработать OnCreate при динамическом создании формы.
var
fm: TForm;
begin
fm := TForm(AOwner);
fm.OnCreate := fmCreate
end;
В этом случае у меня OnCreate не срабатывает
← →
_Аноним (2007-04-02 14:59) [1]А где тут "динамическое создание формы"?
← →
DelphiLexx © (2007-04-02 15:07) [2]
> fm: TForm;
> begin
> fm := TForm.Create(AOwner);
← →
_Аноним (2007-04-02 15:20) [3]Ну все правильно, и не сработает.
Оно сработало бы в момент TForm.Create(AOwner);
если бы было присвоено, а оно присваивается только следующей строкой.
А зачем тут вообще событие это нужно? Вот оно, это место кода, где создается форма, все необходимое можно выполнить тут же.
← →
DelphiLexx © (2007-04-02 15:40) [4]
> Ну все правильно, и не сработает.
> Оно сработало бы в момент TForm.Create(AOwner);
> если бы было присвоено, а оно присваивается только следующей
> строкой.
>
> А зачем тут вообще событие это нужно? Вот оно, это место
> кода, где создается форма, все необходимое можно выполнить
> тут же.
Нет мне нужно, чтобы все это происходило в обработчике ОnCreate;
← →
KSergey © (2007-04-02 15:47) [5]> DelphiLexx © (02.04.07 15:40) [4]
> Нет мне нужно, чтобы все это происходило в обработчике ОnCreate;
Значит не судьба.
Хотя, вполне можно сделать так:var
fm: TForm;
begin
fm := TForm.Create(AOwner);
fm.OnCreate := fmCreate
fm.OnCreate(nil);
end;
(за окрректный синтаксис не ручаюсь)
Впрочем, вот так - результат будет совершенно тот же :)var
fm: TForm;
begin
fm := TForm.Create(AOwner);
fmCreate(nil);
end;
← →
vecna © (2007-04-02 16:13) [6]м.б. сделать наследника от TForm и не ломать себе моск? ;)
← →
Arm79 © (2007-04-02 20:21) [7]сделал форму, накидал чего нужно, в onCreate этой формы прописал что нужно
frmDinamicForm := TfrmDinamicForm.Create(Application);
все и сработает.
← →
MsGuns © (2007-04-02 23:50) [8]>DelphiLexx © (02.04.07 15:40) [4]
>Нет мне нужно, чтобы все это происходило в обработчике ОnCreate;
А что имеется в виду под всем ?
← →
DelphiLexx © (2007-04-03 09:22) [9]
> А что имеется в виду под всем ?
Некоторые инициализирующие вещи
← →
Сергей М. © (2007-04-03 09:28) [10]
> DelphiLexx © (02.04.07 14:56)
> при динамическом создании формы
Т.е. якобы при "статическом" создании формы подобных проблем у тебя не возникает, так ?
← →
_Аноним (2007-04-03 09:54) [11]
> Некоторые инициализирующие вещи
Варианта всего три:
1. Сделать отдельный юнит с DFM
2. Если там всего три строчки, и ради них не хочется делать отдельный юнит, то можно
2.1 написать потомка от TForm в этом же юните, соответственно без своего DFM, при этом компоненты разместить в ран тайм.
2.2 Оставить инициализирующие вещи снаружи, то есть вызывать так:
> fm := TForm.Create(AOwner);
> fmCreate(fm);
← →
vl_chel © (2007-04-03 15:32) [12]переопредели конструктор окна и не морочь не себе не другим голову
TForm1 = class(TForm)
public
constructor Create(AOwner: TComponent); override;
end;
constructor TForm1.Create(AOwner: TComponent); override;
begin
inherited;
// твои вещи по инициализации
end;
пример писался с головы могут быть опечатки
← →
MsGuns © (2007-04-03 21:26) [13]>DelphiLexx © (03.04.07 09:22) [9]
>Некоторые инициализирующие вещи
Поясню свой вопрос: чем работа конструктора объекта при динамическом (в ран-тайме) создании отличается от его же работы при статическом (т.е. при создании его в коде проекта) ?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.04 c