![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Компонент TListView
Vedem © (2004-07-28 11:29:00)Здравствуйте! Может кто подскажет, как заставить отрисовывать TListView с установленным ViewStile в vsReport в заголовке колонок "стрелочки сортировки"?
Vedem (2004-07-29 15:52:00) [1]Ответа так и не последовало :(
Сам кое-чего нарыл, может кому поможет:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, commctrl;
type
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
private
FHeader: HWND;
FBmp: HBITMAP;
FOldListWndProc: TWndMethod;
procedure ListWndProc(var Msg: TMessage);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
item: HD_ITEM;
begin
FBmp := LoadBitmap(0, MAKEINTRESOURCE(OBM_DNARROWD));
item.Mask := HDI_BITMAP or HDI_FORMAT;
item.hbm := FBmp;
item.fmt := HDF_STRING or HDF_BITMAP_ON_RIGHT or HDF_BITMAP;
FHeader := GetWindow(ListView1.Handle, GW_CHILD);
SendMessage(FHeader, HDM_SETITEM, 1, LPARAM(@item));
FOldListWndProc := ListView1.WindowProc;
ListView1.WindowProc := ListWndProc;
end;
procedure TForm1.ListWndProc(var Msg: TMessage);
var
item: HD_ITEM;
begin
if Assigned(FOldListWndProc) then FOldListWndProc(Msg);
if Msg.Msg = WM_NOTIFY then
if HD_NOTIFY(Pointer(Msg.LParam)^).Hdr.code = HDN_ENDTRACK then
begin
item.Mask := HDI_BITMAP or HDI_FORMAT;
item.hbm := FBmp;
item.fmt := HDF_STRING or HDF_BITMAP_ON_RIGHT or HDF_BITMAP;
SendMessage(FHeader, HDM_SETITEM, 0, LPARAM(@item));
end
end;
end.
Vedem (2004-07-29 10:47:00) [2]Спасибо! Все замечательно работает, но возникла еще проблемка:
при изменении ширины колонки картинка просто напросто исчезает!
У мастеров есть рекомендации по этому поводу?
aLexx (2004-07-28 12:37:00) [3]Что-то в таком роде:
uses CommCtl;
var
HI: HD_ITEM;
H: HWND;
...
H := ListView_GetHeader(ListView1.Handle);
HI.Mask := HDI_TEXT or HDI_BITMAP or HDI_FORMAT;
HI.fmt := HDF_STRING or HDF_BITMAP or HDF_BITMAP_ON_RIGHT;
HI.hbm := Bitmap.Handle; //картинка со стрелкой
HI.pszText := 'bla-bla-bla';
SendMessage(H, HDM_SETITEM, 0 {индекс колонки}, Integer(@HI));