Конференция "Компоненты" » Создание вложенных компонентов [D7, WinXP]
 
  • Alex_77 © (17.06.07 07:12) [0]
    ДОбрый день, создаю компонент со вложенными компонентами (например вложенный DataSource) Вопрос: как сделать так, чтобы при добавлении компонента на форму в дезайнтайм другие компоненты видели вложенный компонент (например у DBGrid в свойстве можно было бы выбрать вложенный DataSource так же как если бы он был на фрейме или на форме). сохранять в ресурсе вложенный компонент не обязательно
  • Юрий Зотов © (17.06.07 11:14) [1]
    Вы ничего не путаете? У TDBGrid нет вложенного TDataSource, есть ссылка на внешний.

    Уточните задачу.
  • Alex_77 © (17.06.07 11:37) [2]
    я создаю компонент

    TmyComponent = class(TComponent)
    private
     FDataSource:TDataSource;
    published
     property DataSource:TDataSource read FDatasource write FDataSource;
    end;

    ...
    constructor MyComponent.Create
    begin
     inherited;
     DataSource := TDataSource.Create(self);
     DataSource.SetSubComponent(true);
    end;

    хочу чтобы при добавлении на форму моего компонента для DBGrid-а был видно свойство (вложенный компонент) DataSource моего компонента в дезайн тайме

    для аналогии: когда мы ложим на форму фрейм, в котором есть датасоурс, этот датасоурс становиться доступен для гридов и др. дб контролов
    можно ли сделать что-то подобное со своим компонентом
  • Юрий Зотов © (17.06.07 12:34) [3]
    Ваш датасорс будет доступен другим компонентам, если сделать его владельцем не сам Ваш компонент, а его контейнер (форму, фрейм, модуль данных).

    Сделать это несложно, но зачем? Ведь в этом случае Вас датасорс уже перестает быть внутренним компонентом и становится внешним, а Вы не приобретаете ничего, кроме лишней головной боли.

    Проще сразу его внешним и сделать (как оно и сделано в VCL). И пусть юзер рулит этой ссылкой, как ему нужно.
  • Alex_77 © (17.06.07 12:52) [4]
    Хорошо спасибо, попробую привязывать контейнер
    а как сделать, чтобы работало  в конструкторе:

    fDataSource.Name := Name+'ds1';

    в момент создания компонента, его имя неизвестно?
  • Юрий Зотов © (17.06.07 14:00) [5]
    > Alex_77 ©   (17.06.07 12:52) [4]

    Породите от него потомка, а в нем перекройте метод SetName. Только никакого смысла в этом нет, потому что начальное имя среда даст ему сама, а после этого компонент будет доступен в Object Inspector и его имя будет назначать юзер.
  • Alex_77 © (17.06.07 22:56) [6]
    ну не юзер, а все-таки программист будет имена назначать :)
    я все-таки по-другому решил сделать
    я вложенные компоненты сделал тупо паблик полями
    а для грида сделал потомка, со свойством выбора данного компонента, при выборе которого датасету присваивается это паблик поле
    немного глючит но в целом работает, надо немного подотладить
  • Юрий Зотов © (17.06.07 23:35) [7]
    > Alex_77 ©   (17.06.07 22:56) [6]

    1. Для разработчика компонентов программист и есть юзер.
    2. Ничего не понятно. В чем вообще первичная задача-то?
  • Alex_77 © (18.06.07 13:20) [8]
    Допустим, хочу редактировать в гриде справочник
    чтобы сделать относительно правильно, нужно создать датасет с CachedUpdates, связать его с гридом, затем определить события связанные со вставкой, удалением и редактированием, затем чтобы не делать изменения в длинной (читающей) транзакции датасета, а вносить изменения в другом компоненте связанном с короткой пишущей транзакцией
    и так прийдется возиться с каждым справочником
    поэтому и хочу зашить весь этот набор компонентов и код в отдельный компонент, связывать его с гридом и не делать каждый раз одно и то же
  • DimaBr © (18.06.07 13:43) [9]
    Что мешает создавать компоненты доступа в самом гриде ???
  • Alex_77 © (18.06.07 14:34) [10]
    я его не только с гридом хочу использовать, возможно и как самостоятельный компонент для программной работы со справочником, и возможно к нему одновременно несколько гридов привязываться будет
  • DimaBr © (18.06.07 15:15) [11]
    То есть, вы хотите создать некий компонент, внутри которого создаётся ещё куча компонентов, которые видны в дизайнере в инспекторе ???
  • Alex_77 © (18.06.07 15:37) [12]
    ладно я чую что не получиться, создам наследников у компонентов с сылкой на мой компонент
  • Faruk (25.11.15 02:25) [13]
    Удалено модератором
  • Feolass436 (03.09.17 15:04) [14]
    Такой ноутбук подойдет для этого? https://city.com.ua/goods/notebooks_netbooks/dell-latitude-11-3150c.html или нет?
 
Конференция "Компоненты" » Создание вложенных компонентов [D7, WinXP]
Есть новые Нет новых   [119354   +73][b:0][p:0.001]