|
|
|||||||
---|---|---|---|---|---|---|---|---|
Раздельные 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 г. |