Поместить изображение на заголовок столбца TListView
Добавьте это на Вашу форму:
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().
procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn); var i : integer; begin // Функция CustomSort не рассматривается в этой статье, // но ее можно найти на delphi3000.com CustomSort( @CustomSortProc, Column.Index ); // Этот цикл отображает иконки в выбранной колонке. for i := 0 to ListView1.Columns.Count-1 do SetColumnImage( ListView1, i, 0, i = Column.Index ); end;
Проблема: Изменение размеров заголовка получает WM_PAINT, которое сотрет изображение.
Решение: Override WM_PAINT и вызовите SetColumnImage снова оттуда.
Я использовал компонент TApplicationEvent из Delphi 5.
Комментарии