Логотип
Vicking.narod.ru
Программирование
Исходные тексты и утилиты

Раздельные ImageList'ы в ListView


Гостевая книга
 
 

Недавно столкнулся с одной задачей, нужно мне было в ListView в заголовках помечать, по какому столбцу идет сортировка и в каком направлении. Самому рисовать треугольнички в режиме run-time не хотелось, поэтому решился через ImageList. На первый взгляд все вроде бы хорошо: картинки в ImageList'е, в свойстве ImageIndex указал индекс картинки - и все готово! Но вот тут все и началось. Дело в том, что у меня в моем ListView уже назначен один ImageList, но с цветом фона clWindow (как правило белый). А на заголовке мне нужно, чтобы фон был серый. И получалось у меня, что на заголовок выводятся картинки с белым фоном. Нужно было как-нибудь ImageList назначить заголовкам отдельно...

И тут мне в голову пришла идея (может она уже приходила не только ко мне)! Я понял что, THeaderContorl и заголовки в ListView одного поля ягода. А HeaderControl может иметь свой отдельный ImageList. Осталось "выловить" его из ListView. Первое, что пришло мне в голову, это функция из Windows API FindWindowEx, одним из параметров которой является имя класса искомого окна. Заглянув в открытые исходники Delphi, я нашел имя класса для HeaderControl - "SysHeader32". А далее осталось только назначить отдельный ImageList при помощи функции-макроса Header_SetImageList. И все поехало! Короче все выглядело вот так:

procedure SetHeaderImages(ListView: TCustomListView;
  Images: TCustomImageList);
var
  wnd : HWND;
begin
  wnd := FindWindowEx(ListView.Handle,0,'SysHeader32',nil);
  if wnd <> 0 then
  begin
    Header_SetImageList(wnd,Images.Handle);
  end;
end;

Вот на этом пока все.


© Зинкевич Виктор, 2004 - 2005 г.

 



Hosted by uCoz