2012-02-28 1 views
2

私はBCB6を使用していますが、それは、私はちょうど私のフォームに、このようなハンドラを追加した場合、デルファイと同じでなければなりません:、私はDoubleBufferedの利益をすることを得ることはありませんDelphi/Builder/VCL、ダブルバッファリングを失うことなくフォームのWM_PAINTをオーバーライドしますか?

void __fastcall TForm1::WndProc(TMessage &Message) 

とWM_PAINTを処理TWinControlが提供します。 DoubleBuffered設定(TWinControlが作成するメモリビットマップへの別名書き込み)を尊重して、フォーム上にカスタムペインティングを行う方法はありますか? DoubleBufferedが適用されますどこcontrols.pasで

この機能は次のとおりです。

procedure WMPaint(var Message: TWMPaint); message WM_PAINT; 

これは、メモリのビットマップを作成し、もう一度自分自身を呼び出します。だから、Message.DCが0のときにその関数を呼び出す方法が必要なので、ビットマップを作成してからそれをやり直してはいけませんが、WMPaintは仮想ではなく、PaintHandlerもありませんこれにフックする方法が見えていない。

私は自分自身でダブルバッファリングを作成することができますが、可能であれば既にそこにあるものを使用したいと思います。私はこのデザインを、私のフォームだけでなく、他のコントロールにも移植する予定です。

+0

Delphi7のフォーム(BCBにはわからない)にはOnPaintイベントがありますが、バッファされていないので、単純なTBitmapを使って自分で行う必要があります。 – Dampsquid

答えて

5

WM_PAINTメッセージを処理するのではなく、Paintメソッドをオーバーライドします。そうすれば、ダブルバッファリングのための組み込みのメカニズムは引き続きアクティブになりますが、ペイントをカスタマイズすることができます。

+0

OMG、私はそれを逃したとは信じられません。今すぐ素晴らしい作品! – eselk

関連する問題