Форум: "Основная";
Текущий архив: 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