Иногда бывает полезно в заголовке колонки показывать стрелочку, чтобы информировать пользователя, по какой колонке идёт сортировка. Добавьте следующий код в форму:

 

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.

 

Ранние статьи

Добавить комментарий

Не использовать не нормативную лексику.

Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.

ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!


Защитный код
Обновить