我想使用以下代码在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 ......
答案 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;