Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
ВнизФильтрация списка строк. Как сделать ? Найти похожие ветки
← →
Альф (2005-09-29 14:15) [0]Имеется список строк в TStringList (порядка несколько тысяч) c присоединенными классами в Objects. Этот класс такого вида:
TStringRecord = class(TObject)
FDateTime: TDateTime;
// ... далее другие нужные для нас параметры
end;
Отображается этот TStringList в ListBox со стилем lbVirtual через TListBox.OnData(...).
Как лучше сделать фильтрацию записей в листбоксе, чтобы отображались только те - которые соответствуют определенным критериям в TStringRecord. Например по диапазону дат.
Первое что пришло в голову - это использовать промежуточный список типа индекса, который перестраивать по критерию.
Но посредсвом чего лучше реализовать пока не знаю.
← →
umbra © (2005-09-29 14:31) [1]я бы в таком случае сначала создал класс-контейнер таких объектов (на основе TList), добавил бы в него еще один TList для хранения указателей на объекты, удовлетворяющие условию фильтрации и написал бы для этого класса процедуру фильтрации. Затем, после фильтрации выдавал бы информацию из списка прошедших фильтр в ListBox.
← →
Digitman © (2005-09-29 14:33) [2]
> Первое что пришло в голову - это использовать промежуточный
> список типа индекса, который перестраивать по критерию
и правильно пришло !
создаешь "промежуточный" Tlist, в цикле бежишь по фильтруемому TStringList, если элемент удовлетворяет критерию - добавляешь его индекс как элемент TList
после фильтрации учтанавливаешь размер виртуального лист-бокса равным размеру полученного таким образом TList, в событии OnData выбираешь из TList соотв.элемент и по его содержимому (индексу) выходишь на соотв.элемент TStringList, откуда и берешь подпись и сам объект
в OnData
← →
Альф (2005-09-29 14:45) [3]Большое спасибо. Сейчас попробую реализовать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.034 c