![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Общий тип для манипуляции несовместимыми типами с общими свойств. [D7, XP, 2003]
Дмитрий © (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 либо класс-адаптер