Внешний вид сайта:

Поместить изображение на заголовок столбца TListView

При сортировке 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.

Комментарии

Нет комментариев. Ваш будет первым!