Geometry 関数
NSBundle
NSDictionary
NSFileManager
NSMutableAttributedString
NSNumber
NSScanner
NSString
NSTimer
Graphic 関数
NSApplication
NSBezierPath
NSCell
NSColor
-システムカラーの設定を取得する
-システムカラーの変更を受け取る
NSCursor
NSCustomImageRep
NSDocument
NSDocumentController
NSDragging
NSEvent
NSFontManager
NSGraphicsContext
NSImage
NSMenu
NSOutlineView
NSPanel
NSPopUpButton
NSResponder
NSScrollView
NSString 追加
NSTableColumn
NSTableView
NSTextStorage
NSTextView
NSToolbar
NSView
NSWindow
NSWorkspace
その他
.nib ウィンドウ
Views パレット
クラス
インスタンス変数
メソッド
CFXML
Carbon Event
Carbon Graphics
Cocoa で日本語
メソッド
その他

- Application Kit-
NSColor

Application Kit - NSColor
システムカラーの設定を取得する
Keywords: System color, selectedControlColor, selectedTextColor

アプリケーションで強調枠を表示したり、テキスト選択のバックグラウンドには、ユーザがコントロールパネルで設定した色を使いたいよね。それらを得るには、NSColor のシステムカラー関係のメソッドを使う。ドキュメントにはたくさんの API がのっているけど、Aqua 環境で現在使えると書かれているのは、selectedControlColorselectedTextColor の 2 つだけだ。他のやつは、プラチナ・アピアランスと互換を取るために残してあるらしい。

Application Kit/NSColor.h
+ (NSColor *)selectedControlColor;
+ (NSColor *)selectedTextColor;

実際に使ってみる。

SystemColor/SystemColorAppDelegate.m
- (void)awakeFromNib
{
    // システムカラーを取得する
    [_selectedControlColor 
        setColor:[NSColor selectedControlColor]];
    [_selectedTextColor 
        setColor:[NSColor selectedTextColor]];

    ...
}

System Color sample

このサンプルを実行したまま、“システム環境設定”の“一般”で、“強調表示色”を変えると、selectedControlColor が変わるのが分かるよ。だけど、selectedTextColor を変更する方法がわからない。どっかのコントロールパネルの奥に埋もれているのか?

■サンプルダウンロード:
SystemColor.tar.gz


Application Kit - NSColor
システムカラーの変更を受け取る
Keywords: System color, NSSystemColorsDidChangeNotification

では、コントロールパネルでシステムカラーが変更されたことを検出するには?システムカラーが変更されると、NSSystemColorsDidChangeNotification が投げられるんだ。

Application Kit/NSColor.h
APPKIT_EXTERN NSString *NSSystemColorsDidChangeNotification;

これを NSNotificationCenter を使って受け取ればいい。

SystemColor/SystemColorAppDelegate.m
- (void)awakeFromNib
{
    ...

    // Set observer
    [[NSNotificationCenter defaultCenter] 
                    addObserver:self 
                    selector:@selector(systemColorsDidCanged:) 
                    name:NSSystemColorsDidChangeNotification 
                    object:nil];
}

これで、システムカラーが変更されたときに、systemColorsDidChanged: が呼び出されるんだ。

■サンプルダウンロード:
SystemColor.tar.gz



[Home] [Download] [Archives] [BBS] [Cocoa Programming Tips 1001] [Core Foundation の秘密] [Safari Developer Center] [はじめてのブラウザのつくり方] [Sketch BP] [スクリーンセイバーを作ろう] [Objective-C 最適化] [Authorization API 完全理解] [Mac OS X Programming Books Review] [オブジェクト指向の言語比較論] [panther-dev]

mailto: mkino@xd5.so-net.ne.jp