-
MegaVolt_old (25.12.11 01:57) [0]Пытаюсь понять как создаётся форма:
Ставлю точку останова на:procedure TReader.ReadCollection(Collection: TCollection);
var
Item: TPersistent;
begin
Collection.BeginUpdate;
try
if not EndOfList then Collection.Clear;
while not EndOfList do
begin
if NextValue in [vaInt8, vaInt16, vaInt32] then ReadInteger;
Item := Collection.Add;
ReadListBegin;
while not EndOfList do ReadProperty(Item);
ReadListEnd;
end;
ReadListEnd;
finally
Collection.EndUpdate;
end;
end;
Далее судя по отладчику вызывается TCollection.Add хотя у моего класс перeкрыт метод Add:function Add: TDrawItem;
function TDrawCollection.Add: TDrawItem;
var
Item: TCollectionItem absolute Result;
begin
Item := inherited Add;
end;
Собственно вопрос почему метод моего класса не вызывается? -
DimaBr © (25.12.11 02:07) [1]Внимание! Здесь обсуждаются вопросы, связанные с разработкой компонентов, редакторов свойств, редакторов компонентов и экспертов IDE.
Вопросы по поиску и использованию готовых компонентов, редакторов или экспертов являются нарушением тематики и могут быть удалены. -
DimaBr © (25.12.11 02:09) [2]А разве TCollection.Add - виртуальный, как вы его перекрыли ?
-
MegaVolt_old (26.12.11 18:23) [3]>А разве TCollection.Add - виртуальный, как вы его перекрыли ?
Невиртуальный :((( Точно. Это я проглядел.
Есть ли выход? -
DimaBr © (26.12.11 23:31) [4]Выход есть. Для начала объяснить чего хотите добиться
-
MegaVolt_old (27.12.11 10:25) [5]Хочу создавать разнотипные Item-ы для это хотелось бы управлять созданием итемов. Так сказать это первый шаг.
-
DimaBr © (27.12.11 14:46) [6]Нельзя создавать разнотипные итемы. Коллекция - это список однотипных данных. Смотрите в сторону TList. Для примера TActionList-TAction, TDataSet-TField
-
DimaBr © (27.12.11 14:49) [7]Коллекция хранится в таком виде, где здесь тип ???object StatusBar1: TStatusBar
Panels = <
item
Width = 50
end
item
Width = 50
end
item
Width = 50
end>
end -
DimaBr © (27.12.11 14:51) [8]А вот ActionList, и каждый элемент имеет свой тип - наследник некоторого базовогоobject ActionList1: TActionList
Left = 336
Top = 96
object EditCut1: TEditCut
Caption = 'Cu&t'
end
object EditCopy1: TEditCopy
Caption = '&Copy'
end
object EditPaste1: TEditPaste
Caption = '&Paste'
end
end -
MegaVolt_old (27.12.11 17:35) [9]>Нельзя создавать разнотипные итемы.
Можно унаследованные от одного предка.
Например так TItemX.Create(Collecton);
Про то что в dfm нету информации о типе класса это понятно. При желании ей туда добавить не представляет большой сложности.
Action лист это хорошо. Но мне пока хочется помучать коллекцию. Т.е. я скоре сейчас изучаю механизмы в дельфи чем хочу получить реальный результат. Что то получиться хорошо. Не получиться значит буду больше знать. -
DimaBr © (28.12.11 01:09) [10]А какое преимущество вы видите TCollection перед TList ?
> При желании ей туда добавить не представляет большой сложности.
Интересно как ? -
MegaVolt_old (28.12.11 10:13) [11]>А какое преимущество вы видите TCollection перед TList ?
Как минимум сохранение параметров в dfm, наличие готового редактора что позволяет пока играться не писав ничего своего. Т.е. есть возможность наращивать функционал постепенно. Возможно действительно в конце окажется что проще положить в основу TList
Кстати может есть что готовое сделанное сразу на основе Tlist и позволяющее хранить некие невизуальные (RegisterNoIcon) объекты с нормальным сохранением их в dfm?
>Интересно как ?
DefineProperty и рядом с ним. Судя по примерам добавить одно сохраняемое в dfm значение это не большая сложность. -
DimaBr © (28.12.11 14:21) [12]RegisterNoIcon - это уже правильных ход
А что мешает написать свой редактор ? -
MegaVolt_old (28.12.11 14:37) [13]>А что мешает написать свой редактор ?
Ничего :)
Просто мне удобней изучать чего то по частям а не сразу всё скопом. А то сразу слишком много нового вылазит и взаимодействие IDE, редактор свойств, запись в dfm + сам компонент... А так потихонечку. Одно второе третье :)