斜刷的风格赋予了我黑色的区域(Diagonal brush style gives me black

2019-09-23 10:29发布

我想画一个角交叉与此代码画布:

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

但结果却是一个黑盒子。

如果我删除了风格多变,正常的固体黄色区域我。

为什么是黑色的矩形与此代码?

感谢您的每一个建议


对不起,失踪的信息,我扩展它:这个程序是使用TMetaFileCanvas绘制。 在正常的形式I可得出任何画笔样式,像T形...

Answer 1:

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;

产生的结果

(不要忘了Invalidate形式的OnResize )。

请注意,该地区充满对角线黄线。 这的确是什么bsFDiagonal画笔样式一样。

从你的问题的措辞(“我要画一个角交叉[...]”),我怀疑你真正想要别的东西,即矩形内一个大十字。 这个你不能达到使用标准的画笔在所有。 相反,你必须手工绘制它:

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;



文章来源: Diagonal brush style gives me black area