2

次のコードを使用して、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 のような任意のブラシ スタイルを描画できます...

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 に答える