Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Общий тип для манипуляции несовместимыми типами с общими свойств. [D7, XP, 2003]


Страницы:   1 2 3

Дмитрий ©   (2014-03-05 17:40:00) 

Хочу сделать универсальный объект, который позволили бы единобразно обращаться к некоторым общим свойствам гридов разных типов.
В частности в проекте встречаются  одновременно DBGrid, RxDBGrid, DBGridEh.
Для реализации нужной функциональности сетки нужно обращаться к свойствам DataSource, OnFilter... и т.д., которые имеются у всех этих типов.
Возможно ли сделать объект или приведение типа, чтобы можно было привязывать любой тип сетки
вроде UniGrid.DataSource:=...


Inovet   (2014-03-06 07:12:00) [41]

> [10] Дмитрий   (06.03.14 02:38)
> Общий предок TDBGrid и TDBGridEh где-то в районе TComponent;

TCustomGrid. Естественно никакого DataSource в нём нет.

Ты вот лучше скажи - для чего в одном проекте куча разных гридов? Зачем к разным прикручивать одинаковую функциональность? Если ответ - так получилось, теперь лень переделывать. То не лениться и переделать на один. Если действительно необходимо, ну тогда, как выше сказано - через RTTI проверять тип объекта и в зависимости от типа вызывать нужный метод.


Дмитрий   (2014-03-06 02:38:00) [42]

Общий предок TDBGrid и TDBGridEh где-то в районе TComponent;


Дмитрий   (2014-03-06 02:36:00) [43]

После применения
dbgc:= TCustomDBGrid(dbgeh) ;
возникли разные интересные эффекты

Юрий, подскажите, как добиться нужного эффекта через RTTI?


Юрий Зотов   (2014-03-06 00:58:00) [44]

Сдается мне, что общий предок есть, но к DB не имеет никакого отношения. Значит, остается RTTI.


Inovet   (2014-03-06 00:37:00) [45]

> [0] Дмитрий   (05.03.14 17:40)
> OnFilter

А это где в TDBGrid? Уверен что делаешь то, что хочешь получить?


Inovet   (2014-03-06 00:32:00) [46]

> [4] Дмитрий   (05.03.14 20:03)
> Incompatible types: 'TCustomDBGrid' and 'TDBGridEh'

Так, что-то автор EhLib говорил, что забил на DBGrid и сделал всё по-своему. Надо смотреть в описании.


Юрий Зотов   (2014-03-06 00:10:00) [47]

Если
Incompatible types: 'TCustomDBGrid' and 'TDBGridEh'
то
dbgc:= TCustomDBGrid(dbgeh) ;
делать нельзя.

Ищите общего предка для всх гридов - его и используйте.


Дмитрий   (2014-03-05 20:03:00) [48]

var
 dbgc: TCustomDBGrid;
 dbgeh: TDBGridEh;
begin
 dbgc:= dbgeh as TCustomDBGrid;

F9
Incompatible types: 'TCustomDBGrid' and 'TDBGridEh'

а если
 dbgc:= TCustomDBGrid(dbgeh) ;
то переваривает

Сейчас думаю, как мне передать грид в качестве параметра
Если опысываю метод как
TExtend.Create(Grid :TSomeGrid)
...
begin
TExtend.Create(DBGridEh1);
end;
то вызывает ошибку


Inovet   (2014-03-05 19:08:00) [49]

> [2] Дмитрий   (05.03.14 18:11)
> Приводить тип к TDBGrid отказывался четырьмя лапами

Ну. А к TCustomDBGrid как?


Дмитрий   (2014-03-05 18:11:00) [50]

Стоило пожаловаться, как что-то получилось.
Приводить тип к TDBGrid отказывался четырьмя лапами
Объявил урезаный тип и прямо в лоб преобразовал

type
 TSomeGrid = class
 DataSource : TDataSource;
 OnKeyPress: TKeyPressEvent;
end;
...
result:=TSomeGrid(self.Grid).DataSource;
...


clickmaker   (2014-03-05 17:41:00) [51]

как вариант, RTTI либо класс-адаптер


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо