对角刷样式给我黑色区域

时间:2012-10-03 13:06:44

标签: delphi canvas styles brush

我想使用以下代码在Canvas中绘制对角线:

InFlateRect(r, -1, -1);
Canvas.Brush.Color := clYellow;
Canvas.Brush.Style := bsFDiagonal;
Canvas.Pen.Color := clRed;
//Pen.Style := psClear;
Canvas.Rectangle(r);

但结果是一个黑盒子。

如果我删除了样式更改,我得到了正常的黄色区域。

为什么这个代码的矩形是黑色的?

感谢您的每一个建议


很抱歉找不到相关信息,我将其扩展: 此过程使用TMetaFileCanvas进行绘制。在普通表格上,我可以绘制任何画笔样式,如TShape ......

1 个答案:

答案 0 :(得分:5)

procedure TForm4.FormPaint(Sender: TObject);
var
  R: TRect;
begin
  R := ClientRect;
  InflateRect(R, -10, -10);
  Canvas.Brush.Color := clYellow;
  Canvas.Brush.Style := bsFDiagonal;
  Canvas.Pen.Color := clRed;
  Canvas.Rectangle(R);
end;

生成结果

Screenshot http://privat.rejbrand.se/fdiagrect.png

(不要忘记表格Invalidate中的OnResize。)

请注意,该区域填充了斜黄线。这确实是bsFDiagonal画笔样式的作用。

Screenshot http://privat.rejbrand.se/fdiagrectcloseup.png

根据你的问题的措辞(“我想绘制一个对角线交叉[...]”),我怀疑你真的想要别的东西,即矩形内的一个大十字架。这根本无法使用标准刷子。相反,你必须手动绘制它:

procedure TForm4.FormPaint(Sender: TObject);
var
  R: TRect;
begin
  R := ClientRect;
  InflateRect(R, -10, -10);
  Canvas.Brush.Color := clWhite;
  Canvas.Brush.Style := bsSolid;
  Canvas.Pen.Color := clRed;
  Canvas.Rectangle(R);
  Canvas.MoveTo(10, 10);
  Canvas.LineTo(R.Right, R.Bottom);
  Canvas.MoveTo(10, R.Bottom);
  Canvas.LineTo(R.Right, 10);
end;

Screenshot http://privat.rejbrand.se/rectwithcross.png