![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Конструктор для элемента коллекции [D7, WinXP]
Flexer © (2007-12-01 01:28:00)У меня есть коллеция обьектов
Type
TPeak = class(TCollectionItem)
public
isstep: boolean;
ID: TPeakID;
X, Y: integer;
Ribe: TRibeCollection;
procedure Draw(Canvas: TCanvas);
constructor Create(Collection: TCollection); virtual;
overload;
end;
Когда я делаю добавление элемента в коллекцию
Peak: TPeakCollection;
...
Peak.Add;
Элемент добавляется, но вот незадача. Koнструктор, который я опеределил для своего класса (элемента коллекии) не вызывается, а такое впечатление что выполняется конструктор родительского класса. А мне обязательно нужен свой конструктор, срабатывающий по Peak.Add; (Мне в каждом элементе нужно инициализировать инкапсулированную коллекцию другого типа и задавать значения по умолчанию)
TPeak.Create(Collection: TCollection); virtual;
Вот код конструктора
constructor TPeak.Create(Collection: TCollection);
begin
inherited Create(Collection);
beep(1000,100);
Ribe := TRibeCollection.Create(TRibe);
end;
Я, конечно понимаю, что я так закрываю родительский конструктор, но никак не могу понять как делать правильно.
Юрий Зотов (2007-12-01 04:02:00) [1]> Flexer (01.12.07 01:28)
> Koнструктор, который я опеределил для своего класса (элемента
> коллекии) не вызывается, а такое впечатление что выполняется
> конструктор
Когда создаете коллекцию, передавайте параметром в ее конструктор свойкласс элемента. Тогда метод Add коллекции будет создавать элементы Вашегокласса. Соответственно, егоконструктор и вызовется.
Джо (2007-12-01 03:10:00) [2]> [3] Германн © (01.12.07 02:56)
> Будет, Серёга. Будет. :(
Classes.pas:
TCollectionItem = class(TPersistent)
...
public
constructor Create(Collection: TCollection); virtual;
...
end;
Отчего тут кому-то ругаться?
Ну, кроме автора, сабо самой.
Германн (2007-12-01 03:09:00) [3]Вру. Причём нагло.
:(((
Но что хочет сделать автор, все равно не понимаю!
Германн (2007-12-01 02:56:00) [4]
> Джо © (01.12.07 02:33) [2]
>
> Если сделать
> constructor Create(Collection: TCollection); override;
> то никто «ругаться» не будет.
>
Будет, Серёга. Будет. :(
Но что хочет сделать автор, лично я не понимаю!
Джо (2007-12-01 02:33:00) [5]Если сделать
constructor Create(Collection: TCollection); override;
то никто «ругаться» не будет.
Flexer (2007-12-01 01:32:00) [6]Кстати, забыл сказать, если я пытаюсь сделать
constructor Create(Collection: TCollection); override;
То компилятор ругается. Как же сделать этот override?