ダイアログに数値入力用カラムを配置したら、そこに初期値をセットしたい場合があります。では、任意のテキストをEdit TextやEditUnicodeTextコントロールにセットするのにはどうしたら良いのでしょうか?使い慣れたSetControlTitle()が使えれば簡単なのですが、残念ながらそれではダメで、コントロールに様々なデータを設定するために用意されているSetControlData()を使います。同様に、コントロールに属する各種データを読み出したい場合には、GetControlData()を使うことになります。例えば、テキスト入力カラムへパスカル文字列(Str255 str)をセットするには、以下のようなコードを記述します。
SetControlData( chd,kControlNoPart,kControlEditTextTextTag,*str,str+1 );
chdはターゲットとなるコントロールのControlRefです。セットするのが数値(long value)であれば、以下のように一度パスカル文字列に変換してからセットします。
NumToString( value,str );
SetControlData( chd,kControlNoPart,kControlEditTextTextTag,*str,str+1 );
SetControlData()は、kControlEditTextTextTagという識別子(Tag)を別の物(値)に交換することで、入力するデータの意味やそのフォーマットを変更できます。例えば、パスカル文字列の代わりにUnicode文字列(CFStringRef cfref)をセットしたい場合には、kControlEditTextTextTagの代わりにkControlEditTextCFStringTagと言うTagを使い、以下のように記述します。
SetControlData( chd,kControlNoPart,kControlEditTextCFStringTag,sizeof(CFStringRef),&cfref );
では、カラムに表示されるテキストのフォントサイズを変更したい場合にはどうしたら良いのでしょうか?その場合には、kControlFontStyleTagというTagを用い、ControlFontStyleRec構造体に必要なパラメータをセットしてからSetControlData()に渡します。構造体のflagsメンバーにセットされているkControlUseSizeMaskは、Control Managerに対し「フォントサイズのみ変更」という指示を出す役目を担います。

同様に、フォント種類、スタイル、カラーなど、より多くのフォント情報を同時に変更したい場合には、以下のようなルーチンを用意すればOKです。

SetControlData()に渡せるTagの種類とその利用目的は、Universal Interfaces(ヘッダファイル)のControlDefinitions.hに詳しく記述されています。興味ある方は一度内容をチェックしてみてください。
次回は、なにゆえ筆者がこの「怪現象」に遭遇することになったのかをお話します。
つづく
copyright 2003 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact Us: koike@ottimo.co.jp