Delphi 如何在TCanvas上绘制交叉图案填充并指定背景色

Delphi 如何在TCanvas上绘制交叉图案填充并指定背景色,delphi,colors,canvas,drawing,Delphi,Colors,Canvas,Drawing,我正在尝试制作一个“空白”背景,以便在上面放置一个图像。通过在窗体上放置TImage并执行以下操作来创建交叉图案填充并不太困难: image1.Canvas.brush.Style := bsDiagCross; image1.canvas.brush.color := clWhatever; image1.canvas.FillRect(image1.clientrect); 这是可行的,我得到了一个黑色背景上的交叉线图案。但这就是问题所在。它总是黑色的,我找不到任何方法来指定背景色,以防我

我正在尝试制作一个“空白”背景,以便在上面放置一个图像。通过在窗体上放置TImage并执行以下操作来创建交叉图案填充并不太困难:

image1.Canvas.brush.Style := bsDiagCross;
image1.canvas.brush.color := clWhatever;
image1.canvas.FillRect(image1.clientrect);
这是可行的,我得到了一个黑色背景上的交叉线图案。但这就是问题所在。它总是黑色的,我找不到任何方法来指定背景色,以防我想要黑色以外的颜色


有人知道怎么做吗?

阴影笔刷的颜色是前景色-阴影本身的颜色

使用阴影画笔时,背景色是单独设置的,据我所知,背景色不是作为TCanvas的属性公开的,因此需要使用Windows GDI APISetBkColor()函数

e、 g.要在白色背景上绘制红色图案填充,请在使用画布笔刷绘制之前添加一个设置背景颜色的调用:

image1.Canvas.brush.Style := bsDiagCross;
image1.canvas.brush.color := clRed;

SetBkColor(image1.Canvas.Handle, ColorToRGB(clWhite));
image1.canvas.FillRect(image1.clientrect);

[更新:注意:在Delphi 2010(可能还有一些早期版本)中,您应该在设置笔刷属性后调用SetBKColor()。画布在内部创建画笔时会调用SetBKColor(),这会破坏在引用画布.brush之前对SetBKColor()的任何显式调用。在Delphi 2006(测试原始发布时使用)和Delphi 2010之间,创建内部画布笔刷的时间或内部使用SetBkColor()的时间似乎发生了变化。无论什么原因,在使用之前立即调用SetBKColor显然更可靠。

只是在Windows 7下的D2010上测试了它,但它不起作用。我仍然有黑色的背景。这很有趣。在Delphi 2010上,似乎你必须在使用画笔之前立即设置背景色。2010年,修改画笔似乎会影响背景颜色(之前发布的解决方案/提示是在Delphi 2006中完成的)。我将相应地编辑代码。在DC中选择笔刷后,Delphi 2005将调用
SetBkColor(而不是Brush.Color)
SetBkMode(透明)
。更改笔刷的属性将使其和DC控制柄无效。当画笔无效时,
FillRect
调用重新创建画笔并调用
SetBkColor
。您可以在
FillRect
之前通过读取
Canvas.Handle
属性触发它。完成此操作后,您可以对DC进行任何手动更改,例如自己调用
SetBkColor
。Deltics,除非Delphi2006引入了后来修复的回归,否则我怀疑您最初的测试只是偶然成功的。是的,可能是“幸运的”。有趣的是,我的运气与D2010和D2006 tho不一样。不管是什么原因,在调用需要它的画布之前尽可能晚地调用SetBKColor()是最好的方法-可能避免使用画布方法和调用GDI direct更可取(或者使用更忠实地公开GDI的GDI画布包装器,如果存在的话,我肯定它必须在某处这样做…)。