Конференция "Компоненты" » TComponent как элемент TCollection, возможно ли это ?
 
  • DevilDevil (17.01.08 23:42) [20]
    > Целевые компоненты делаются невидимыми (аналоги полей).
    TComponentCollectionItem

    ?
    что означает "сделать невидимыми" ?

    >  Пишется компонент-контейнер таких невидимых компонентов.

    TComponentCollection

    ?

    >  К нему пишется редактор
    редакторы не писал ни разу. Я могу в качестве основы взять редактор для TCollection ?
  • DimaBr © (18.01.08 08:44) [21]
    Давайте сначала !!!
    У вас есть перечень компонентов на форме которыми вы хотите управлять из некоего редактора аля TCollectionEditor
    Или у вас есть перечень компонентов внутри некоего компонента которые "не видны" (создаются внутри компонента) на форме и которыми вы хотите управлять.
  • DevilDevil (18.01.08 12:08) [22]
    > DimaBr ©   (18.01.08 08:44) [21]
    у меня есть  класс формы (допустим
    TMyForm

    ), у которого есть свойство
    Objects: TMyCollection

    . Я сделал так, чтобы элементы однозначно идентифицировались по свойству
    Name

    , например, так:
    WaterFigures := MyForm1.Objects['WaterFigures'];



    Мне желательно, чтобы
    TMyForm1

    содержал в себе соответствующие
    TMyObject

    -поля и создавались они автоматически.

    Впринципе проблема решается ([19]), но делается это добавлением полей вручную и:
    procedure TMyForm.Loaded;
    ...
    for i := 0 to Objects.Count-1 do
    begin
     Object := Objects[i];

     P := FieldAddress(Object.Name);
     if (P <> nil) then
       TMyObject(P^) := Object;
    end;

  • DimaBr © (18.01.08 13:42) [23]
    Ничего не понял.
    Имеется форма, у которой нужно организовать доступ по имени объекта ?
    Так FindComponent поможет.

    Чесно говоря я вообще не понимаю смысл вашей затеи. Опишите пожалуйста что вы хотите иметь в конечном результате желательно с примерами (без кода)
  • Юрий Зотов © (18.01.08 15:06) [24]
    Насколько я понял, он хочет, чтобы:

    - каждый элемент коллекции имел имя;
    - форма имела поле с тем же именем;
    - это поле указывало на компонент.
  • DimaBr © (18.01.08 16:48) [25]
    Это-то мне и непонятно, зачем "масло-масленное".
    Форма уже имеет поименованную "коллекцию" элементов
  • DevilDevil © (18.01.08 17:59) [26]
    > Юрий Зотов ©   (18.01.08 15:06) [24]

    :) всё верно.

    > Форма уже имеет поименованную "коллекцию" элементов
    эээ...
    именована сама коллекция, а не элементы.
    а зачем и почему... потому что
    Label1.Caption := 'Value'

    лучше, чем
    TLabel(FindComponent('Label1')).Caption := 'Value'

  • Юрий Зотов © (18.01.08 18:41) [27]
    > DevilDevil ©   (18.01.08 17:59) [26]

    Все это действительно делается по аналогии с полями, но за это Ваше "лучше" придется заплатить довольно дорого. В частности, придется написать классы невидимых компонентов и их контейнера (а в них - код для правильного сохранения невидимых компонентов в DFM и их последующей загрузки), процедуру регистрации невидимых компонентов (аналог RegisterField) и механизм поддержки этой процедуры (внутренний список IDE), редактор (аналог редактора полей)... ну и еще что-то, возможно.

    Стоит ли овчинка выделки? Давайте для начала ответим на вопрос - зачем вообще нужны эти компоненты? Ведь уже есть коллекция, у нее уже есть элементы, к этим элементам можно обращаться и в их код можно вставить всю нужную функциональность...

    ...так зачем вообще нужны дополнительные компоненты? Чем они лучше? Только тем, что обращение к ним на одно слово короче?
  • DevilDevil (20.01.08 02:36) [28]
    > Юрий Зотов ©   (18.01.08 18:41) [27]
    > Стоит ли овчинка выделки?

    Вопрос в цель. Спасибо, Юрий, что разъяснили.
    Решил обходиться ручным вписыванием полей в published секцию.

    Огромное спасибо всем, что потратили уйму времени на помощь!
 
Конференция "Компоненты" » TComponent как элемент TCollection, возможно ли это ?
Есть новые Нет новых   [120328   +116][b:0][p:0.001]