前回のTSFのサンプルをActiveBasicへ移植してみました。半分以上は、インタフェースなどの宣言を用意することだった気がします。

それだけでは物足りないので、描画していなかった未確定文字列の下線を書こうと決心。表示属性の使用 (MSDNライブラリ)がずばりそれだろうと期待して取りかかりました。

結論は、ビンゴ。このように今度はきちんとした線が表示されました。しかし、面倒でした。もう少し簡単に使えるようにならないのでしょうか。
表示属性を使用して、確定していない文字列に下線が引かれた様子

表示属性は、最終的にTF_DISPLAYATTRIBUTE構造体 (MSDNライブラリ英語版)の形で表現されるのですが、その中で線の種類を表すのがTF_DA_LINESTYLE列挙体です。わざわざ新しく作らなくても、線の種類(実線・破線・点線など)にGDIのCreatePen系の定数など、既存のものを使えばいいのに、と思いました。いっそ、LOGPEN構造体をメンバにしてくれれば楽なんですが。また、例えGDI+などGDI以外で描画するとしても、独自に作られるよりは覚えることが減っていいと思うんですけどね……。

この線の種類は、不思議なことに、なんと、日本語MS-IMEで設定可能なTSFでディザ細線・ディザ太線の意味の定数が存在しないのです。代わりにTF_LS_SQUIGGLE(ジグザグな線)という定数があり、MS-IMEもTSFではディザ細線のはずの状況で、代わりにこっちを指定してきます。Vista使っていればCUAS(IMMエミュレーション)の描画で頻繁に見かけるのですが、たしかにジグザグ線です。

Windows Server 2008のメモ帳でMS-IME 2007による未確定文字列の様子 Windows XPのメモ帳でMS-IME 2002による未確定文字列の様子
Windows Server 2008でMS-IME 2007 Windows XPでMS-IME 2002

ジグザグ線は、GDIの(Ext)CreatePenには対応する定数がないので面倒に思います。ディザ細線なら、NT系限定ながらExtCreatePenのPS_ALTERNATE指定でペン作れるのですが。

あと、このサンプルは不完全なようで、Social IMEとWinAnthyでは上手く動かない点があります(直接TSF対応しているはずのMS Wordではまともに動くんですけどね)。しかもSocial IMEのほうはソース非公開みたいですし。MS-IME(Vista系2002とOffice 2007)は問題なく動いてくれるのですが。あと、念を押して書いておきますが、ATOKは論外です、TSF非対応なので。残念です。

ソースコードは、待ってください。そのうちひっそり公開するつもりです。


スポンサード リンク

この記事のカテゴリ