Конференция "Компоненты" » Генерация объявления объектов в код при редактировании коллекций [D1]
 
  • vlad-mal © (25.01.07 05:18) [0]
    Всем привет!

    Если знает кто, расскажите, каковы принципы создания(и использования) редакторов компонент для редактирования коллекций объектов, чтобы объявление создаваемых объектов автоматически вставлялось в исходный код формы.
    Например, так, как это происходит при редактировании элементов TActionList, или при редактировании полей наследника класса TDataSet.
    Очень интересно было бы реализовать, т.к. появляется возможность контроля правильности использования объектов в момент компиляции.

    Спасибо.
  • DimaBr (25.01.07 10:00) [1]
    Редакторы компонент тут не при чём, Вы создаёте новый компонент (Action или Field) (фактически бросаете его на форму) и дизайнер редактор кода вставляет его описание в спецификацию формы.
    Не понятно что вы хотите реализовать.
  • vlad-mal © (25.01.07 10:19) [2]

    > Не понятно что вы хотите реализовать

    Редактор коллекций, который при создании элемента вставлял в код формы объявление элемента в код.
    Тогда обращение к нужному элементу выполнялось бы не после его поиска по имени, а сразу по имени перменной типа класса коллекции.

    Например, для TpFIBDataSet:

       dtMain: TpFIBDataSet;



    я создаю поле с именем 'COLLECTION_ID'

    При этом в описании появляется строчка:

      dtMainCOLLECTION_ID: TFIBIntegerField;



    После этого я могу получить доступ к этому полю не только как:
    dtMain.FieldByName('COLLECTION_ID')


    но и просто:
     dtMainCOLLECTION_ID


    В последнем случае компилятор сам следит за тем, что я обращаюсь к существующему объекту, а в случае с dtMain.FieldByName('COLLECTION_ID'), если я ошибусь в написании имени поля, ошибка станет ясна во время выполнения.
  • Юрий Зотов © (25.01.07 11:34) [3]
    Поля датасетов (элементы меню, Action'ы т.п.) - это компоненты. Они лежат на форме точно так же, как и другие компоненты, только они невидимы. Соответственно, форма имеет ссылочные поля на эти компоненты, причем имя поля соответствует имени компонента. По этим полям происходит обращение к компонентам.

    А элементы коллекции - это НЕ компоненты. Имен они не имеют и нигде не лежат. Соответственно, никаких published-полей для них форма иметь не может, а их запись в DFM осуществляется другим механизмом.
  • DimaBr (25.01.07 13:01) [4]

    > Редактор коллекций, который при создании элемента вставлял  в код формы объявление элемента в код.

    Какой редактор коллекции Вы используете, что за коллекция, каковы элементы коллекции ???
  • vlad-mal © (25.01.07 18:34) [5]

    > Поля датасетов (элементы меню, Action'ы т.п.) - это компоненты.
    >  Они лежат на форме точно так же, как и другие компоненты,
    >  только они невидимы. Соответственно, форма имеет ссылочные
    > поля на эти компоненты, причем имя поля соответствует имени
    > компонента.
    >

    Классно! А как такое ("помещение на форму") делается?
  • Юрий Зотов © (25.01.07 18:50) [6]
    > vlad-mal ©   (25.01.07 18:34) [5]

    Когда в редакторе полей (меню, ActionList'а и т.п.) мы создаем новый элемент, то редактор обращается к дизайнеру формы. Дизайнер создает нужный компонент с владельцем "Форма", прописывает в код класса формы  нужное published-поле и выбирает в Designer.Selection только что созданный невидимый компонент, чтобы тот сразу отобразился в Object Inspector.

    С НЕкомпонентскими классами этот механизм работать не умеет.
  • vlad-mal © (25.01.07 19:46) [7]
    Понял, спасибо!

    (и откуда Вы все это знаете???)
  • Юрий Зотов © (25.01.07 19:54) [8]
    > vlad-mal ©   (25.01.07 19:46) [7]

    Сначала читал книжки (но не те, что "глазами хакера за 21 день").
    Потом - исходники desin-time модулей VCL.
 
Конференция "Компоненты" » Генерация объявления объектов в код при редактировании коллекций [D1]
Есть новые Нет новых   [119211   +28][b:0][p:0.001]