Delphi 带有复选框和子项图像的TListView

Delphi 带有复选框和子项图像的TListView,delphi,listview,Delphi,Listview,使用标准的TListView组件ViewStyle=vsReport,我附加了一个TImageList,并成功地将图像添加到第一列项目中。ImageIndex:=0和后续列项目[0]。SubItemImages[1]:=1 如果我随后将checkbox属性设置为True,则子项上的图像将消失。主图像仍然是Item.ImageIndex设置的图像,但子项将丢失其图像 我还注意到,当复选框=True时,OnGetSubItemImage事件不会触发 有人知道解决这个问题的方法吗?这没有什么特别的帮助

使用标准的TListView组件ViewStyle=vsReport,我附加了一个TImageList,并成功地将图像添加到第一列项目中。ImageIndex:=0和后续列项目[0]。SubItemImages[1]:=1

如果我随后将checkbox属性设置为True,则子项上的图像将消失。主图像仍然是Item.ImageIndex设置的图像,但子项将丢失其图像

我还注意到,当复选框=True时,OnGetSubItemImage事件不会触发


有人知道解决这个问题的方法吗?

这没有什么特别的帮助,但是TMS TAdvListView组件使用其子映像属性来处理它。将此设置为True,我可以有复选框和子项图像。我相信在幕后有很多好的工作在进行。至少这让我向前迈进了一步。

这并没有特别的帮助,但是TMS TAdvListView组件使用其子映像属性来处理它。将此设置为True,我可以有复选框和子项图像。我相信在幕后有很多好的工作在进行。至少这让我前进了。

这是一个非常老的错误,当您激活checkbox属性时,将禁用LVS_EX_子项图像和 TListView控件上的LVS_EX_信息提示样式

您可以使用此解决方法来修复此错误

1禁用listview中的复选框属性

2将在Delphi 7和windows 7中测试的代码放入表单中

const
  LVM_FIRST =$1000;
  LVS_EX_SUBITEMIMAGES         = $00000002;
  LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
  LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55;


function ListView_GetExtendedListViewStyle(LVWnd: HWnd): DWORD;
begin
  Result := SendMessage(LVWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
end;

function ListView_SetExtendedListViewStyle(LVWnd: HWnd; ExStyle: LPARAM): DWORD;
begin
  Result := SendMessage(LVWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ExStyle);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
ListView1.Checkboxes:=True;//Activate the checkbox in the listview
ListView_SetExtendedListViewStyle(ListView1.Handle,ListView_GetExtendedListViewStyle(ListView1.Handle) OR LVS_EX_SUBITEMIMAGES); //Activate the LVS_EX_SUBITEMIMAGES style.
end;
最后的结果是


这是一个非常老的错误,当您激活复选框属性时,将禁用LVS_EX_子项图像和 TListView控件上的LVS_EX_信息提示样式

您可以使用此解决方法来修复此错误

1禁用listview中的复选框属性

2将在Delphi 7和windows 7中测试的代码放入表单中

const
  LVM_FIRST =$1000;
  LVS_EX_SUBITEMIMAGES         = $00000002;
  LVM_SETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 54;
  LVM_GETEXTENDEDLISTVIEWSTYLE = LVM_FIRST + 55;


function ListView_GetExtendedListViewStyle(LVWnd: HWnd): DWORD;
begin
  Result := SendMessage(LVWnd, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0);
end;

function ListView_SetExtendedListViewStyle(LVWnd: HWnd; ExStyle: LPARAM): DWORD;
begin
  Result := SendMessage(LVWnd, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, ExStyle);
end;


procedure TForm1.FormCreate(Sender: TObject);
begin
ListView1.Checkboxes:=True;//Activate the checkbox in the listview
ListView_SetExtendedListViewStyle(ListView1.Handle,ListView_GetExtendedListViewStyle(ListView1.Handle) OR LVS_EX_SUBITEMIMAGES); //Activate the LVS_EX_SUBITEMIMAGES style.
end;
最后的结果是


据我所知,由于windows本身使用图像作为这些“复选框”,您不能同时使用标准控件,因此您必须绘制每个列表项。据我所知,您不能同时使用标准控件,因为windows本身使用图像作为这些“复选框”,因此,您必须绘制每个列表项。应用样式后,您是否将图像添加到此列表项?应用样式后,您是否将图像添加到此列表项?