• 締切済み

【Delphi】 Canvasへの描画について疑問

まず、Form1の上にimage1を配置し、その奥にTGraphicControlを継承した描画コンポーネントを置いています。 そして、image1のTransparentを設定し、描画が見えるようにします。 つまりimage1が窓枠で、ガラス(透過)越しに風景の描画が見えると考えてください。 そこで、描画コンポーネント側でTGraphicControl.Canvas.Drawで風景の描画を行います。すると、描画したものが窓枠より手前に表示されてしまい、窓枠&透過の意味が無くなってしまいました。 image1の下に普通のTimageを置き、Timage.Canvas.Drawで行うと、異常は起きません。何故なのでしょうか・・・?

みんなの回答

  • mam_00
  • ベストアンサー率50% (5/10)
回答No.1

こんにちは。私もあまりよくわかっていないのですが、 描画コンポーネント側のTGraphicControl.Canvas.Drawで描画する場所 が問題になってきます。 TGraphicControlから仮想関数Paintをオーバーライドして出来たPaint関数内に、Canvas.Drawを行わないと、ウィンドウズのOnPaintイベント(WM_PAINT)に反応しないので、上面に表示します。 TGraphicControlから派生したコンポーネントにのOnPaintイベントがあれば、 そこに、Canvas.Drawを行うとうまくいくと思います。 答えになっていないかもしれませんが宜しくお願いします。

pythian
質問者

お礼

ありがとうございます。コンポーネントのソースを見ると、Paint関数にてCanvas.Drawを行っていました。 (正解なのでは?と思ったのですが・・・) TImageを置いてCanvas.Drawすると発生しないので、ますますわからなくなってしまいました・・・。(^^; もう少し悩んでみます。