パネルの半透明

タグの編集
投稿者 しょう  () 投稿日時 2014/10/29 22:22:10
vb2013でプログラムしています。特定のアプリを立ち上げるランチャーのようなものです。
フォームの背景に画像を表示していますが、その一部だけを半透明(薄い白っぽい)にしたいと思います。パネルを配置してそれを半透明にしたいです。理由は、タイトルバーのないフォームを作り、ウィンドウをドラッグできるようにしていますが、上のほうだけドラッグ可能にし、パネルのある所はドラッグできないからです。ネットで調べてみましたがわかりませんでした。完全に透明にするにはプロパティをいじればできましたが、半透明というのがわかりませんでした。どなたか教えていただけませんか?
投稿者 るきお  (社会人) 投稿日時 2014/10/29 22:40:35
タイトルバーを使わずにフォームをドラッグできるようにするのに、半透明を利用する必要はありません。

サンプルをこちらで公開しているので参考にしてください。
http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample067MoveForm.htm

この例を応用すれば特定のコントロールにタイトルバーのようなドラッグ機能をつけることもできます。

次の例ではPanel1をタイトルバーのようにドラッグしてウィンドウを移動できます。
Public Class Form1
    Private Declare Function SendMessage Lib "User32.dll" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As IntegerByVal wParam As IntegerByVal lParam As IntegerAs Long
    Private Declare Sub ReleaseCapture Lib "User32.dll" ()

    Const WM_NCLBUTTONDOWN = &HA1
    Const HTCAPTION = 2

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Panel1.BackColor = Color.Blue
    End Sub

    Private Sub Panel1_MouseMove(sender As Object, e As MouseEventArgs) Handles Panel1.MouseMove
        If e.Button = MouseButtons.Left Then
            Call ReleaseCapture()
            Call SendMessage(Me.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
        End If
    End Sub
End Class
投稿者 しょう  () 投稿日時 2014/10/29 23:31:23
ありがとうございます。説明不足だったかもしれませんが、とにかくパネルを半透明にする方法が知りたいのです。それと「Panel1をタイトルバーのようにドラッグしてウィンドウを移動できます」は参考にさせていただきます。
投稿者 るきお  (社会人) 投稿日時 2014/10/29 23:42:48
パネルを半透明にすることはできません。
目的を教えてもらえれば別の方法を提案できるかもしれません。

>理由は、タイトルバーのないフォームを作り、ウィンドウをドラッグできるようにしていますが、上のほうだけドラッグ可能にし、パネルのある所はドラッグできないからです
このように書いてあったので、目的は、特定の箇所(上のほう)によってウィンドウをドラッグできるようにすることかと思いました。
投稿者 しょう  (社会人) 投稿日時 2014/10/30 03:48:44
ありがとうございます。
フォームには背景画像が表示されていますが、一部を半透明にしたいので、四角や、丸の半透明なものを上に重ねたり、半透明にしたくない部分を、四角や丸の透明なものを上に重ねたいのです。
例えば、四角く半透明にした中に(======)の四角の左右が半円を透明で重ねるというのがしたいです。
投稿者 るきお  (社会人) 投稿日時 2014/10/30 12:56:08
書いてあることの意味がよくわかりません。
1.わかったこと
1-1.フォームには背景画像が表示されている。
1-2.一部を半透明にしたい
1-3.(半透明にしたいので)四角や、丸の半透明なものを上に重ねたい。

2.意味がわからなかったこと
2-1.(半透明にしたいので)半透明にしたくない部分を、四角や丸の透明なものを上に重ねたいのです。
2-2.例えば、四角く半透明にした中に(======)の四角の左右が半円を透明で重ねるというのがしたいです。 

2-1と2-2は日本語がわからないです。「てにをは」 がおかしいように思います。


1-3は文の意味はわかるのですが、背景画像を半透明にするために、なぜ四角や丸の半透明なものを重ねるという発想になるのかはわからないです。

なお、「半透明」とは何を指しているかもはっきりさせた方が良いです。


半透明パターンA
フォーム自体を半透明にして裏のウィンドウやデスクトップがうっすら見えている状態にしたい。

この場合フォームのOpacityプロパティを使用します。ただし、こちらは領域単位の微調整はできません。

半透明パターンB:
フォームの上の画像や図形同士を半透明にして重なった状態にしたい。
通常、フォームは灰色の背景色を持っています。
この上の画像を半透明にすると、フォームの地の灰色がうっすら見えることになります。


この場合、一般論ですが、半透明については説明しているサンプル・記事を紹介します。

6-3.透明・半透明
http://homepage1.nifty.com/rucio/VBStandard/vbstandard1.htm

画像を半透明で重ねるサンプル
http://homepage1.nifty.com/rucio/main/dotnet/Samples/Sample139ImageAlphaBlend.htm
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2014/10/30 14:39:42
> フォームの背景に画像を表示していますが、その一部だけを半透明(薄い白っぽい)にしたいと思います。パネルを配置してそれを半透明にしたいです。

Panel に拘らないのであれば、RectangleShape というものもあります。



> 例えば、四角く半透明にした中に(======)の四角の左右が半円を透明で重ねるというのがしたいです。 

「透明で重ねる」というのは、どういった状態を想定していますか?
半透明ならいざ知らず、透明(全透過)なものを上に重ねたのなら、
その部分の見た目は何も変わらないと思うのですが…。

どういう結果を求めているのか良く分からないので、
結果のイメージを描いてもらえると助かります。


もし、フォームの一部を部分的に半透明にしたいという意図なのであれば
UpdateLayeredWindow API について調べてみて下さい。
http://dobon.net/vb/bbs/log3-44/26446.html
投稿者 しょう  (社会人) 投稿日時 2014/10/30 21:18:03
ありがとうございます。RectangleShapeですか。まさにそのイメージです。
ところで、VisualBasic.PowerPacksが見つからないのですが、Expressバージョンでは使えないのでしょうか?使うにはどうすればいいのでしょうか?
投稿者 しょう  (社会人) 投稿日時 2014/11/1 20:31:28
事故解決いたしました。パワーパック入手してうまくいきました。みなさまどうもありがとうございました。