プロが教えるわが家の防犯対策術!

まず、Form1の上にimage1を配置し、その奥にTGraphicControlを継承した描画コンポーネントを置いています。
そして、image1のTransparentを設定し、描画が見えるようにします。
つまりimage1が窓枠で、ガラス(透過)越しに風景の描画が見えると考えてください。

そこで、描画コンポーネント側でTGraphicControl.Canvas.Drawで風景の描画を行います。すると、描画したものが窓枠より手前に表示されてしまい、窓枠&透過の意味が無くなってしまいました。

image1の下に普通のTimageを置き、Timage.Canvas.Drawで行うと、異常は起きません。何故なのでしょうか・・・?

A 回答 (1件)

こんにちは。

私もあまりよくわかっていないのですが、
描画コンポーネント側のTGraphicControl.Canvas.Drawで描画する場所
が問題になってきます。

TGraphicControlから仮想関数Paintをオーバーライドして出来たPaint関数内に、Canvas.Drawを行わないと、ウィンドウズのOnPaintイベント(WM_PAINT)に反応しないので、上面に表示します。
TGraphicControlから派生したコンポーネントにのOnPaintイベントがあれば、
そこに、Canvas.Drawを行うとうまくいくと思います。

答えになっていないかもしれませんが宜しくお願いします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/12/13 20:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!