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

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

Правильно обработать 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]

А где тут "динамическое создание формы"?


Наверх

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