2

我想用这个代码在画布上画一个对角线:

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

但结果是一个黑匣子。

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

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

感谢每一个建议


抱歉缺少信息,我扩展了它:此过程使用 TMetaFileCanvas 进行绘制。在正常形式上,我可以绘制任何画笔样式,例如 TShape ...

4

1 回答 1

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;

产生结果

截屏

(不要忘记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;

截屏

于 2012-10-03T13:58:13.580 回答