德尔福2010年Tbutton上的图像褪色闪烁

德尔福2010年Tbutton上的图像褪色闪烁,第1张

概述当我设置Button的imageindex和images属性时(从imagelist组件/ pngs),启动程序并单击按钮,图像缓慢闪烁/淡入淡出.如何防止这个和什么似乎是问题? 复兴一个老话题…… 在互联网上搜索解决方案后发现什么都没有,我看了一下TCustomButton代码. 碰巧的是,在内部,Windows上的按钮控件有一个包含6个图像的图像列表,如下所示: index 0:正常图像 索引 当我设置button的imageindex和images属性时(从imageList组件/ pngs),启动程序并单击按钮,图像缓慢闪烁/淡入淡出.如何防止这个和什么似乎是问题?解决方法 复兴一个老话题……

在互联网上搜索解决方案后发现什么都没有,我看了一下TCustombutton代码.

碰巧的是,在内部,Windows上的按钮控件有一个包含6个图像的图像列表,如下所示:

index 0:正常图像
索引1:热图像(当鼠标移过按钮时)
索引2:按下的图像(当你按住鼠标按钮时)
索引3:禁用图像
索引4:所选图像(当按钮具有焦点但未按下或鼠标悬停在其上时)
索引5 :(我们需要的那个,不能在Tbutton控件中指定;我们将讨论它)

在Delphi的Tbutton控件中,您可以将ImageList设置为“Images”属性,并且可以设置“ImageIndex”,“HotimageIndex”,“pressedImageIndex”,“DisabledImageIndex”和“SelectedImageIndex”.

设置此属性后,Tbutton控件将创建另一个图像列表,并按照上面指定的顺序将您在属性中指定的索引从“Images”属性中的图像列表复制到新创建的图像列表.

问题是,当您对焦控件时,Win 7 Aero具有淡入和淡出高亮颜色(一点动画)的效果,并且它使用了内部图像列表中的第6个图像淡入和淡出,但是为Tbutton控件提供“FADE”图像索引是不可能的,所以我创建了一个适合我自己的简单解决方案,但我必须在RunTime中调用. (你可以从TCustombutton派生一个新类并创建一个新的控件,你可以设置一个新的SelectedFadeImageIndex,但我没有).

我创建了这个程序:

procedure MakebuttonImageStopBlinking(Abutton: TCustombutton);    var      buttonImageList: TbuttonImageList;      Icon: HICON;    begin      SendMessage(Abutton.Handle,BCM_GEtimageList,LParaM(@buttonImageList));      Icon := ImageList_GetIcon(buttonImageList.himl,ILD_norMAL);      ImageList_AddIcon(buttonImageList.himl,Icon);      DestroyIcon(Icon);    end;

因此,当窗口被创建时(在OnCreate事件上),我只需要调用MakebuttonImageStopBlinking来提供每个具有图像作为参数的按钮,现在一切正常.

想要加速这样一个古老的话题,但似乎没有任何答案(或者我无法正常搜索).

编辑:将DoubleBufferd设置为True将起作用,但它将从具有焦点的按钮停止小动画.使用上面的解决方案,您可以将DoubleBuffered保留为False,您将获得所有这些(来自aero的动画并且没有淡出图像).

总结

以上是内存溢出为你收集整理的德尔福2010年Tbutton上的图像褪色/闪烁全部内容,希望文章能够帮你解决德尔福2010年Tbutton上的图像褪色/闪烁所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1268897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存