Форум: "Основная";
Текущий архив: 2009.11.08;
Скачать: [xml.tar.bz2];
ВнизКосвенное создание формы Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.01 c