Пришлось спрашивать на одном форуме, ибо пытался сделать сам, но глючил этот чекбокс немного. Добрые люди помогли, за что им большое спасибо!
Сопсно, выкладываю пример, как вынести CheckBox в заголовок колонки ListView, может, кому-то пригодиться.
Вроде, работает на Виста и выше.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
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 HeaderID: Integer; procedure WMNotify(var AMessage: TWMNotify); message WM_NOTIFY; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.WMNotify(var AMessage: TWMNotify); begin if AMessage.NMHdr^.idFrom = HeaderID then if AMessage.NMHdr^.code = HDN_ITEMSTATEICONCLICK then ShowMessage('Тык на чекбоксе в заголовке'); inherited; end; procedure TForm1.FormCreate(Sender: TObject); var HeaderHandle: HWND; HeaderItem: HD_ITEM; HeaderStyle: Integer; begin ListView_SetExtendedListViewStyle(ListView1.Handle, LVS_EX_CHECKBOXES or LVS_EX_FULLROWSELECT); HeaderHandle := ListView_GetHeader(ListView1.Handle); HeaderStyle := GetWindowLong(HeaderHandle, GWL_STYLE); HeaderStyle := HeaderStyle or HDS_CHECKBOXES; SetWindowLong(HeaderHandle, GWL_STYLE, HeaderStyle); HeaderItem.Mask := HDI_FORMAT; Header_GetItem(HeaderHandle, 0, HeaderItem); HeaderItem.fmt := HeaderItem.fmt or HDF_CHECKBOX or HDF_FIXEDWIDTH; Header_SetItem(HeaderHandle, 0, HeaderItem); HeaderID := GetDlgCtrlID(HeaderHandle); end; end. |
Спасибо!) Я давно искал способ, как это сделать. Жаль, конечно, что в XP не работает..
В какой-то статье находил скриншоты good-bad, там как раз были такая галочка в заголовке)