带有CheckBoxes和SubItemImages的TListView

时间:2010-02-25 16:24:36

标签: delphi listview

使用标准TListView组件(ViewStyle = vsReport),我附加了一个TImageList,并成功将图像添加到第一列(Item.ImageIndex := 0)和后续列(Items[0].SubItemImages[1] := 1

如果我然后将CheckBoxes属性设置为True,则SubItems上的图像将消失。主图像保持不变(由Item.ImageIndex设置的图像),但SubItems会丢失图像。

我还注意到OnGetSubItemImage

CheckBoxes = True事件无法触发

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

2 个答案:

答案 0 :(得分:8)

这是一个非常老的错误,当你激活CheckBoxes属性会禁用LVS_EX_SUBITEMIMAGES和 TListView控件上的LVS_EX_INFOTIP样式。

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

1)禁用listview

中的checkbox属性

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;

3),最终结果是

alt text http://i50.tinypic.com/20hrfhd.png

答案 1 :(得分:0)

嗯,这没有什么帮助,但TMS TAdvListView组件使用其SubImages属性处理它。将此设置为True,我可以拥有复选框和子项目图像。我相信在幕后会有很多好的工作。至少这让我前进了。