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

解決


Nancy  2004-04-11 08:18:25  No: 8295

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

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

単純に背景を黒にしたいなら、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

onShowじゃ無理ですか?


たかみちえ  URL  2004-04-11 19:47:50  No: 8298

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


Nancy  2004-04-12 23:21:28  No: 8299

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

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加