есть ли виртуальный список с заголовками в Delphi XE? - PullRequest
1 голос
/ 13 июля 2011

Извините, фон немного запутан в этом ... Я нахожусь в процессе преобразования проекта D5 в DXE ... В нем есть список из нескольких тысяч элементов. Полный прогрессивный текстовый поиск выполняется по этим элементам с каждым нажатием клавиши в окне поиска. В D5 (до виртуальных списков) мне пришлось создать свой собственный виртуальный список с использованием списка LMD (так как в списке было несколько столбцов с заголовками), отдельной полосы прокрутки и массива записей. Затем список будет заполняться, когда пользователь перемещается по результатам поиска или изменяет поиск. Это работало очень хорошо, но так как теперь виртуальные списки являются родными для Delphi, я собирался преобразовать свой настраиваемый список в собственный, но я не могу найти компонент списка с заголовками, который поддерживает виртуальные возможности. Помогите?

Доступен ли компонент с виртуальными списками и заголовками / столбцами?

Я забыл упомянуть: мне известны компоненты Soft Gems VirtualTreeView - они превосходны и, вероятно, я буду их использовать, но ... Есть ли в DXE способ сделать это без 3-го партийные утилиты? Я обеспокоен тем, что упускаю что-то очевидное в DXE, так как использую его всего около месяца.

Ответы [ 2 ]

4 голосов
/ 13 июля 2011

TListView - это тонкая оболочка для общего элемента управления представлением списка Windows. Запустите его в виртуальном режиме со стилем представления отчета, чтобы добиться того, о чем вы, я полагаю, просите.


Для настройки представления виртуального списка необходимо установить OwnerData на True и предоставить обработчик событий OnData.

procedure TVirtualListViewForm.FormCreate(Sender: TObject);
begin
  ListView1.ViewStyle := vsReport;
  ListView1.Columns.Add.Caption := 'Column1';
  ListView1.Columns.Add.Caption := 'Column2';
  ListView1.OwnerData := True;
  ListView1.OnData := ListViewData;
  ListView1.Items.Count := 42;
end;

procedure TVirtualListViewForm.ListViewData(Sender: TObject; Item: TListItem);
begin
  Item.Caption := Format('Column 0, index %d', [Item.Index]);
  Item.SubItems.Add(Format('Column 1, index %d', [Item.Index]));
end;

Для ваших нужд может потребоваться OnDataFind для реализации прогрессивного текстового поиска.

0 голосов
/ 18 января 2019

Вы можете использовать мой компонент TDzListHeader, доступный на GitHub: https://github.com/digao-dalpiaz/DzListHeader

Этот компонент позволяет вам создавать столбцы в TCollection, и вам следует удалить TListBox внутри TListHeader и связать их.

Пример DzListHeader

Все использование и подробная документация доступны в проекте github.

...