フォーム起動時にキャンバスを描画するには?

解決


Nancy  2004-04-11 08:18:25  No: 8295  IP: [192.*.*.*]

Nancyです。

最近、Delphiを勉強し始めました。

メインフォーム起動時に
フォームにキャンバスの背景を真っ黒にしたいのですが、うまくいきません。

以下のコードを書きました。

procedure TfrmMain.FormCreate(Sender: TObject);
begin    
     // 先ず、フォームにキャンバスの背景を真っ黒にする
     Canvas.Brush.Color := 0;
     Canvas.Rectangle(10,10,600,500);

end;

どうしたらいいのでしょう?

編集    削除
jok  2004-04-11 08:31:31  No: 8296  IP: [192.*.*.*]

> メインフォーム起動時に
> フォームにキャンバスの背景を真っ黒にしたいのですが、うまくいきません。

単純に背景を黒にしたいなら、Color プロパティーを clBlack にするだけです。

そうではなく、起動時だけ黒にしたいなら、OnCreate イベントハンドラでは
できません。なぜなら、このイベントは、背景が塗られるまえに起こるからです。
代わりに、OnPaint イベントハンドラにコードを書きます。

type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
  private
    { Private 宣言 }
  public
    FlagFirst:Boolean;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormPaint(Sender: TObject);
begin
  if not FlagFirst then begin
    Canvas.Brush.Color := clBlack;
    Canvas.FillRect(ClientRect);
    FlagFirst := true;
  end;
  // その他の描画コードがあればここに書く
end;

FlagFirst は起動時に一度だけ実行するのに必要です。

編集    削除
るるとん@K  2004-04-11 19:23:25  No: 8297  IP: [192.*.*.*]

onShowじゃ無理ですか?

編集    削除
たかみちえ  URL  2004-04-11 19:47:50  No: 8298  IP: [192.*.*.*]

OnShowは表示寸前に発生しますので、ここでCanvasをいじっても無駄です。

編集    削除
Nancy  2004-04-12 23:21:28  No: 8299  IP: [192.*.*.*]

jokさま、るるとんさま、たかみちえ様、ありがとうございます。

仰せの通り見事にうまくいきました。

boolean型変数はデフォルトでfalseみたいですね。
フラグの処理まで指摘していただきありがとうございます。

編集    削除