雑学講座 第一回

[フォント...]ってどんな動作をしているの?

Palm標準のメモ帳、予定表などでは、メニューの[オプション]→[フォント...]と辿ると、おなじみのこんなダイアログが表示されますね。

ここで、好きなフォントを選んで[OK]。

この操作で表示するフォントを設定できることはご存知でしょう。

じゃあ、アプリケーションでは具体的にどんなことをやっているのでしょうか。

実は、

newFontID = FontSelect (currentFontID);

こんなコードを一行書くだけなのです。

つまり、FontSelect()というAPI関数を呼んでいるだけで、あとはPalmOSに処理を任せています。

マニュアルを見ると、この関数のプロトタイプは

FontID FontSelect (FontID fontID)

と書かれています。

よくわからない人も多いと思いますが、要は、

括弧の中に現在のフォントの番号を入れてこの関数を呼び出すと、
そのフォントに対応するボタンが選択された状態で[フォント選択]のダイアログを表示し、
[OK]がタップされたら、ユーザが選択したボタンに該当するフォントの番号を返してくれる。

という動作をする関数です。

そうそう、Palmではフォントを番号で管理しているということを覚えておいてください。
上のダイアログに表示されているフォントを例に取ると、
左から順に0番、1番、2番で飛んで7番という番号が各フォントに割り振られています。
つまり、1番を指定すると、小さいほうのボールド文字と解釈してくれます。

では、PalmOSはこのFontSelectという関数が呼ばれた時にどんな動作をしているのか考えてみましょう。

例えばの1 べたに書くと...

一番左のボタンが選択されていたら1番を、
左から二番目のボタンが選択されていたら2番を
左から三番目のボタンが選択されていたら3番を
一番右のボタンが選択されていたら7番を返す。

とすると、実際のコードはこんな感じでしょうか?

選ばれているボタンがどれかを調べる
if (一番左のボタンが選ばれている)
 then return 0番
else if (二番目のボタンが選ばれている)
 then return 1番
else if (三番目のボタンが選ばれている)
 then return 2番
else
 return 7番

例えばの2 ちょっと頭をひねって...

各ボタンに予め、番号を割り当てておいて、(左から順に0、1、2、7)
その番号を返す。

とすると、この場合のコードはこんな感じでしょうか?

選ばれているボタンがどれかを調べる
return 選ばれているボタンの番号

例えばの3 こんなやりかたもあるかな...

選ばれているボタンに表示しているフォントが何かを調べて、
そのフォントの番号を返す。

この場合はこんなふうかな?

選ばれているボタンがどれかを調べる
選ばれているボタンに表示しているフォントが何かを調べる
return 調べたフォントの番号

さて、どれでしょう?

わざわざその2とその3を書いているから、1番じゃないのは判るけど、その2とその3どっちかな?
考えてみてください。

汎用性のあるコードにするか、小さいコードにするか、速度を優先するかによって、同じ動作をさせるために書くコードは変わってきます。
この辺りは開発者の思想によるところが大きい物です。
PalmOSのコードを見てゆくと、Palmのもともとの開発者の方々の思想が見えてくるようで面白いのですよ。

ヒント1:汎用性を重視して書かれています
ヒント2:稚拙のSelectFontは、独自の[フォント選択]のダイアログを用意して、OSが用意しているダイアログとすげ替えているだけ。どのボタンが押されたかなんて一切見ていません。

答えは次回に

だれからもレスポンス無ければ、この講座、第一回で打ち切りかも...