● バグは友達(10)2003年03月16日

  このコラムは、MOSAの会員にのみ配布されているデベロッパー向けの
  デジタルマガジンMOSADeNのに掲載された記事です。ほぼ一ヶ月遅れで
  ここに掲載されて行きます

〜 DTSからの回答を検討してみる 〜

前回、DTS(Developer Technical Support)宛てに、EditUnicodeTextコントロールに関する質問と、それを再現するサンプルソースコードを送りました。通常は、質問に対するDTSからの返答は迅速です。休日をはさまなければ、1~3日で返答が届くのが普通です。もし、何日経っても返答が届かないような場合には、メールシステムの不調や送付先のミス、DTS側のデータベースに関わる何らかのトラブル等が予想されますので、DTS宛てに再度問い合わせのメールを送付されることをお勧めします。

DTSから送られてきた、今回の質問に対する回答は以下のような内容でした。

・指摘した現象はEditUnicodeTextコントロールのバグである。
・バグの内容はApple社のバグデータベースに登録された(参照番号は3056216)。
・解決策としては、力技だがdelete keyイベントをコントロールに送る方法がある。

加えて「バグレポートはhttp://developer.apple.com/bugreporterで登録できますのでよろしくお願いします」という内容も記述されていました。「日本語で登録できるのなら毎日でもするゾ!」と思ったのですが(笑)まあそれはひとまず置いといて、とりあえずこの現象はバグであることが判明したわけです。APIの操作方法に間違いがないと確認できれば、後はバグ回避方法の探索のみに集中できます。さっそく、DTSが助言してくれた回避方法を調べてみることにしました。この回避方法は、前々回に筆者が予想した次の解決手法と一致しています。

・バックスペース等のキー入力をCarbon Evenとしてコントロールに送ってやる。

親切なことに、DTSからのメールには、それを実現するためのサンプルソースコードも紹介されていました。



確かにこの方法を使えば問題は回避できそうです。しかし、いかにも力技で美しくない手法であり、ウィンドウ上に数多くのカラムが配置されている場合には、その処理スピードにも一抹の不安が残ります。もう少しスマートなバグ回避方法は無いものか?と頭をひねっている時に、ひとつの面白いアイデアが浮かびました。それは「GetControlData()を利用し、EditUnicodeTextコントロールが使っているだろうMLTE(Multilingual Text Engine)のTXNObjectを得ることはできないか?」というものでした。

つづく

copyright 2003 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact Us: koike@ottimo.co.jp