lazarus/FPC: 如果只有图标改变,TListView 会重新绘制行
lazarus/FPC: TListView repaints row if only the icon changes
嗨Lazarus/LCL/FPC专家,
只是为了好玩,我尝试制作一个 TListView 图标旋转。在我的测试表单上,我有一个单独的 TListView(ViewStyle := vsReport,RowSelect := true),我在我的 SmallImages 列表中添加了一堆图像,图像 [0] .. [5] 包含我的旋转符号的图片.为了检查一下,我让符号使用计时器旋转:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ListView1.Selected<>NIL then
ListView1.Selected.ImageIndex:=(ListView1.Selected.ImageIndex + 1) mod 5;
end;
定时器设置为200ms,原理很好,选中行的图标确实旋转了。但似乎 LCL Listview 重绘了整行,而不仅仅是图标图像,这让整个选定的行闪烁。
有谁知道减少闪烁的方法吗?如果 ListView 不重绘整行,而只重绘图像,我已经很高兴了。
谢谢,阿敏。
我自己找到了解决方案。闪烁似乎与显卡驱动问题有关,并且只影响我的开发机器。从那以后,该程序已经在许多其他机器上出现过,没有闪烁,并且由于它现在已经在野外使用了……任何测试人员或用户都没有报告过闪烁效果。
所以我猜这是我特定编程环境的问题。
阿敏.
嗨Lazarus/LCL/FPC专家,
只是为了好玩,我尝试制作一个 TListView 图标旋转。在我的测试表单上,我有一个单独的 TListView(ViewStyle := vsReport,RowSelect := true),我在我的 SmallImages 列表中添加了一堆图像,图像 [0] .. [5] 包含我的旋转符号的图片.为了检查一下,我让符号使用计时器旋转:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if ListView1.Selected<>NIL then
ListView1.Selected.ImageIndex:=(ListView1.Selected.ImageIndex + 1) mod 5;
end;
定时器设置为200ms,原理很好,选中行的图标确实旋转了。但似乎 LCL Listview 重绘了整行,而不仅仅是图标图像,这让整个选定的行闪烁。
有谁知道减少闪烁的方法吗?如果 ListView 不重绘整行,而只重绘图像,我已经很高兴了。
谢谢,阿敏。
我自己找到了解决方案。闪烁似乎与显卡驱动问题有关,并且只影响我的开发机器。从那以后,该程序已经在许多其他机器上出现过,没有闪烁,并且由于它现在已经在野外使用了……任何测试人员或用户都没有报告过闪烁效果。
所以我猜这是我特定编程环境的问题。
阿敏.