C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: Transparencykey OSの違い?


(過去ログ 137 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■80483 / inTopicNo.1)  Transparencykey OSの違い?
  
□投稿者/ ヘル (1回)-(2016/07/21(Thu) 15:22:15)

分類:[.NET 全般] 

開発環境:Windows7 Professional SP1 32bit
VisualBasic 2010 Express(VB.NET)
使用環境:Windows7 EnterPrize SP1 64Bit


初めまして。
他の投稿者様の投稿を見て度々勉強させて頂いております。
Windowsフォームにて、Form1の上にPicturebox1、そのまた上にLabel1を置いた状態で

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim myBitmap As Bitmap(Me.GetType(), "砂浜.png")
Form1.Transparencykey = Violet
PictureBox1.Image = MyBitmap
Label1.Backcolor = Yellow
End Sub

Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click
Label1.Backcolor = Violet
End Sub


上記のコード「Label1をクリックするとその幅分だけ穴が開く(透明になる)」という物を作りました。

しかし、開発環境では問題無く動くのですが、冒頭の使用環境ではTransparencykeyが働いて無く(?)
透明になるはずの部分はVioletのままでした。
趣味で作ってるのですが原因が分からないまま一か月経ってしまいました。

どなたかご教授宜しくお願いします。
引用返信 編集キー/
■80484 / inTopicNo.2)  Re[1]: Transparencykey OSの違い?
□投稿者/ 魔界の仮面弁士 (780回)-(2016/07/21(Thu) 16:07:04)
No80483 (ヘル さん) に返信
> 開発環境では問題無く動くのですが、冒頭の使用環境ではTransparencykeyが働いて無く(?)
> 透明になるはずの部分はVioletのままでした。

画面の色深度が、開発環境は 24 bit あるいは 16bit カラーで、
実行環境は 32bit カラーだったりしませんか?


> 趣味で作ってるのですが原因が分からないまま一か月経ってしまいました。

32bit カラーの場合、TransparencyKey が動作しない可能性があります。
回避策についてはこちらをご覧ください。

https://support.microsoft.com/en-us/kb/822495
http://dobon.net/vb/dotnet/form/transparencykey.html


そのほか、Windows 2000 未満の環境で実行した場合も
TransparencyKey は動作しません。今更使うことは無いでしょうけれども。
引用返信 編集キー/
■80486 / inTopicNo.3)  Re[2]: Transparencykey OSの違い?
□投稿者/ ヘル (2回)-(2016/07/21(Thu) 21:54:43)
No80484 (魔界の仮面弁士 さん) に返信
御返事ありがとうございます。
参考URL等を見て色々やってみました。

> 画面の色深度が、開発環境は 24 bit あるいは 16bit カラーで、
> 実行環境は 32bit カラーだったりしませんか?

確かめた所、開発環境、実行環境共に色深度は32bitでした。

> 32bit カラーの場合、TransparencyKey が動作しない可能性があります。
> 回避策についてはこちらをご覧ください。


回避策を組んでやってみた所、ちゃんと動作しました。

が、お伝えしていませんでした…
開発環境ではForm1のOpacityと組み合わせて使っていまして、
Opacity100ではしっかり透明に、1でも下がると依然無効になりました。
開発環境では問題無く動くのですが、実行環境ではOpacity絡むと未だ駄目ですね…
後出しで申し訳ございません。
引き続き調べてみます。

Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim myBitmap As Bitmap(Me.GetType(), "砂浜.png")
  Dim transColor As Color = Color.Violet
  Me.BackColor = transColor
  Me.TransparencyKey = transColor
Form1.Transparencykey = Violet
PictureBox1.Image = MyBitmap
Label1.Backcolor = Yellow
End Sub

Private Sub Label1_Click(sender As System.Object, e As System.EventArgs) Handles Label1.Click
Label1.Backcolor = Violet
End Sub

引用返信 編集キー/
■80496 / inTopicNo.4)  Re[3]: Transparencykey OSの違い?
□投稿者/ ito (27回)-(2016/07/22(Fri) 15:50:40)
No80486 (ヘル さん) に返信
> が、お伝えしていませんでした…
> 開発環境ではForm1のOpacityと組み合わせて使っていまして、
> Opacity100ではしっかり透明に、1でも下がると依然無効になりました。
> 開発環境では問題無く動くのですが、実行環境ではOpacity絡むと未だ駄目ですね…
> 後出しで申し訳ございません。
> 引き続き調べてみます。
これは、OpacityとTransparencykeyどちらかしか使えない仕様です。
詳細はAPIになりますが、以下を参照ください。
https://msdn.microsoft.com/ja-jp/library/cc411043.aspx

引用返信 編集キー/
■80497 / inTopicNo.5)  Re[3]: Transparencykey OSの違い?
□投稿者/ 魔界の仮面弁士 (781回)-(2016/07/22(Fri) 18:59:51)
2016/07/22(Fri) 19:05:33 編集(投稿者)

No80486 (ヘル さん) に返信
> 開発環境ではForm1のOpacityと組み合わせて使っていまして、
> Opacity100ではしっかり透明に、1でも下がると依然無効になりました。

No80496 でも指摘されていますが、そういう仕様です。

.NET Framework の制限というよりも、OS の機能(Layerd Window)として
SetLayeredWindowAttributes API の仕様によるものですね。

https://msdn.microsoft.com/ja-jp/library/cc411043.aspx
http://rucio.cloudapp.net/ThreadDetail.aspx?ThreadId=255


全体を半透明にしつつ、フォームの一部を完全透明(刳り貫き)に
したいのであれば、Region プロパティを使ってみては如何でしょう。
http://dobon.net/vb/dotnet/form/formregion.html


あるいは、UpdateLayeredWindow API を使って表現する手もあります。
この方法であれば、部分的に透明度を変えるような Layerd Window も作れます。
https://msdn.microsoft.com/ja-jp/library/cc364847.aspx

実際に動くサンプルが必要ならこのあたり。探せば他にもあるはず…。
http://blogs.wankuma.com/youryella/archive/2007/10/15/102151.aspx
http://www.codeproject.com/Articles/1822/Per-Pixel-Alpha-Blend-in-C
引用返信 編集キー/
■80791 / inTopicNo.6)  Re[4]: Transparencykey OSの違い?
□投稿者/ ヘル (3回)-(2016/08/11(Thu) 10:17:08)
魔界の仮面弁士 様
ito 様
半月程出張で質問を立てたことを失念しておりました。

まずRegionプロパティから試していきたいと思います
御助力頂きありがとうございました!
引用返信 編集キー/
■80792 / inTopicNo.7)  Re[5]: Transparencykey OSの違い?
□投稿者/ ヘル (4回)-(2016/08/11(Thu) 10:21:28)
No80791 (ヘル さん) に返信
解決済みのチェックを忘れていました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -