在运行时更改工具按钮的图片不再起作用

时间:2016-11-17 10:37:47

标签: delphi toolbar image-replacement

我有一个工具栏,我使用以下步骤在其中一个工具按钮中更改矩形的颜色。 ImageList的ColorDepthcl24BitDrawingStyledsTransparent。程序运行正常。

procedure TANewMain.BtReplaceHighOnClick(Sender: TObject);
var
  ABitmap: TBitmap;
  ARect: TRect;
begin
  ABitmap := TBitmap.Create;
  try
    ImgList.GetBitmap(1, ABitmap);
    ABitmap.Canvas.Brush.Color := ColorToRGB(clRed); // S04
    ABitmap.Canvas.Pen.Color := ColorToRGB(clBlue);
    ARect := Rect(5, 1, 11, 15);
    ABitmap.Canvas.Rectangle(ARect);
    ImgList.ReplaceMasked(1, ABitmap, clWhite);
  finally
    ABitmap.Free;
  end;
end;

如果我将程序添加到存储库以供重用,它可以正常工作。但是,如果我从头开始一个新程序并使用完全相同的程序,我会得到一个白色按钮。我确保两个程序中图像列表和工具栏的属性相同。有效的程序是在不久前编写的。这个问题可能与Windows更新有关吗?我使用的是Windows 10和Delphi 10。

1 个答案:

答案 0 :(得分:2)

您的问题有两种解决方案。

1)禁用应用程序的主题化

通过取消启用运行时主题&#39>来禁用。项目中的复选框 - 选项 - 应用程序'。

这样做的缺点是该应用程序看起来是为Windows 95开发的。

2)更改ImageList

的以下属性
  • ColorDepth:cdDeviceDependent
  • DrawingStyle:dsNormal
  • ImageType:itMask

结果在Windows 10上看起来像这样(关于工具按钮,在Windows 7上也是如此):

enter image description here

我修改了你的代码,作为按钮的切换,因此两个按钮都有红色矩形。

这些数字只是64 x 64像素位图,白色背景上有黑色文字。

警告:复制 - 修改的原则 - 重复复制可能会导致图像质量下降。更好的方法是拥有两个图像列表,一个包含原始图像,另一个包含矩形图像。

话虽如此,矩形的目的似乎是表示某种“活跃”的形式。州。这也可以通过按钮的Down属性来实现。