差分

ナビゲーションに移動 検索に移動
ページの作成:「Mac OS Xのシステムステータスバー(Windowsでいうタスクトレイ)にアイコンを表示したい。 ファイル:システムステータ...」
[[Mac OS X]]のシステムステータスバー([[Windows]]でいうタスクトレイ)にアイコンを表示したい。
[[ファイル:システムステータスバー.png|none|Mac OS Xのシステムステータスバー]]

==実装例1==
NSStatusBar.SystemStatusBar以下にCreateだのRemoveだのといったインスタンスを生成したり削除したりする静的メソッドがある。
システムステータスバーにアイコンを表示するにはこのメソッド群で作ったインスタンスのImageプロパティにNSImageをぶち込んでやればよい。

<source lang="csharp">
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);
};
}
}
</source>

クリックされた際にメニューを表示するのも似たような感じで、MenuプロパティにNSMenuを突っ込めばいいだけのようだ。
<source lang="csharp">
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;
}
}
</source>

==その他==
システムステータスバーに表示するアイコンサイズは18pxにするとピッタリらしい。少し余裕をみて16pxでもいいような気がする。まるで[[X68000]]やらの[[スプライト]]みたいサイズであり[[ドット絵師]]としての腕前が必要となる高度な分野である。なお縮小していない256x256サイズの画像をImageプロパティにぶち込んでみたが、そのまま表示され自動では縮小されなかった。[[Photoshop]]や[[FireAlpaca]]あたりのペイントソフトで縮小しておくとよい。

また、どのアプリも軒並み白黒のアイコンを使っているが、システムステータスバーは白黒画像しか扱えないわけではなく、カラー画像でも普通に表示される。しかしひとつだけカラーだと凄い安っぽく見えるので止めた方が無難である。

[[Yosemite]]ではdeprecationの警告が出る。代替となる方法は不明である。

==関連項目==
*[[Xamarin.Mac/Dockアイコンを非表示にする]]
*[[MonoMac/Resource Bundleを利用する]]

==参考文献==
{{reflist}}

{{stub}}

[[category:Xamarin.Mac]]
匿名利用者

案内メニュー