本文介绍了如何显示TListView的标题列复选框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要有一个复选框中的TListView的列标题:
I need to have a check box in a column header of a TListView:
我曾尝试以下code:
I have tried the following code:
with CheckBox1 do
begin
Parent := ListView1;
Top := 0;
Left := 4;
end;
但预期该复选框并不总是工作。我怎样才能正确地创建TListView的标题列复选框?
but the check box doesn't always work as expected. How can I properly create a check box in TListView header column ?
推荐答案
以下code将添加复选框列表视图的标题和说明如何处理点击事件吧。结果
The following code will add the check box to the list view's header and shows how to handle the click event for it.
的 请注意,因为Windows Vista中的以下code是支持的。的
Please note, that the following code is supported since Windows Vista.
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('You have clicked the header check box');
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.
结果
这篇关于如何显示TListView的标题列复选框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!