我正在尝试在 Delphi 10.3.3 VCL 项目中使用
OwnerData=True
实现 TListView 组件中的复选框。
这是我迄今为止尝试过的一个最小示例:
procedure TForm1.FormCreate(Sender: TObject);
begin
ListView1.ViewStyle := vsReport;
ListView1.OwnerData := True;
ListView1.Checkboxes := True;
// MyDataList with some initial data
end;
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
Item.Caption := 'Item ' + IntToStr(Item.Index + 1);
Item.Checked := MyDataList[Item.Index].Checked;
end;
但是,它不显示复选框。
是否有推荐的方法或解决方法来有效处理此问题?任何代码示例或指导将不胜感激!
CheckBoxes
功能是使用内部状态图像列表实现的,但是底层Win32 ListView控件不支持虚拟模式下的状态图像。因此,您需要:
所有者绘制列表项以在其上手动绘制复选框。
将所需的复选框图像放入分配给 ListView 的
TImageList
属性的 SmallImages
中,然后根据需要在 TListItem.ImageIndex
处理程序中设置 TListView.OnData
属性。