Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.08;
Скачать: CL | DM;

Вниз

Косвенное создание формы   Найти похожие ветки 

 
Alex_C   (2008-10-02 16:00) [0]

Нужна ф-ция, которая бы создавала форму. Посмотрел по хелпам. Сделал так:
Берем новый проект с 2-мя формами (не AutoCreate). Далее

procedure TForm1.Button1Click(Sender: TObject);
begin
 CreateForm(Form2);
end;

procedure TForm1.CreateForm(Form: TForm);
var
 FormClass: TFormClass;
begin
 FormClass := TFormClass(FindClass("TForm2"));
 Form := FormClass.Create(Self);
 Form.Show;
end;

Все как бы работает до того момента, когда пытаешься обратится к Form2 - допустим Form2.Label.... - это и понятно, в таком случае cама то переменная Form2 = nil. Такую ф-цию вообще возможно реализовать?


 
МистерТ   (2008-10-02 16:03) [1]

if Assigned(Form2) then ...


 
Alex_C   (2008-10-02 16:07) [2]

не много не поняли...

мне нужно создать ф-цию типа такого:

procedure TForm1.CreateForm(Form: TForm: FormClass: string);
var
FormClass: TFormClass;
begin
FormClass := TFormClass(FindClass(FormClass));
Form := FormClass.Create(Self);
Form.Show;
end;

чтоб в последствии мог создавать другие формы, не только Form2


 
Сергей М. ©   (2008-10-02 16:09) [3]


> в последствии мог создавать другие формы, не только Form2


А что этому мешает в данной реализации ?


 
Сергей М. ©   (2008-10-02 16:18) [4]


> это и понятно, в таком случае cама то переменная Form2 =
> nil


Ты ж ничего не сделал для того чтобы она была не-nil - вот потому она и nil


 
Alex_C   (2008-10-02 16:26) [5]

Все сделал )))
Надо так:

procedure TForm1.CreateForm(PForm: Pointer: FormClass: string);
var
Form: TForm;
FormClass: TFormClass;
begin
FormClass := TFormClass(FindClass(FormClass));
Form := FormClass.Create(Self);
PForm := Form;
Form.Show;
end;

Вызывать так:

CreateForm(Form2, "TForm2");

Еще вопрос:
когда я в последствии буду делать
Form2.Free - у меня не будет утечки помяти? Ведь Form2 указывает именно на выделеннуб память в процедуре CreateForm?


 
Поросенок Винни-Пух ©   (2008-10-02 16:30) [6]

ой мама ....


 
Поросенок Винни-Пух ©   (2008-10-02 16:31) [7]

procedure TForm1.CreateForm(var Form : TForm; const FormClass: string);

function TForm1.CreateForm(const FormClass : string) : TForm;


 
Сергей М. ©   (2008-10-02 16:36) [8]


> Alex_C   (02.10.08 16:26) [5]



> Form2 указывает именно на выделеннуб память в процедуре
> CreateForm


Если внутри и вне процедуры за работу с памятью отвечает один и тот же менеджер памяти, то утечки не будет. Точнее надо очень постараться, чтобы она имела место)

А вот при разных менеджерах возможна и утечка и, что гораздо более вероятно, исключение.


 
Palladin ©   (2008-10-02 18:11) [9]


> procedure TForm1.CreateForm(PForm: Pointer: FormClass: string);

var + F1


 
anonims   (2008-10-03 12:04) [10]

function(const Formclass: string): TForm;



Страницы: 1 вся ветка

Текущий архив: 2009.11.08;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
1-1222978239
DmitriyG.
2008-10-03 00:10
2009.11.08
Программное получение стека


2-1253670540
Время
2009-09-23 05:49
2009.11.08
подсчет времени


2-1253800991
N/O
2009-09-24 18:03
2009.11.08
вопрос по TClientDataSet


15-1252520131
мдфв
2009-09-09 22:15
2009.11.08
не программу, надо на бумаге, тупо по Герону- похоже не тот пут


1-1221328691
ПЗ
2008-09-13 21:58
2009.11.08
Классы в DLL на Delphi и MSVC++ (бой продолжается)...