1

イメージをペイント ボックスにペイントする関数は、2 つの場所から呼び出されます。TPagecontrol pagechange から呼び出された場合は正常に動作しますが、form.formresize(….) から呼び出された場合、イメージはペイントされますが、その直後にペイント ボックスが再ペイントされます。完全に白くなります。この悪意がどのシーケンスから来たのかはわかりません ---

procedure TForm.FormResize(Sender: TObject);
begin
     //  frist image shown and then re painted white ???
     PaintImage2PaintBox(……….);
end;  


procedure TForm.pgc_mainmenuChange(Sender: TObject);
begin
     //  works fine as  expected  after pagecontrol  tab change 

      PaintImage2PaintBox(……….);
end;;

procedure PaintImage2PaintBox(……….);
begin
        ///  draw into a PaintBox
end;
4

1 に答える 1

7

OnPaintペイント ボックスのイベント ハンドラを自分で呼び出すことはできません。そうすると、ペイント ボックス キャンバスが適切に準備されません。ペイント ボックスを強制的に再描画するには、InvalidateまたはRepaintメソッドを呼び出す必要があります。このような:

PaintBox1.Invalidate;

また

PaintBox1.Repaint;

を呼び出すInvalidateと、非同期の再描画が行われます。コントロールはダーティとしてマークされ、メッセージ キューが次に空になると、WM_PAINTメッセージが合成され、コントロールが再描画されます。

を呼び出すRepaintと、同期ペイント サイクルが強制されます。つまり、ペイントが実行され、Repaint関数が返されます。

同期再描画を強制する特別な理由がない限り、 を呼び出すことをお勧めしますInvalidate

@Sertac は、コメントで、描画コードがOnPaintハンドラーにないことを示唆しています。もしそうなら、それはさらに大きな問題です。ペイント ボックス イベントに関連付けられたイベント ハンドラに、すべてのペイント コードを配置する必要がありますOnPaint

于 2012-12-19T19:42:48.733 に答える