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

Вниз

Конструктор формы и 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
14-1086933878
Rouse_
2004-06-11 10:04
2004.06.27
С Днем Рождения 11 июня


1-1086594562
Spectre
2004-06-07 11:49
2004.06.27
Как скопировать элемент TreeView с "детьми"?


1-1086936564
ancara
2004-06-11 10:49
2004.06.27
Как получить R,G,B из clBtnFace?


3-1086176413
Alex_xxx
2004-06-02 15:40
2004.06.27
В IB (дятел) текстовый файл с разделителем |


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