- - PR -
コントロールの背景を透明にする方法
«前のページへ
1|2|3|4
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-24 20:28
はい。当面の要件は解決しました。
あらたにプロジェクトを起こし、TextBoxを貼り付け、それに一部かぶさるように alphaBlendTextBoxを配置してみましたが、下にあるTextBoxの重なった部分は まったく消えてしまい、フォームのイメージが表示されました。 この挙動はBackColorをTransParentにしたlabelと同じでした。 もちろん、TextBoxだとフォームのイメージすら表示しないわけですし テキストボックスの用途から考えるとこれで十分だし、 標準で透明色をサポートしてほしいというのは当然のことだと思います。 ありがとうございました。 | ||||||||
|
投稿日時: 2005-10-24 22:39
AlphaBlendTextBox自身ではなく、下記アドレスの下部メッセージ欄の末尾
lalachaさんのRe: How to make the richtextbox transparent にあるコードが適切でした。ごめんなさい http://www.codeproject.com/cs/miscctrl/alphablendtextbox.asp#xx997877xx _________________ IEEE-CSDP 2004-2007 [ メッセージ編集済み 編集者: iStation 編集日時 2005-10-24 22:43 ] | ||||||||
|
投稿日時: 2005-10-25 00:16
この記事はAlphaBlendTextBoxをRechTextBoxでも使えるようにするという話ではないのでしょうか? 私の読み違いであればごめんなさい。 そもそもAlphaBlendTextBoxにしても、この記事にしても SetStyle(ControlStyles.SupportsTransparentBackColor, true) をやっているようで その挙動はlabelと同様であろうと思われますがいかがでしょうか? AlphaBlendTextBoxもここで書かれている
を設定した後でSupportsTransparentBackColorを呼び出していたように思います。 完全にコードを把握していないので断定はできませんが イメージ的には、TextBoxやRechTextBoxが独自に描画している部分をなんとかスルーさせるための工夫をたくさんしているように見えました。 .Netのコントロールの実装が、Controlから派生しているにもかかわらず OnPaintBackgroundなどあってないようなものだったりします。 そもそも継承もとのControlの仕様は非常によくできているように見えますし WindowsMessageのレベルで制御しなければならないような仕様ではないはずなんですが 派生先のコントロールの実装となるとそのコントロールが派生されることをまったく考えていないように私には見えています。 そういうわけで、AlphaBlendTextBoxなどが例に出されるように 開発者のストレスがたまっているのかもしれないなと思っています。 それともうひとつ、蛇足かもですが どうやらコントロールの重なり部分についての透明性については 私が考えていたような「書かなければいい」というわけには行かないようです。 OnLayoutを止めてたりとか、いろんな実験をしてみてわかったのですが どうやらフォームなどのコンテナは自分が持つ子コントロールのリージョンを除外して 自分のリージョンとしているようです。 この工夫はパフォーマンス上重要なものであるように思えます。 フォームのTransparencyKeyを設定した状態でOnPaintで描画してみました。 後ろにあるフォームを動かせば、OnPaintが呼ばれると思い込んでいましたが 背景が変わってもいっこうに呼ばれない。 つまり、下から順番に重ね描きしているのではなく ほんとに変更された部分のみ描くということのようです。 そうなると上に乗っているコントロールは自分自身の背景を自分で書かなければならない ということも必然であるように思えてきます。 特にコントロールの場合は何層にも重なる可能性が高いですから うーん、なるほどなぁと、再認識しているところです。 なかなか奥の深い問題のようで、軽々しく「そんな簡単なことがなんでできないんだろう」 なんて書いてしまったことを恥ずかしく思っています。 徒然書いてしまいました。失礼しました。 | ||||||||
|
投稿日時: 2005-10-25 07:22
このコードは、AlphaBlendTextBoxとは別物です。 AlphaBlendTextBoxのソースを使用しないでも、普通のRichTextBoxを透明化することができます。 _________________ IEEE-CSDP 2004-2007 [ メッセージ編集済み 編集者: iStation 編集日時 2005-10-25 19:26 ] | ||||||||
«前のページへ
1|2|3|4
