-
ДОбрый день, создаю компонент со вложенными компонентами (например вложенный DataSource) Вопрос: как сделать так, чтобы при добавлении компонента на форму в дезайнтайм другие компоненты видели вложенный компонент (например у DBGrid в свойстве можно было бы выбрать вложенный DataSource так же как если бы он был на фрейме или на форме). сохранять в ресурсе вложенный компонент не обязательно
-
Вы ничего не путаете? У TDBGrid нет вложенного TDataSource, есть ссылка на внешний.
Уточните задачу.
-
я создаю компонент
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 моего компонента в дезайн тайме
для аналогии: когда мы ложим на форму фрейм, в котором есть датасоурс, этот датасоурс становиться доступен для гридов и др. дб контролов можно ли сделать что-то подобное со своим компонентом
-
Ваш датасорс будет доступен другим компонентам, если сделать его владельцем не сам Ваш компонент, а его контейнер (форму, фрейм, модуль данных).
Сделать это несложно, но зачем? Ведь в этом случае Вас датасорс уже перестает быть внутренним компонентом и становится внешним, а Вы не приобретаете ничего, кроме лишней головной боли.
Проще сразу его внешним и сделать (как оно и сделано в VCL). И пусть юзер рулит этой ссылкой, как ему нужно.
-
Хорошо спасибо, попробую привязывать контейнер а как сделать, чтобы работало в конструкторе:
fDataSource.Name := Name+'ds1';
в момент создания компонента, его имя неизвестно?
-
> Alex_77 © (17.06.07 12:52) [4]
Породите от него потомка, а в нем перекройте метод SetName. Только никакого смысла в этом нет, потому что начальное имя среда даст ему сама, а после этого компонент будет доступен в Object Inspector и его имя будет назначать юзер.
-
ну не юзер, а все-таки программист будет имена назначать :) я все-таки по-другому решил сделать я вложенные компоненты сделал тупо паблик полями а для грида сделал потомка, со свойством выбора данного компонента, при выборе которого датасету присваивается это паблик поле немного глючит но в целом работает, надо немного подотладить
-
> Alex_77 © (17.06.07 22:56) [6]
1. Для разработчика компонентов программист и есть юзер. 2. Ничего не понятно. В чем вообще первичная задача-то?
-
Допустим, хочу редактировать в гриде справочник чтобы сделать относительно правильно, нужно создать датасет с CachedUpdates, связать его с гридом, затем определить события связанные со вставкой, удалением и редактированием, затем чтобы не делать изменения в длинной (читающей) транзакции датасета, а вносить изменения в другом компоненте связанном с короткой пишущей транзакцией и так прийдется возиться с каждым справочником поэтому и хочу зашить весь этот набор компонентов и код в отдельный компонент, связывать его с гридом и не делать каждый раз одно и то же
-
Что мешает создавать компоненты доступа в самом гриде ???
-
я его не только с гридом хочу использовать, возможно и как самостоятельный компонент для программной работы со справочником, и возможно к нему одновременно несколько гридов привязываться будет
-
То есть, вы хотите создать некий компонент, внутри которого создаётся ещё куча компонентов, которые видны в дизайнере в инспекторе ???
-
ладно я чую что не получиться, создам наследников у компонентов с сылкой на мой компонент
-
Удалено модератором
-
|