1

グラフを描きたいのですが、その中心に四角形を描きます。Delphi 7 を使用すると、次のようになります。

with graphform.canvas do begin
    brush.color:=clwhite;
    brush.style:=bssolid;
    pen.color:=clwhite;
    rectangle(1,y0,639,y0-341);
end;

//short wait while other things happen

graphform.waitlab.Invalidate;

これにより、ひどいフラッシュが発生します。白い四角形が waitlab を洗い流し、短い待機の後、waitlab が再描画されます。waitLab は、大きなフィールドの中央にある小さな長方形です。

ウィンドウの描画をオフにすると、ウィンドウはまったく描画されません。ウィンドウの描画をオフにしてから再度オンにしてウィンドウを再描画すると、元の問題が発生します。長方形を白くペイントしてから色を付けています。

キャンバス コードはペイント イベント ハンドラで実行されます(実行する必要があります)。白のフィールドは Delphi コントロールではないため、フォームへのすべてのペイント メッセージで明示的に再描画する必要があります。waitlab は、無効化後に Delphi が再描画する Delphi コントロールです。無効化コード行がペイント イベント ハンドラにありません。タイト ループが発生します。

しかし、コードは、フォームに描画された他のもののいくつかを変更する通信イベントでも非同期に実行され、この描画コードを直接呼び出します。

技術的な解決策があるかどうか、またはプログラムロジックの解決策があるかどうかはわかりません。何を指示してるんですか?

4

1 に答える 1