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