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

Вниз

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

 
Asdor ©   (2004-06-10 18:11) [0]

Здравстуйте мастера.
Мне нужно сделать предка для форм, которые могут быть как MDIChild, так и обычными. Для этого я в этом предке переопределяю конструктор так:

 TBaseClientForm=Class(TForm)
 public
   Constructor Create(AOwner:TComponent; AFormStyle:TFormStyle=fsMDIChild); reintroduce;
 end;

implementation

constructor TBaseClientForm.Create(AOwner: TComponent;
 AFormStyle: TFormStyle=fsMDIChild);
begin
 inherited Create(AOwner);
 FormStyle:=AFormStyle;
 Visible:=True;
end;

end.


После определения базового класса формы в пакете я добавил ее в репозиторий.

Далее добавляю в проект форму из репозитория как наследника базовой, накладываю на нее то, что мне нужно. Проект собирается с RunTime Packages.

Если форма в проекте создается мной через явный вызов конструктора - то все создается нормально. А если она попадает в список AutoCreatedForms - то она создается минуя мой конструктор. Непонятно почему и как сделать так, чтобы мой конструктор вызывался в этом случае?


 
jack128 ©   (2004-06-10 18:34) [1]


> А если она попадает в список AutoCreatedForms - то она создается
> минуя мой конструктор. Непонятно почему и как сделать так,
> чтобы мой конструктор вызывался в этом случае?
Все как раз понятно.  Глянь в файл проэкта и посмотри как создаются autocreate формы...


 
Asdor ©   (2004-06-10 18:36) [2]

Да смотрел... И в Forms смотрел...
Потому и сделал конструктор через Reintroduce c дефолтным параметром, чтобы нормально вызывался...
Вот только получается, что после Reintroduce конструктор перестает быть виртуальным методом???


 
jack128 ©   (2004-06-10 18:43) [3]


> Потому и сделал конструктор через Reintroduce c дефолтным
> параметром, чтобы нормально вызывался...
если бы дельфи был интерпритатором это может и сработало бы.. ;-)

Как только ты скрыл виртуальный конструктор у своей формы, ты лишил себя возможности AutoCreate"a.  А вообще нафиг он те сдался . Тебе сложно одну строчку написать, что ли ;-))


 
Petr V. Abramov ©   (2004-06-10 19:45) [4]

> после Reintroduce конструктор перестает быть виртуальным методом???
 После Reintroduce это другой метод с тем же именем


 
Asdor ©   (2004-06-11 09:38) [5]

Понятно, что ничего не понятно... :)

Одну строчку написать не сложно :) просто хотелось, чтобы и AutoCreate работал...

А вот еще тогда вопрос:
Почему в Application.CreateForm сделано все вот так:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
 Instance: TComponent;
begin
 Instance := TComponent(InstanceClass.NewInstance);
 TComponent(Reference) := Instance;
 try
   Instance.Create(Self);
 except
   TComponent(Reference) := nil;
   raise;
 end;
 if (FMainForm = nil) and (Instance is TForm) then
 begin
   TForm(Instance).HandleNeeded;
   FMainForm := TForm(Instance);
 end;
end;

а не вот так:
procedure TApplication.CreateForm(InstanceClass: TComponentClass; var Reference);
var
 Instance: TComponent;
begin
 try
   Instance := TComponent(InstanceClass.Create(Self));
   TComponent(Reference) := Instance;
 except
   TComponent(Reference) := nil;
   raise;
 end;
 if (FMainForm = nil) and (Instance is TForm) then
 begin
   TForm(Instance).HandleNeeded;
   FMainForm := TForm(Instance);
 end;
end;

?



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

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

Наверх




Память: 0.46 MB
Время: 0.031 c
1-1086670656
gedd
2004-06-08 08:57
2004.06.27
Защита программы


3-1086156162
Sectey
2004-06-02 10:02
2004.06.27
Скорость работы ХП в MSSQL.


1-1087293530
Dolphin1
2004-06-15 13:58
2004.06.27
цвета в XP


14-1086783113
Юрий
2004-06-09 16:11
2004.06.27
??? Выбор языка программирования ???


1-1086781435
Alex_2004
2004-06-09 15:43
2004.06.27
FastReport





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