Конференция "Компоненты" » Где у меня в ДНК ошибка? TCollection.Add [D7, WinXP]
 
  • 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 + сам компонент... А так потихонечку. Одно второе третье :)
 
Конференция "Компоненты" » Где у меня в ДНК ошибка? TCollection.Add [D7, WinXP]
Есть новые Нет новых   [118488   +58][b:0][p:0.002]