Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
2-1253113553
B&W
2009-09-16 19:05
2009.11.08
VCL скорость работы


15-1252512460
Kostafey
2009-09-09 20:07
2009.11.08
Синхронизация Mercurial-репозитариев с ограничением


6-1191102532
FearG0
2007-09-30 01:48
2009.11.08
Оценить поток на основе TClientSocket


15-1252867195
Cerberus
2009-09-13 22:39
2009.11.08
вопрос Linux оедам


15-1252870210
Achpile
2009-09-13 23:30
2009.11.08
С++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский