Delphi 对角线画笔风格给我黑色区域

Delphi 对角线画笔风格给我黑色区域,delphi,canvas,styles,brush,Delphi,Canvas,Styles,Brush,我想用以下代码在画布上画一个对角叉: InFlateRect(r, -1, -1); Canvas.Brush.Color := clYellow; Canvas.Brush.Style := bsFDiagonal; Canvas.Pen.Color := clRed; //Pen.Style := psClear; Canvas.Rectangle(r); 但结果是一个黑匣子 如果我删除样式更改,我会得到一个正常的纯黄色区域 为什么矩形用这个代码是黑色的 谢谢你的建议 很抱歉,信息丢失,

我想用以下代码在画布上画一个对角叉:

InFlateRect(r, -1, -1);
Canvas.Brush.Color := clYellow;
Canvas.Brush.Style := bsFDiagonal;
Canvas.Pen.Color := clRed;
//Pen.Style := psClear;
Canvas.Rectangle(r);
但结果是一个黑匣子

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

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

谢谢你的建议


很抱歉,信息丢失,我将其扩展为: 此过程使用TMetaFileCanvas进行绘制。在正常的形式,我可以画任何画笔风格,如T形

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;
产生结果

(不要忘记在表单的
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;

您的代码在浅灰色背景(form.color)上生成红色边框和黄色斜线(delphi 7,win xp)什么是brush.width或pen.width或类似的东西?哎呀,我搞砸了TPen.style您在画什么设备?并非所有设备都支持所有画笔或笔样式。设备的另一个问题是:阴影画笔图案始终使用设备坐标,而不是逻辑,因此小像素设备(例如打印机)可能会产生奇怪的结果