![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Динамическое создание формы [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 естественно