Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: декабрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Как поместить картинку в заголовок 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( @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 5.




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS