Главная страница
    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-1086873073
V-Isa
2004-06-10 17:11
2004.06.27
Уменьшить объем памяти.


1-1087203054
mika
2004-06-14 12:50
2004.06.27
тексовые файлы


14-1086639742
Undert
2004-06-08 00:22
2004.06.27
Соединение с сервером www.delphimaster.ru неудачно


1-1086768073
KSergey
2004-06-09 12:01
2004.06.27
О построении DBGridEh


14-1086464604
Ломброзо
2004-06-05 23:43
2004.06.27
Порекомендуйте инструментарий





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