代码之家  ›  专栏  ›  技术社区  ›  J__

带有复选框和子项图像的列表视图

  •  1
  • J__  · 技术社区  · 14 年前

    使用标准的tlistview组件( ViewStyle = vsReport ),我已附加了一个计时列表,并已成功将图像添加到第一列( Item.ImageIndex := 0 )以及随后的栏目( Items[0].SubItemImages[1] := 1 )

    如果我将复选框属性设置为true,子项上的图像将消失。主图像保持不变(由 Item.ImageIndex )但是子项会丢失它们的图像。

    我也注意到 OnGetSubItemImage CheckBoxes = True

    有人知道怎么解决这个问题吗?

    2 回复  |  直到 14 年前
        1
  •  8
  •   RRUZ    14 年前

    这是一个很老的错误,当您激活复选框属性时,将禁用lvs_ex_子项images和 tlistview控件上的lvs_ex_infotip样式。

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

    1) 在ListView中禁用复选框属性

    2) 将此代码(在Delphi7和Windows7中测试)放入表单中。

    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

        2
  •  0
  •   J__    14 年前

    这并没有特别的帮助,但是tms tadvlistview组件用它的 SubImages 财产。设置为true,我可以有复选框和子项图像。我相信在幕后有很多好的工作要做。至少这能让我前进。