2003-06-25 [長年日記]

[Q3] MAPIでふりがな

ソート用にWindowsアドレス帳からふりがなを取得しようとしてみたのですが、どうにも取得できません。アドレス帳で見ると入っているのでどこかに格納されているようなのですが、何をキーにして取得すればいいのかさっぱり。。アドレス帳からCSVにエクスポートするときのフィールドの指定でも一覧に出てきませんね。

[Q3] MAPIでふりがな (2)

IMAPITable::SetColumnsを呼んで取得するカラムを指定するのですが、ここにPR_ENTRYIDを含めておかないとSetColumnsが失敗します。PR_DISPLAY_NAMEとPR_EMAIL_ADDRESSだけ指定したらエラーになってしまいました。

ここにふりがなのカラムを含めれば良いのだとおもうのですが、ふりがな用のタグが定義されていないんですよね。IMAPTable::QueryColumnsにTBL_ALL_COLUMNSを指定してカラムの一覧を取得しても出てくるのはこれだけですし。。

PR_ADDRTYPE_A,
PR_DISPLAY_NAME_A,
PR_DISPLAY_TYPE,
PR_ENTRYID,
PR_INSTANCE_KEY,
PR_OBJECT_TYPE,
PR_EMAIL_ADDRESS_A,
PR_RECORD_KEY,
PR_NICKNAME_A

[Q3] 等幅フォント

Sigmarion IIIでメールを見ていたら「MS ゴシック」を指定しているはずなのになぜか桁がガタガタにずれていたので調べてみました。すると、どうやら半角フォントが全角フォントの半分の幅になっていないのが原因なようです。「MS ゴシック」12pt太字にすると、Windows 2000のメモ帳でも再現しました。どうも太字にすると悉くダメなようです。ちなみにIE(preとbで囲んだ場合)でも再現しますが、秀丸やK2Editorでは平気です。

なんだか昔NT4SP3になった頃に同じような問題が発生して次のSPで直されたとかいう話があった気がしますが、あれは太字がらみではなかったでしたっけ。

文字を描く時に一文字ずつ自前で位置合わせをすればよいのですがどうやって半角と全角の判断をするかが問題です。日本語しか考えなければ簡単なのですが、日本語以外も考えた場合、一文字ずつフォントの幅を取ってきて閾値以下だったら半角、のように判定しなくてはいけないのでしょうか。でもそんなことしたらパフォーマンスが落ちまくってしまいそうです。何かよい方法はないでしょうか。

[Q3] GetTextExtentExPoint

ExtTextOutする前にGetTextExtentExPointを呼んでそれぞれの文字の位置を調べておいて、必要だったら調節(全角を半角の二倍にするとか)してExtTextOutに渡せばOKですね。そうすると、ウィンドウ幅で折り返す設定の時には、折り返し位置を決めるときにも同じ調節をしなくてはいけませんね。

パフォーマンス的には微妙ですがやってみる価値はありそうです。

[SVN] 作業用ブランチ

作業用ブランチを切った後で本体をどんどん変更してしまったとします。その状態で作業用ブランチの変更をしようと思ったときにはどうするのが定石なんでしょうか。本体の差分を作業用ブランチにマージしてから作業をして、作業が終わったらマージ後の分だけ本体にマージしなおせばよいのですが、何回かそういうことがあるとどこで何をマージしたのかわけがわからなくなりそうです。もちろんログを見れば分かるのですがミスって変なことをしてしまいそうです。

もう一つ別の作業用ブランチを新たに作って、元の作業用ブランチの変更点をマージし、古い方のブランチは削除して新しい方のブランチで作業するというのもありですね。後で履歴を見たときに分かりにくくなってしまいそうですが、ミスって変なマージをしてしまうよりはマシかな。