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

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

Динамическое создание формы [D7]


lilyalm ©   (2012-04-23 12:24:00) 

Здравсвуйте!
Мне необходимо написать интерфейс к игре. Все довольно просто, но при создании форм возникают проблемы.
В проекте есть всего 1 главная форма MainForm, которая является наследникм TForm. Остальные формы нужно создавать динамически и все компоненты на них тоже.
Обычная конструкция типа
NewForm.Create(Application);
работает только когда NewForm - наследник TMainForm. Мне же необходимо, чтобы новые формы были также наследниками только TForm.
Надеюсь, понятно изложила. Заранее спасибо!


shurets   (2012-05-17 12:27:00) [1]

procedure ShowModalDynamicForm(InstanceClass: TComponentClass; var Reference);
var
 Instance: TComponent;
begin
 Instance := TComponent(InstanceClass.NewInstance);
 try
   if (Instance is TForm) then
   try
     if (TForm(Reference) = nil) then
       Application.CreateForm(InstanceClass,Reference);

     TForm(Reference).ShowModal;
   except
     TForm(Reference):=nil;
     raise;
   end;
 finally
   FreeAndNil(Instance);
 end;
end;


Германн   (2012-04-25 01:04:00) [2]


> Обычная конструкция типа
> NewForm.Create(Application);
> работает только когда NewForm - наследник TMainForm.

Это не ересь. Это незнание основ.
В [2] был дан "тонкий" намёк как нужно было вызывать конструктор.
Читайте http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


AV   (2012-04-24 12:52:00) [3]

Пример, кроме юнит1 никто про вторую форму не знает

Unit1
----
uses
...
 Unit2;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private     { Private declarations }
 public      { Public declarations }
   F: TForm2;
 end;

var
 Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 F := TForm2.Create(Application);
 F.Show;
end;
================
Unit2
----
type
 TForm2 = class(TForm)
 private    { Private declarations }
 public     { Public declarations }
 end;

implementation
===============
dpr
-----
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;


Сергей М.   (2012-04-24 12:39:00) [4]


> работает только когда NewForm - наследник TMainForm


Ересь ..


icWasya   (2012-04-23 15:05:00) [5]

для создания форм без dfmнужно использовать TForm.CreateNew


Медвежонок Пятачок   (2012-04-23 12:26:00) [6]

работает только когда NewForm - наследник TMainForm.

Всегда она работает.


Anatoly Podgoretsky   (2012-04-23 12:26:00) [7]

> lilyalm  (23.04.2012 12:24:00)  [0]

TForm.Create естественно


Наверх

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