透明ウィンドウをVBで作成したいのですが、
オブジェクト類は透明ではなくしっかり表示したいと思っています。
例えばラベルの字を表示したとき背景は透明で字だけしっかり写るとか
そういうものって作成可能ですか?
半透明とかじゃなくウィンドウは透明なものを目指しています。
…作成は可能だろうが、したことがない。
たぶんリージョン設定して、ウィンドウの描写イベントを透過にするんだろう。
ええ、その通り可能です。ただし、ラベルはグラフィックオブジェクト(ウィンドウハンドルを持ってない)ものなので、無理です。
透明にしても表示させるには、APIをつかうなりしてスタティックテキストをつかうかなりします。
ここのお隣、DelphiQ&A掲示板の投稿ですが…
http://madia.world.coocan.jp/cgi-bin/DelphiBBS/wwwlng.cgi?print+200402/04020003.txt
こちらで同じことが質問されていますので、参考にしてみてください。
Delphiのコードではありますけど、基本的にVBと変わりないです。
※ 変わりなくない部分について
・HRGN型は、Cardinal型——4バイトの符号なし整数値です。入れ物を用意しておけば十分なので、Long型でいいでしょう。
・CreateEllipticRgn, SetWindowRgn これらがAPIです。
API情報については、おそらくネットですぐに見つかるでしょう。リージョンの使い道は多いそうなので、VBのサンプルも見つかると思いますよ。
気になったんで自分のうちでやってみたんだが、
リージョンの設定が悪いのか、ウィンドウの透過ができていないのか怪しい動きになった。
それなりのAPIとウィンドウズのウィンドウ描写関係のシステムがわからないとできないらしい。
VB6以下なら、Layered Window にしてカラーキーを指定すればOKです。
例えば下記は、フォーム上の「白い部分」を透過させます。(API宣言は省略しています)
'要 Win2000以降
Private Sub Form_Load()
Me.BackColor = vbWhite
SetWindowLongW hWnd, GWL_EXSTYLE, WS_EX_LAYERED
SetLayeredWindowAttributes hWnd, vbWhite, 0&, LWA_COLORKEY
End Sub
# VB.NETの場合は、TransparencyKeyプロパティで設定できたような
# 気がしますが、手元にVisual Studio.NETが無いので試せません。m(_ _)m
おおお!出来ました!
魔界の仮面弁士さんありがとうございました。
ちなみにLabelの背景色も白にすれば、背景も透明になって文字だけが表示されました。どうもです!