「Xamarin.Macでシステムステータスバーにアイコンを表示する」の版間の差分
imported>Mono Book |
Administrator (トーク | 投稿記録) |
||
| (4人の利用者による、間の9版が非表示) | |||
| 1行目: | 1行目: | ||
[[Mac OS X]] | [[Mac OS X]]の[[システムステータスバー]]([[Windows]]でいう[[タスクトレイ]])に[[アイコン]]を表示したい。 | ||
[[ファイル:システムステータスバー.png|none|Mac OS Xのシステムステータスバー]] | [[ファイル:システムステータスバー.png|none|Mac OS Xのシステムステータスバー]] | ||
== | == 実装例 == | ||
NSStatusBar. | NSStatusBar.SystemStatusBar以下にCreateだのRemoveだのといった[[インスタンス]]を生成したり削除したりする静的メソッドがある。 | ||
[[システムステータスバー]]に[[アイコン]]を表示するにはこのメソッド群で作ったインスタンスのImageプロパティにNSImageをぶち込んでやればよい。 | |||
<source lang="csharp"> | <source lang="csharp"> | ||
| 23行目: | 23行目: | ||
statusItem.Image = new NSImage(Path.Combine(NSBundle.MainBundle.BundlePath, "Contents", "Resources", "CDx18.png")); | statusItem.Image = new NSImage(Path.Combine(NSBundle.MainBundle.BundlePath, "Contents", "Resources", "CDx18.png")); | ||
// | // アイコンがダブルクリックされたらこのアプリを終了する | ||
statusItem.DoubleClick += (object sender, EventArgs e) => { | statusItem.DoubleClick += (object sender, EventArgs e) => { | ||
NSApplication.SharedApplication.Terminate(this); | NSApplication.SharedApplication.Terminate(this); | ||
| 60行目: | 60行目: | ||
</source> | </source> | ||
== | === メニューのセパレータ === | ||
システムステータスバーに表示するアイコンサイズは18pxにするとピッタリらしい。少し余裕をみて16pxでもいいような気がする。まるで[[X68000]]やらの[[スプライト]] | NSMenuItem.SeparatorItemにセパレータのインスタンスがいる。 | ||
<source lang="csharp"> | |||
appMenu.AddItem( NSMenuItem.SeparatorItem ); | |||
</source> | |||
== アイコンの解像度 == | |||
システムステータスバーに表示するアイコンサイズは18pxにするとピッタリらしい。少し余裕をみて16pxでもいいような気がする。まるで[[X68000]]やらの[[スプライト]]みたいなサイズであり[[ドット絵師]]としての腕前が必要となる高度な分野である。 | |||
試しに256x256サイズの画像をImageプロパティにぶち込んでみたが、そのままの解像度で一部だけ表示され自動では縮小されなかった。[[Photoshop]]や[[FireAlpaca]]あたりのペイントソフトで縮小しておくとよい。 | |||
また、どのアプリも軒並み白黒のアイコンを使っているが、システムステータスバーは白黒画像しか扱えないわけではなく、カラー画像でも普通に表示される。しかし「ひとつだけカラー」だと凄い安っぽく見えるので止めた方が無難である。 | |||
[[Yosemite]]ではdeprecationの警告が出る。代替となる方法は不明である。 | [[Yosemite]]ではdeprecationの警告が出る。代替となる方法は不明である。 | ||
==関連項目== | ==関連項目== | ||
*[[Xamarin.Mac/Dockアイコンを非表示にする]] | * [[Xamarin.Mac/Dockアイコンを非表示にする]] | ||
*[[MonoMac/Resource Bundleを利用する]] | * [[Xamarin.Mac/スリープからの復帰を検出する]] | ||
* [[MonoMac/Resource Bundleを利用する]] | |||
==参考文献== | ==参考文献== | ||
| 76行目: | 85行目: | ||
{{stub}} | {{stub}} | ||
[[category:MonoMac]] | |||
[[category:Xamarin.Mac]] | [[category:Xamarin.Mac]] | ||
2020年11月2日 (月) 02:48時点における最新版
Mac OS Xのシステムステータスバー(Windowsでいうタスクトレイ)にアイコンを表示したい。

実装例[編集 | ソースを編集]
NSStatusBar.SystemStatusBar以下にCreateだのRemoveだのといったインスタンスを生成したり削除したりする静的メソッドがある。 システムステータスバーにアイコンを表示するにはこのメソッド群で作ったインスタンスのImageプロパティにNSImageをぶち込んでやればよい。
using System;
using System.IO;
using Foundation;
using AppKit;
public partial class AppDelegate : NSApplicationDelegate
{
// 〜〜〜省略〜〜〜
public override void DidFinishLaunching(NSNotification notification)
{
var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(NSStatusItemLength.Variable);
// アイコンを設定する
statusItem.Image = new NSImage(Path.Combine(NSBundle.MainBundle.BundlePath, "Contents", "Resources", "CDx18.png"));
// アイコンがダブルクリックされたらこのアプリを終了する
statusItem.DoubleClick += (object sender, EventArgs e) => {
NSApplication.SharedApplication.Terminate(this);
};
}
}
クリックされた際にメニューを表示するのも似たような感じで、MenuプロパティにNSMenuを突っ込めばいいだけのようだ。
using System;
using System.IO;
using Foundation;
using AppKit;
public partial class AppDelegate : NSApplicationDelegate
{
// 〜〜〜省略〜〜〜
public override void DidFinishLaunching(NSNotification notification)
{
// ステータスバーをクリックした時に表示するメニューを用意する
var appMenu = new NSMenu();
var quitItem = new NSMenuItem("Quit", "q",
(s, e) => NSApplication.SharedApplication.Terminate(this));
appMenu.AddItem(quitItem);
// ステータスバーのアイテムを生成する
var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(NSStatusItemLength.Variable);
statusItem.Menu = appMenu;
statusItem.Image = new NSImage(Path.Combine(NSBundle.MainBundle.BundlePath, "Contents", "Resources", "CDx18.png"));
statusItem.Title = "";
statusItem.HighlightMode = false;
}
}
メニューのセパレータ[編集 | ソースを編集]
NSMenuItem.SeparatorItemにセパレータのインスタンスがいる。
appMenu.AddItem( NSMenuItem.SeparatorItem );
アイコンの解像度[編集 | ソースを編集]
システムステータスバーに表示するアイコンサイズは18pxにするとピッタリらしい。少し余裕をみて16pxでもいいような気がする。まるでX68000やらのスプライトみたいなサイズでありドット絵師としての腕前が必要となる高度な分野である。
試しに256x256サイズの画像をImageプロパティにぶち込んでみたが、そのままの解像度で一部だけ表示され自動では縮小されなかった。PhotoshopやFireAlpacaあたりのペイントソフトで縮小しておくとよい。
また、どのアプリも軒並み白黒のアイコンを使っているが、システムステータスバーは白黒画像しか扱えないわけではなく、カラー画像でも普通に表示される。しかし「ひとつだけカラー」だと凄い安っぽく見えるので止めた方が無難である。
Yosemiteではdeprecationの警告が出る。代替となる方法は不明である。