web-dev-qa-db-ja.com

Monoフォームのウィンドウの不透明度はサポートされていますか?

Monoを使用してマルチプラットフォームプログラムを開発していますが、フォームの不透明度のサポートが必要です。基本的に、ウィンドウを半透明にする機能。これは、Window.Form.Opacityプロパティを0.5に設定することにより、ウィンドウで正常に機能します。ただし、Ubuntu 14.04では、そのままでは機能しません。 UnityとCompizを実行していると思います。デフォルトのUbuntuセットアップに付属しているものは何でも。

Mono FAQによると、これはサポートされるべきです:

Windowsアルファブレンドを作成するにはどうすればよいですか? (トランスペアレント)

MonoのWinform実装は、基盤となるウィンドウシステムが透明性をサポートしている限り、ウィンドウの透明性をサポートします。

Unix/X11ユーザーの場合、これは、サーバーでCOMPOSITE拡張機能を有効にし、xcompmgrなどの合成マネージャーを実行している必要があることを意味します。

GenToo Linux Wikiには、透明性サポートのためにXorgサーバーをセットアップする方法についての良い説明があります。

http://www.mono-project.com/docs/faq/winforms/

彼らが指すリンクは死んでいる。

私はLinuxを使い始めたばかりですが、合成ウィンドウマネージャーを起動して実行するために必要なすべての部分を理解しているとは限りません。それに、もう持っていませんか(compiz?)

Winformの不透明度を機能させるにはどうすればよいですか?

編集:私のテストプログラムは基本的に、スクロールバーの値に基づいてフォームの不透明度を設定するための変更時にイベントハンドラーを持つスクロールバー(0から100まで)を持つフォームです。これがその中身です:

private void trackBar1_Scroll(object sender, EventArgs e)
{
    double opacity = ((double)trackBar1.Value) / 100;
    this.Opacity = opacity;
}

Windowsでうまく動作します。

2
Cubicle Dragon

compizで必要なものはすべて揃っています。

設定Window.Form.OpacityはXウィンドウのプロパティを設定する必要があります_NET_WM_WINDOW_OPACITYウィンドウ上;

Ubuntuパーツが機能するかどうかをテストするには、次の低レベルコマンド(ウィンドウをクリック)を使用して、不透明度を手動で0.5に設定してみてください。

$ xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY 0x7fffffff

そして完全な不透明に戻る:

$ xprop -f _NET_WM_WINDOW_OPACITY 32c -set _NET_WM_WINDOW_OPACITY 0xffffffff


設定方法の1つWindow.Form.Opacity失敗する可能性があるのは、間違った(ただし密接に関連する)ウィンドウを選択し、そこにプロパティを設定することです。


あなたのコメントによると、アイデアは正しかったです。追加:

他のソフトウェアにも存在する特定のエラーだと思います:透明にするために選択されたウィンドウは、ウィンドウデコレータとアプリケーションのXウィンドウがどのように関連/ネストされているかに基づいて、いくつかのヒューリスティックによって発見されます。 WMの親を変更することの導入により、領域に多くの変更がありました-嬉しいことに、経験則はまだ機能しています。私が理解していることから、これはヒューリスティックが失敗したケースなので、近くの見えないウィンドウが透明になります...

このバグを見て、問題の詳細を理解してください。 transsetが_NET_WM_WINDOW_OPACITYプロパティを変更できません

1
Volker Siegel