我有一个虚拟TListView,它有一个TImageList。 item.ImageIndex在OnData事件上设置。 listview是只读的,并且RowSelect为true,并在vsReport ViewStyle中显示。
当我选择一行然后选择第二行时,第一行的图标将保留所选的彩色背景。如果我将鼠标移到它上面(以便显示较淡的“可选”背景),然后在不选择任何内容的情况下关闭鼠标,背景将恢复为正常白色。
通过smallImages / ImageIndex或StateImages / StateIndex设置图像时似乎会出现错误
这是一个已知的错误,是否有任何变通方法?我已经尝试在OnSelectItem下放置一个刷新事件,虽然这似乎是错误的,因为当我通过'未选择'的TListItem时,Item参数总是为nil('selected'传递工作正常,但两者都工作对于非虚拟模式)。
这是在Delphi XE2中发生的,这是我可用的最新版本。如果它仍然存在于更高版本中,那么我可以提出错误报告。
可能有一些影响的另一个缓解因素:使用DevExpress皮肤库对应用程序进行换肤。这不应该影响OnSelectItem错误。
编辑: 使用Listbox和1个图标的图像列表在一个简单的表单示例中重现,使用以下代码:
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
之外,列表框设置为默认值使用viewStyle作为vsIcon我看到一个类似的问题,选择高亮不被清除'高'足够在项目顶部留下蓝色边框。
我想知道这是Windows版本的问题,Windows改变了组件的样式,但Delphi控制区域重绘?我正在这台机器上使用Win 8 Pro。