如何在Delphi中的TListView(OwnerData True)中使用复选框

问题描述 投票:0回答:1

我正在尝试在 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;

但是,它不显示复选框。

是否有推荐的方法或解决方法来有效处理此问题?任何代码示例或指导将不胜感激!

listview delphi delphi-10.3-rio
1个回答
0
投票

CheckBoxes
功能是使用内部状态图像列表实现的,但是底层Win32 ListView控件不支持虚拟模式下的状态图像。因此,您需要:

  • 所有者绘制列表项以在其上手动绘制复选框。

  • 将所需的复选框图像放入分配给 ListView 的

    TImageList
    属性的
    SmallImages
    中,然后根据需要在
    TListItem.ImageIndex
    处理程序中设置
    TListView.OnData
    属性。

请参阅:将 tListView 与 OwnerData 和复选框一起使用

© www.soinside.com 2019 - 2024. All rights reserved.