gpt4 book ai didi

T 按钮上的 Delphi 2010 图像褪色/闪烁

转载 作者:行者123 更新时间:2023-12-03 15:18:47 30 4
gpt4 key购买 nike

当我设置按钮的 imageindex 和 images 属性(来自图像列表组件/png)时,启动程序并单击按钮,图像缓慢闪烁/淡入淡出。如何防止这种情况以及问题所在?

最佳答案

复兴一个老话题......

在网上搜索解决方案后一无所获,我查看了TCustomButton代码。

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

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

在Delphi的TButton控件中,可以为“Images”属性设置一个ImageList,并且可以设置“ImageIndex”、“HotImageIndex”、“PressedImageIndex”、“DisabledImageIndex”和“SelectedImageIndex”。

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

问题是,当您聚焦控件时,Win 7 Aero 具有淡入和淡出突出显示颜色(一个小动画)的效果,并且它还使用内部图像列表中的第 6 个图像淡入和淡出,但不可能向 TButton 控件提供“FADE”图像索引,因此我创建了一个适合自己的简单解决方案,但我必须在运行时调用。 (您可以从 TCustomButton 派生一个新类并创建一个新控件,例如您可以设置新的 SelectedFadeImageIndex,但我没有)。

我创建了这个过程:

    procedure MakeButtonImageStopBlinking(AButton: TCustomButton);
var
ButtonImageList: TButtonImageList;
Icon: HICON;
begin
SendMessage(AButton.Handle, BCM_GETIMAGELIST, 0, LPARAM(@ButtonImageList));
Icon := ImageList_GetIcon(ButtonImageList.himl, 0, ILD_NORMAL);
ImageList_AddIcon(ButtonImageLIst.himl, Icon);
DestroyIcon(Icon);
end;


因此,当创建窗口时(在 OnCreate 事件上),我只需调用 MakeButtonImageStopBlinking 来提供每个以图像为参数的按钮,现在一切都正常了。

很抱歉重提这样一个老话题,但似乎没有任何答案(或者我无法正确搜索)。

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

关于T 按钮上的 Delphi 2010 图像褪色/闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6551323/

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