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

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

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

Re[2]: 透過ウインドウのサイズ変更後の振る舞い


(過去ログ 139 を表示中)

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

■81998 / inTopicNo.1)  透過ウインドウのサイズ変更後の振る舞い
  
□投稿者/ qbf2 (1回)-(2016/11/28(Mon) 14:06:09)
qbf2 さんの Web サイト

分類:[.NET 全般] 

某知恵袋に投げた質問ですが、どうも埒があかないようなので、ちょっとマルチポストっぽいですけどお願いします。

フォームの透明色にBackcolorを設定して、後ろが覗ける「窓」みたいなフォームを作りました。「窓枠」のなかの画像を処理(OCR)にかけてごにょごにょ、したかったのです。ところが、このフォームをいじっていると時々触れなくなる(フォームの透明でない部分もマウスイベントを受け取ってない感じ)ことがあって、いろいろやってみると、
・フォームのタイトルバーをダブルクリックして最大化
・最大化したタイトルバーをダブルクリックして元のサイズに戻す
と、フォームのタイトルバーやフレームをクリックしてもそのフォームが選択出来なくなっていることがわかりました。
私の手元では4台のPC(win7,8.1,8.1,10 全て64bit版)で、以下のC#のソースをcscでコンパイルしたもので同様の症状が再現出来ました。.NetFrameworkも2.0から4.6までやってみましたけど同様。(実際のターゲットはWin8.1, .Net4.6です)
私のてもとでは100%でしたが、某所の回答で試していただいた方はその症状がでなかったそうです。resizeのイベントを受けて透明色を一時的に変更、タイマーで戻すとかもやってみましたが、元のサイズに戻したあと透明で無い間はいじれましたけれど透明にした途端同様の現象に陥りました。なにか「正しいやり方」があったりするのか、対策などご存知の方いらっしゃいませんでしょうか。

//https://msdn.microsoft.com/ja-jp/library/ms229597(v=vs.110).aspx を参考に。
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

public class Form1 : Form{
public Form1() {
this.TransparencyKey=this.BackColor;
}

[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new Form1());
}
}
引用返信 編集キー/
■82006 / inTopicNo.2)  Re[1]: 透過ウインドウのサイズ変更後の振る舞い
□投稿者/ Jitta (229回)-(2016/11/29(Tue) 10:34:07)
No81998 (qbf2 さん) に返信

再現しました。
FormのBackColorをGrayなどに変更して、TransparencyKeyにも同じものを指定すると、okでした。
引用返信 編集キー/
■82007 / inTopicNo.3)  Re[1]: 透過ウインドウのサイズ変更後の振る舞い
□投稿者/ Hongliang (473回)-(2016/11/29(Tue) 11:22:16)
No81998 (qbf2 さん) に返信
> 某知恵袋に投げた質問ですが、どうも埒があかないようなので、ちょっとマルチポストっぽいですけどお願いします。

> 私のてもとでは100%でしたが、某所の回答で試していただいた方はその症状がでなかったそうです。

濁す必要がどこにもなさそうですが。
むしろリンクを張っていただけると議論の流れがわかりやすくなって助かります。


私の環境だと、BackColorにR=240, B=240(Gは任意値)の色を設定した際に状況が再現しますね。
Form::BackColorの既定値SystemColors.Controlは私の方だと[240, 240, 240]となっており、ちょうど条件に当たるため、BackColorそのままの場合に発症します。
// 他にもand/or条件があるかも知れないけど検証してません。
引用返信 編集キー/
■82009 / inTopicNo.4)  Re[2]: 透過ウインドウのサイズ変更後の振る舞い
□投稿者/ Jitta (230回)-(2016/11/29(Tue) 14:21:07)
最大化した時の透明部分が残ってる。
フォームにパネルはって、そのパネルの色を変えて透過する。
すると、最大化した時に透過ではない部分にあったところはさわれる。
フォームの縁ダブルクリックだけでなく、最大化/元の大きさボタンでも同じ。

フィードバック案件かなぁ
引用返信 編集キー/
■82010 / inTopicNo.5)  Re[1]: 透過ウインドウのサイズ変更後の振る舞い
□投稿者/ 魔界の仮面弁士 (992回)-(2016/11/29(Tue) 14:51:33)
2016/11/29(Tue) 14:54:57 編集(投稿者)

No81998 (qbf2 さん) に返信
> 対策などご存知の方いらっしゃいませんでしょうか。
赤成分と青成分が同じ色の場合に発生するようです。
http://stackoverflow.com/questions/25471899

たとえば当方では、下記いずれも現象が再現しています。
 this.TransparencyKey = this.BackColor = Color.White;
 this.TransparencyKey = this.BackColor = Color.Gray;
 this.TransparencyKey = this.BackColor = Color.Fuchsia;
 this.TransparencyKey = this.BackColor = Color.Black;
 this.TransparencyKey = this.BackColor = Color.FromArgb(1, 0, 1) ;


> 某所の回答で試していただいた方はその症状がでなかったそうです。
画面の色深度が、24bit または 16bit カラーだったのでは無いでしょうか。
たとえば当方では、32bit カラーの場合のみ再現しました。

https://support.microsoft.com/en-us/kb/822495


ただし 32bit カラーでも、Aero が無効な場合には再現しません。


---
追記:

.NET 1.1 と .NET 2.0 でも違いがあるかもしれません。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=39062&forum=7
引用返信 編集キー/
■82011 / inTopicNo.6)  Re[2]: 透過ウインドウのサイズ変更後の振る舞い
□投稿者/ qbf2 (2回)-(2016/11/29(Tue) 21:23:24)
Hongliangさん
わかりにくくてすみません。元URLは一応"Webサイト"のところに貼ったのですが、明らかで無かったですね。

皆々様
なるほど...色が関係する、と。黒とか白は(あまり期待せず)試していたのですが、それじゃ逃げられない条件だったんですね。
#まぁ、いわゆる「不具合」というか、地雷を踏んだみたいな?


今回はとにかく透明になればいいので、RGBのバラけた適当な色を付けて(というと透明に対して変な感じだけど)誤魔化します。

ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -