Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ассоциативный контейнер для изображений


Автор: iLya84a 14.8.2008, 15:20
Прежде чем бросаться за написание такого класса решил узнать может уже такой существует.
Вот какая функциональность мне требуется:
1)  класс - потомок TCustomImageList (чтобы использовать его стандартным образом)
2) метод для добавления изображений в список:
function Add(Image, Mask: TBitmap): Integer;
3) метод для удаления изображения из списка
procedure Delete(Index: Integer);
4) доступ к элементам контейнера осуществляется по ImageIndex'у, который сохраняет постоянное значение с момента помещения элемента в список до момента удаления.

Мне нужно чтобы при удалении элемента индексы последующих в списке элементов не менялись. (как это происходит в обычном ImageList'е)
Вот что я хочу на примере:
список: 0; 1; 2; 3 ;4
удалили элемент с индексом 2
получили: 0; 1; 3 ;4


А нужно мне это чтобы использовать такой ImageList вместе с компонентом TVirtualStringTree, а именно: хочу в структуре данных, связанной с каждым узлом хранить ImageIndex.  При удалении узла (а значит и элемента из ImageList'а) оставшиеся элементы списка изображений должны сохранять свои индексы. В таком случае данные в узлах будут сохранять свою актуальность при добавлении/удалении элементов ImageList'а
(Сейчас я вынужден в каждом узле хранить указатель на TBitmap и заниматься отрисовкой дерева в соответствующих обработчиках.)

Автор: Alexeis 14.8.2008, 15:26
  Ну, можно доработать напильником TStringList. У него есть функция добавления пары объект + строка. Метод AddObject. StringList можно отсортировать, а потом при помощи IndexOf найти нужный объект. IndexOf ищет быстро, при помощи бинарного поиска.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)