Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.28;
Скачать: CL | DM;

Вниз

Массив элементов-объектов в качестве свойства компонента   Найти похожие ветки 

 
Rav   (2005-11-19 19:49) [0]

Требуется создать компонент, с помощью котрого можно было бы создавать произвольные фильтры для TDataSet и "where"-строки для запросов.
Для определения полей, по которым можно выполнять сортировку я вначале применил следующую схему:

элемент фильтра (поле) - TFilterItem = class(TCollectionItem)
набор элементов - TFilterItems = class(TCollection)
фильтр -TFilter = class(TComponent)

все бы ничего, но TFilterItem должны быть разных типов (по целому числу, дате, связанным dataset и пр.). TFilterItem вначале был "универсальным", т.е. имел данные для любого типа фильтра. Проблема возникла с "редакторами" TFilterItem - получается что каждый из элементов должен "нести на себе" несколько редактров для каждого из типов.

Идея такова - хранить в коллекции элементы разных типов, унаследованных от TFilterItem. (по типу TFilter в TDataSet). Но как добавлять в коллекцию элементы разных типов? Полдня проковырялся в исходниках VCL - ясности пока мало :(
Там вообще использована другая схема:

элемент - TField = class(TComponent)
набор элементов - TFilters = class(TObject)
(TField хранятся в TList)
набор данных -TDataSet = class(TComponent)

Какую схему лучше применить в данном случае? Какие объекты лучше выбрать в качестве базовых? И как проще организовать добавление разноровдных (но унаследованных от общего предка) элементов? Может где почитать что есть по этому поводу?

Заранее спасибо.


 
Separator ©   (2005-11-20 08:10) [1]

Сделай массив указателей

type
   TPointerRec = record
       prType: set of (prInt, prDate);
       prValue: Pointer
   end;
   TPointerArray = array of TPointerRec;


 
Юрий Зотов ©   (2005-11-20 10:32) [2]

Зачем вводить поле prType, если тип уже и без того определяется классом объекта? Лишнее оно, это поле, а без него получается запись, состоящая из единственного поля - такая запись тоже не нужна.

Я бы сделал по образцу TFields.


 
Rav   (2005-11-20 10:33) [3]


> Сделай массив указателей

Не пойдет... Item сам должен уметь обрабатывать свои данные, т.е. должен быть объектом! ... Если только prValue будет указателем на объект...
Но для меня и главна сложность в том, как добавить элеиенты в design-time (В run-time мне их практически не нужно создавать)


 
Юрий Зотов ©   (2005-11-20 13:27) [4]

> Rav   (20.11.05 10:33) [3]

> как добавить элеиенты в design-time

Так же, как добавляются поля в DataSet - написать редактор компонента-контейнера.



Страницы: 1 вся ветка

Текущий архив: 2006.05.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.053 c
2-1147003062
Mr tray
2006-05-07 15:57
2006.05.28
setkeyboardstate


2-1147259154
alles
2006-05-10 15:05
2006.05.28
Переполнение типа Byte


1-1145450930
Alex_C
2006-04-19 16:48
2006.05.28
Почему прерывается выполнение Thread?


2-1147329642
zorik
2006-05-11 10:40
2006.05.28
Как выделить в Екселе лист по его названию?


2-1147154902
Sergey Masloff
2006-05-09 10:08
2006.05.28
Проблема с кодировками. Написал плагин к Outlook но сабж...