【问题标题】:Delphi 2010 image on Tbutton fading/blinkingDelphi 2010 图像上的 Tbutton 褪色/闪烁
【发布时间】:2011-07-01 17:35:20
【问题描述】:

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

【问题讨论】:

  • 你能显示 .dfm 和表单代码吗?当您说“设置 imageindex 和 images 属性”时,这究竟是什么意思(在 Object Inspector 或代码中)?我从未见过这样的东西,并且无法在 D2010 或 XE 的快速测试中重现它。
  • 我从 imagelist 中选择一张图片作为按钮。按钮位于 tab1 上的页面控件上。当我运行应用程序时,图像会淡入淡出。
  • 再次,请发布您的代码和 dfm。没有它,您将无能为力,您的问题可能最终会被关闭。说“我选择一张图片”没有帮助。 如何选择它?发布您的代码
  • 我将 imagelist 中的 png 图像分配到 tbutton 上。原谅我的英语。下面的风暴也有同样的问题。
  • 所以这是在 vista 或 win7 上启用的航空玻璃主题?

标签: delphi delphi-2010


【解决方案1】:

重温旧话题...

在网上搜索了解决方案后,一无所获,我查看了 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”图像索引是不可能的,所以我创建了一个适合自己的简单解决方案,但我必须调用 RunTime。 (例如,您可以从 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 的动画并且没有淡出图像)。

【讨论】:

    【解决方案2】:

    它似乎是 Tbutton 的 doubleBuffered 属性。当设置为 false 时,图像会闪烁,当设置为 true 时,它​​正在工作。这发生在启用了 aero 的 Win 7 上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 2016-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多