Форум: "Компоненты";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];
ВнизМассив элементов-объектов в качестве свойства компонента Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.01 c