Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

Создание вложенных компонентов [D7, WinXP]


Alex_77 ©   (17.06.07 07:12

ДОбрый день, создаю компонент со вложенными компонентами (например вложенный 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]

Удалено модератором


имя   (03.09.17 15:04[14]

Удалено модератором


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо