Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
мтк   (2012-05-30 16:03) [0]

Добрый день!

Есть форма "Form1", у неё есть конструктор:

constructor Create(AOwner: TComponent; Par1: Boolean = False);
...
constructor TForm1.Create(AOwner: TComponent; Par1: Boolean);
Begin
 Inherited Create(AOwner);
...
End;


Из другой формы Form2 создаю первую:
((TFormClass(FindClass(frmName))).Create(Self)).Show;
Форма создаётся и работает.

Но мне надо ещё передать параметры конструктору. Если пишу так:
((TForm1(FindClass(frmName))).Create(Self, True)).Show;

Появляется ошибка AV на Inherited Create(AOwner);.

Помогите, пожалуйста, как можно передать параметры конструктору в приведённом примере?


 
sniknik ©   (2012-05-30 16:40) [1]

> как можно передать параметры конструктору в приведённом примере?
в передаче параметров тут ошибки нет. ошибка в определении конструктора (подсказка - это та часть которой здесь нет).


 
Palladin ©   (2012-05-30 16:50) [2]

TForm1(FindClass(frmName)) так писать нельзя, фактически тебе возвращается class of TPersistent , а ты насильно его приводишь к TForm1


 
мтк   (2012-05-30 17:01) [3]


> в передаче параметров тут ошибки нет. ошибка в определении
> конструктора (подсказка - это та часть которой здесь нет).


убрал и другую часть. Оставил только:

constructor TForm1.Create(AOwner: TComponent; Par1: Boolean);
Begin
Inherited Create(AOwner);
End;


процедуры create и show тоже пустые.

Результат остался тот же :(


 
мтк   (2012-05-30 17:04) [4]


> TForm1(FindClass(frmName)) так писать нельзя, фактически
> тебе возвращается class of TPersistent , а ты насильно его
> приводишь к TForm1


а как тогда можно добраться до конструктора?


 
sniknik ©   (2012-05-30 17:11) [5]

> убрал и другую часть. Оставил только:
???
- машина не едет!
- у вас ошибка в двигателе. бензина нет...
- убрал двигатель. результат тот же.


 
sniknik ©   (2012-05-30 17:14) [6]

p.s. о чем тебе говорит компилятор, подсказка в нем?... и что для тебя значит слово override например? (хрень на которую можно забить? похоже)


 
Palladin ©   (2012-05-30 17:16) [7]

создавать свой реестр классов TForm1Class = class of TForm1
ну по сути не TForm1, а общего родителя для твоих форм с эти особенным конструктором Create(AOwner: TComponent; Par1: Boolean);

procedure myRegister(const frmName: String; frmClass: TForm1Class);
begin
 какойтоStringList.AddObject(frmName, TObject(frmClass));
end;

function myFind(const frmName: String): TForm1Class;
var
 n: Integer;
begin
 n := какойтоStringList.indexOf(frmName);
 if n = -1 then
   Result := nil
 else
   Result := TForm1Class(какойтоStringList.Items.Object[n]);
end;

myRegister("myForm", TForm1);
...

aFrmClass := myFind("myForm");
if aFrmClass = nil then
 raise Exception.Create("myForm class not registered");
theFrm := aFrmClass.Create(Owner, Par1);


 
icWasya ©   (2012-05-31 09:30) [8]

>Palladin ©   (30.05.12 17:16) [7]
>... а общего родителя для твоих форм с эти особенным конструктором Create(AOwner: TComponent; Par1: Boolean); ...
И не забыть, что этот новый конструктор должен быть виртуальным.
Кроме того, что бы не путаться, конструктор назовите как-нибудь по другому.


 
мтк   (2012-05-31 12:17) [9]

sniknik, понял )), спасибо.

Сделал первым и вторым способом, всё отлично работает.

sniknik, Palladin и icWasya всем большое спасибо!



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

Форум: "Начинающим";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.095 c
15-1339946385
Artem
2012-06-17 19:19
2013.03.22
Откуда-то появился Norton Internet Security


15-1352093069
Kindle
2012-11-05 09:24
2013.03.22
Как сделать движение по траектории элиппса?


15-1336042075
john mc'coffe
2012-05-03 14:47
2013.03.22
java tcp client


15-1333225802
Юрий
2012-04-01 00:30
2013.03.22
С днем рождения ! 1 апреля 2012 воскресенье


15-1334164870
ФордзБоярд
2012-04-11 21:21
2013.03.22
сложение цветов





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский