Поместить изображение на заголовок столбца 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.
Комментарии