Иногда бывает полезно в заголовке колонки показывать стрелочку, чтобы информировать пользователя, по какой колонке идёт сортировка. Добавьте следующий код в форму:
Code: |
procedure TForm1.SetColumnImage( List: TListView; Column, Image: Integer; ShowImage: Boolean); var Align,hHeader: integer; HD: HD_ITEM;
begin hHeader := SendMessage(List.Handle, LVM_GETHEADER, 0, 0); with HD do begin case List.Columns[Column].Alignment of taLeftJustify: Align := HDF_LEFT; taCenter: Align := HDF_CENTER; taRightJustify: Align := HDF_RIGHT; else Align := HDF_LEFT; end;
mask := HDI_IMAGE or HDI_FORMAT;
pszText := PChar(List.Columns[Column].Caption);
if ShowImage then fmt := HDF_STRING or HDF_IMAGE or HDF_BITMAP_ON_RIGHT else fmt := HDF_STRING or Align;
iImage := Image; end; SendMessage(hHeader, HDM_SETITEM, Column, Integer(@HD)); end; |
Картинки берутся из списка SmallImages. Вам надо будет вызвать эту функцию для каждой колонки и установить ShowImage в TRUE для той колонки, которую Вы будете сортировать. Сделать это можно в функции OnColumnClick():
Code: |
procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); var i : integer; begin // Это Ваша собственная функция сортировки CustomSort( @CustomSortProc, Column.Index ); // Этот цикл отображает иконку в выбранной колонке. for i := 0 to ListView1.Columns.Count-1 do SetColumnImage( ListView1, i, 0, i = Column.Index ); end; |
Проблема: Изменение размера колонки генерирует сообщение WM_PAINT, которое стирает картинку, поэтому Вам прийдётся переопределить WM_PAINT и вызвать SetColumnImage снова.
Использовался компонент TApplicationEvents в Delphi.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!