1

我有一个工具栏,我正在使用以下过程来更改其中一个工具按钮中矩形的颜色。ColorDepthImageList 的是cl24BitDrawingStyledsTransparent。该程序工作正常。

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。

4

1 回答 1

2

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

1)禁用应用程序的主题

通过取消勾选“项目 - 选项 - 应用程序”中的“启用运行时主题”复选框来禁用。

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

2)更改以下属性ImageList

  • 颜色深度:cdDeviceDependent
  • 绘图样式:dsNormal
  • 图像类型:itMask

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

在此处输入图像描述

我修改了您的代码以用作按钮的切换,因此两个按钮具有红色矩形。

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

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

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

于 2016-11-18T07:59:31.483 回答