Delphi virtual TListView-即使清除了其余文本,图标仍保持选中状态

Delphi virtual TListView-即使清除了其余文本,图标仍保持选中状态,listview,delphi,delphi-xe2,virtual,Listview,Delphi,Delphi Xe2,Virtual,我有一个虚拟的TListView,它有一个TImageList分配给它。item.ImageIndex是在OnData事件上设置的。listview是只读的,RowSelect为true,并以vsReport ViewStyle显示 当我选择一行,然后选择第二行时,第一行的图标仍保留选定的彩色背景。如果我将鼠标移到它上面(以便显示更苍白的“可选”背景),然后在不选择任何内容的情况下将鼠标移开,背景将恢复为正常的白色 通过smallImages/ImageIndex或StateImages/Sta

我有一个虚拟的TListView,它有一个TImageList分配给它。item.ImageIndex是在OnData事件上设置的。listview是只读的,RowSelect为true,并以vsReport ViewStyle显示

当我选择一行,然后选择第二行时,第一行的图标仍保留选定的彩色背景。如果我将鼠标移到它上面(以便显示更苍白的“可选”背景),然后在不选择任何内容的情况下将鼠标移开,背景将恢复为正常的白色

通过smallImages/ImageIndex或StateImages/StateIndex设置图像时,似乎会出现此错误

这是一个已知的错误,有没有解决方法?我曾尝试在OnSelectItem下放置一个刷新事件,尽管这似乎有问题,因为当我通过'not selected'TListItem时,Item参数始终为nil(虽然'selected'通过工作正常,但两者都适用于非虚拟模式)

这发生在Delphi XE2中,它是我所拥有的最新版本。如果它在以后的版本中仍然存在,那么我可以提出一个bug报告

另一个可能有一定影响的缓解因素:使用DevExpress蒙皮库对应用程序进行蒙皮。但这不应影响OnSelectItem错误

编辑: 在一个简单的表单示例中复制,列表框上有一个1图标的imagelist,代码如下:

procedure TForm28.FormCreate(Sender: TObject);
begin
  listview1.Items.Count := 5;
end;

procedure TForm28.ListView1Data(Sender: TObject; Item: TListItem);
begin
  item.Caption := 'item #' + inttostr(item.Index);
  item.ImageIndex := 0;
end;
除了设置SmallImages和OwnerData=true和ViewStyle=report之外,将Listbox设置为默认值

使用viewStyle作为vsIcon,我看到了一个类似的问题,选择突出显示没有被清除到足够高,在项目顶部留下了一个蓝色边框


我想知道这是否是Windows版本的问题,Windows更改了组件的样式,但Delphi控制了要重画的区域?我正在这台机器上使用Win 8 Pro。

我没有安装XE2,也没有安装DevXPress皮肤。对于XE7,我无法重现该问题。如果您尝试不使用DevXPress皮肤怎么办?在禁用皮肤的情况下仍然会发生这种情况。在XE2和7I之间可能总是有固定的东西。我没有安装XE2,也没有安装DevExpress皮肤。对于XE7,我无法重现该问题。如果您尝试不使用DevXPress皮肤怎么办?在禁用皮肤的情况下仍然会发生这种情况。在XE2和7之间可能总是有固定的东西