- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:delphi paintbox.invalidate)
delphi paintbox.invalidateによる再描画タイミングの制御について
このQ&Aのポイント
- DelphiのPaintBoxを使用している際に、PaintBox1.Invalidateメソッドを実行すると再描画が行われます。しかし、Button1ClickイベントでlineTo(100,100)が描画されず、Button2Clickイベントでは描画されるという現象が発生しています。これは再描画のタイミングによるものでしょうか?再描画が完了した後にlineTo(100,100)を描画する方法は存在するのでしょうか?
- DelphiのPaintBoxを利用する際に、PaintBox1.Invalidateメソッドを呼び出すと再描画が行われますが、Button1ClickイベントでlineTo(100,100)が描画されず、Button2Clickイベントでは描画されます。つまり、再描画のタイミングの問題があるようです。lineTo(100,100)を描画する前に再描画が完了したことを判定するためのコマンドや関数は存在するのでしょうか?
- DelphiのPaintBoxを使用している際に、PaintBox1.Invalidateメソッドを呼び出すと再描画が行われます。しかし、Button1ClickイベントでlineTo(100,100)が描画されず、Button2Clickイベントでは描画されるという問題が発生しています。再描画が完了した後にlineTo(100,100)を描画するための方法は存在するのでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
# Deliphiは使ってませんが … Invalidateは一般的な実装なら WinAPIのInvalidateRectを呼び出すと思います このInvalidateRectは指定された矩形領域を無効とマーキングするだけでこのAPIで消去されるわけではないのです したがって 1つのプロシージャの中で Invalidate グラフィック描画メソッド または グラフィック描画メソッド Invalidate どちらも結果は同じになると思います ペイントイベントに何も記述がないならせっかく描画してもこのフォームのペイントイベントで上書きされてしまって結果 何も描画されていないような状態になるでしょう 何かのイベントでInvalidateを使うのであれば Paintイベントで描画されることを期待していると考えたほうがいいですよ メモリーDC(裏画面)を使って描画しておきPaintイベントでメモリーDCから実画面へ転送するなんて使い方をします
お礼
とても参考になりました。 事情があってInvalidateを使ってましたが、やっぱりRepaintでやります。 ありがとうございました。