- - PR -
コントロールの背景を透明にする方法
| 投稿者 | 投稿内容 | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-19 23:57
「透明」の定義に問題があるのでしょう。しかも、
「コントロールがオーバーラップしたときの透明とは?」に、 ユーザー側の期待と実装側の技術上の問題(特にパフォーマンスコスト) の乖離が見られます。 MSDN Product Feedback Center http://lab.msdn.microsoft.com/productfeedback/SearchResults.aspx?text=Transparency&stype=1&fields=1&type=0&witId=0&pId=0&category=0&os=0&oslang=0&status=0&msstatus=0&resolution=0&chgdays=&validation=0&votes=&voterating=0&workarounds=False&attachments=False _________________ IEEE-CSDP 2004-2007 | ||||||||||||||||
|
投稿日時: 2005-10-20 00:12
えーと、この記事かな? http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=7b0ee12d-e443-4ecf-b3f5-361167470c39
直るのを期待せずに待つべきでしょうか?? | ||||||||||||||||
|
投稿日時: 2005-10-20 00:28
iStationさんへ。
なんだか、こっちの難しそうなほうが先に実装されるかもしれません。 http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=d38cb40e-d5e7-4c37-a741-e2137a88fa99
なんにもしない。ただそれだけ。。。。が、なんで難しいんだろう??? 不思議。 ごめんなさい。愚痴みたいになってしまいましたね。 | ||||||||||||||||
|
投稿日時: 2005-10-20 23:29
例えば、下記によるとTextBox/RichTextBoxなどのコントロールは、.NETによるWin32-EditBoxのWrapで、透明化に対応するリスクが高いようです。
Support Transparent BackColor for RichTextBoxes and TextBoxes - MSDN Product Feedback Center http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=a79072f6-a77a-4b49-b737-696a52cd2be7 次の例では、RichTextBoxを透明化する例(CodeProject)を挙げて、MSに修正を求めていますが、MSもなかなか頑固です。 Transparent Text Boxes & richtextboxes - MSDN Product Feedback Center http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=f429908a-748a-4978-925f-835b184b78c8 ちなみに、参照されているコード例ではちゃんとRichTextBoxの背景が透明化され、コントロールのオーバーラップにも対応できています。 AlphaBlendTextBox - A transparent/translucent textbox for .NET - The Code Project - C# Controls http://www.codeproject.com/cs/miscctrl/alphablendtextbox.asp MSが頑固にも先送りするのは、やはり描画パフォーマンスが問題なのでしょう(背景の透明化、コントロールのフォアグランド描画、そして他のコントロールのオーバーラップを両立するのはパフォーマンスコストが高い。) ところで、ジブさんの「Regionを設定するということで解決する方法」が少し気になるのですが、差し支えなければ参考に教えてもらえないでしょうか? _________________ IEEE-CSDP 2004-2007 | ||||||||||||||||
|
投稿日時: 2005-10-21 10:39
「ユーザコントロールを透明にする」ではないですが、Formならば透明にできます。
以前、子供のゲームで福笑いを作ったときに、コントロールではなくFormを貼って実現しました。参考になれば。 | ||||||||||||||||
|
投稿日時: 2005-10-21 21:20
動的に変化するケースだと難しいということなのでしょうか?
簡単なサンプルを作ってみました。(こんな使い方はしてないんですが、わかりやすそうな例として)
ちなみにフォントサイズを小さくすると汚いです。 えーと。悪い例をサンプルにしちゃいました。 透明なラベルみたいなのはちょっと無理かもしれません。 三角とか楕円とかGraphicsPath.AddXXXXXできるものならなんでもOKなんで 普通に使う分には役立つと思います。
Catsさん。ありがとうございます。たぶん同じやり方かも。 インテリセンス?にひっかからなかったので気づきにくかったです。 | ||||||||||||||||
|
投稿日時: 2005-10-21 22:31
えーと、追加です。
コードを見てみましたが、どうやら背景(コンテナ)のビットマップを取得して書いているだけですね。 alphaBlendTextBox1,2と背景の間にPanelとかをはさんでみてみてください。 マイクロのTransParencyKeyを使ったフォームの透明化はちゃんとやっているみたいです。 後ろにあるフォームを動かしてもちゃんと透明になっている。 [ メッセージ編集済み 編集者: ジブ 編集日時 2005-10-21 22:39 ] [ メッセージ編集済み 編集者: ジブ 編集日時 2005-10-21 23:15 ] | ||||||||||||||||
|
投稿日時: 2005-10-22 18:02
Regionのサンプル有難うございました。
当初の課題はRegionで解決できましたか?
alphaBlendTextBoxのコードを使うと背景が透明化され、またコントロールのオーバーラップに対応できます。 Panelは操作を誤ると該当TextBoxがPanel内部に取り込まれる(Addされる)恐れがありますので注意ください。 PanelにAddされた場合は一度取り出し、該当TextBoxが部分的にPanelに重なるように配置してみてください。 その際に該当TextBoxのZ-orderが最前面になるように設定してください。 _________________ IEEE-CSDP 2004-2007 [ メッセージ編集済み 編集者: iStation 編集日時 2005-10-22 18:06 ] | ||||||||||||||||
