HMDT - Logic and Intuition -

about HMDT

Cocoa Programming Tips 1001

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

back to top content

Copyright © 2002-2006 HMDT. All rights reserved.