gpt4 book ai didi

Delphi ListView提示闪烁

转载 作者:行者123 更新时间:2023-12-03 15:54:36 28 4
gpt4 key购买 nike

当鼠标移动时,即使在同一行,提示也会一直闪烁。尝试设置双缓冲,但没有结果。也尝试将代码移动到鼠标事件但仍然相同http://delphi.about.com/od/delphitips2007/qt/listview_hints.htm

procedure TForm1.ListView2InfoTip(Sender: TObject; Item: TListItem;
var InfoTip: string);
begin
InfoTip := 'Gracz: ' + InfoTip + #13#10 + hintyStreamyObecne[Item.Index] ;
end;

我使用的是 Delphi XE5。 Listview放在PageControl上。当我为 Application.HintPause 设置非常低的值并选中/取消选中复选框时,我可以在复选框上重现相同的提示闪烁。使用 Application.HintPause 的默认值对 listView 没有帮助。每次鼠标位置发生变化时都会触发事件 ListView2InfoTip。有什么建议吗?

最佳答案

如果您使用的是 Delphi.About.com 的代码,我建议您进行下一步更改:

在该代码行

li := ListView1.GetItemAt(pt.x, pt.y) ;

用于确定鼠标光标位于哪个项目上。

现在我要做的是创建一些全局变量,或者更好地向 ListView 组件添加另一个字段,在其中我将存储对已显示提示的最后一个 ListItem 的引用。

然后我将添加简单的检查,以查看上面代码获取的当前 ListItem 是否与我们存储在新变量/字段中的 ListItem 相同。如果不是,我们会触发提示显示,如果是,我们只需退出该过程。

var oli: TListItem; //Here we store reference to TListItem to which we shown hint last time

implementation

procedure TMyForm.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);

...
begin
...
li := ListView1.GetItemAt(pt.x, pt.y) ;
if oli = li then Exit
else
oli := li;
//hint showing code
end;
end;

此代码更改将确保仅当鼠标移动到另一个项目上时才会显示新提示,而不是每次鼠标移动时都会显示新提示。

关于Delphi ListView提示闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24881862/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com