Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Динамическое создание формы

Автор: klem4 11.11.2006 16:33

Рузультат слудеющих действий будет подходить под критерий "Динамически созданная форма" ?

Создаем стандартное приложение Delphi. Имеем Form1 in Utin1.pas.
Добваляем к проекту еще одну форму (Form2 in Unit2.pas)
На вторую форму кидам с панелей всякую всячину (лейблы, эдиты, стринггриды итд)

Из Project1.dpr удаляем

Application.CreateForm(TForm2, Form2);


На Form1 кидаем кнопку, в обработчике нажатия на которую пишем следующее:

procedure TForm1.Button1Click(Sender: TObject);
var
Form2: TForm2;
begin
Form2 := TForm2.Create(Application);
Form2.ShowModal;
end;


Созданная таким образом форма является динамической ? Почему меня интересует этот вопрос. На соклько я понял надо это делать по другому, все руками.Самому создавать юнит, руками описывать там класс формы, писать какие компоненты будут на форме, в конструкторе класса регестрировать эти компоненты, задвать их свойства...

Автор: volvo 11.11.2006 16:39

Цитата
Созданная таким образом форма является динамической ?
Она является динамически (а не автоматически) созданной...

Автор: hiv 21.11.2006 17:39

Цитата(klem4 @ 11.11.2006 12:33) *

На соклько я понял надо это делать по другому, все руками.Самому создавать юнит, руками описывать там класс формы, писать какие компоненты будут на форме, в конструкторе класса регестрировать эти компоненты, задвать их свойства...

Почти руками: я этого "руками" не делаю, создаю обычную форму и делаю все как обычно, потом в том unit где твоя форма удаляю строку var Form2: TForm2; , в Project1.dpr удаляю этот юнит из объявления uses и строчку Application.CreateForm(TForm2, Form2);
Вуаля! Все smile.gif

Автор: klem4 21.11.2006 19:43

hiv, я так и делаю, только боюсь как бы препод не начал возмущаться, а программа не маленькая и форм много (приложение для работы с БД) и везде все писать вручную типа


var
f: TForm;
Panel1, ... Panel5: TPalen;
StrGrdStore: TDBGrid;

...

begin
F := TForm.Create(Application);
wirh F do begin
Top := 10;
//...
Panel1 := TPanel.Create(f);
with Panel1 do begin
Parent := F;
// ... всякие настройки
end;
end;
...
end;


А он ведь имеено так на лекции объяснял, хорошо что меня там не было smile.gif) Я бы сильно разозлился smile.gif

Я просто не вижу никакого смысла в этом гемморое ... Не дай Бог переделывать рпидется !fire.gif


Автор: Malice 21.11.2006 19:53

Цитата(klem4 @ 21.11.2006 15:43) *

Не дай Бог переделывать рпидется !fire.gif

Мне кажется придется.. Чтобы немного упростить переделку можно сделать "View as text" на форме, там все уже почти красиво.

Автор: hiv 21.11.2006 19:54

Боже!!! mega_chok.gif
Это даже хуже чем я думал!
Вашего препода нада поучить Turbo Pascal for Windows 1.0 (начало 90-х) вместе с Resource Workshop, даже там это проще чем он предлагает sad.gif
Сочувствую...