我有一个工具栏,我使用以下步骤在其中一个工具按钮中更改矩形的颜色。 ImageList的ColorDepth
为cl24Bit
,DrawingStyle
为dsTransparent
。程序运行正常。
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。
答案 0 :(得分:2)
您的问题有两种解决方案。
1)禁用应用程序的主题化
通过取消启用运行时主题&#39>来禁用。项目中的复选框 - 选项 - 应用程序'。
这样做的缺点是该应用程序看起来是为Windows 95开发的。
2)更改ImageList
结果在Windows 10上看起来像这样(关于工具按钮,在Windows 7上也是如此):
我修改了你的代码,作为按钮的切换,因此两个按钮都有红色矩形。
这些数字只是64 x 64像素位图,白色背景上有黑色文字。
警告:复制 - 修改的原则 - 重复复制可能会导致图像质量下降。更好的方法是拥有两个图像列表,一个包含原始图像,另一个包含矩形图像。
话虽如此,矩形的目的似乎是表示某种“活跃”的形式。州。这也可以通过按钮的Down
属性来实现。