DTSサービスでは、最初に提起した問題が完全に解決されていない間は継続して質疑応答が行えるように考慮されています。こうした場合のやり取りは新規質問としてカウントされませんので、回答に納得いかない場合にはしつこく食い下がるのも作戦です。まあ、「バグで回避方法はありません!」とか「将来のOSのバージョンで直りますので待ってください!」と言われてしまえば、それでジ・エンドなんですが...(笑)。
Control ManagerのGetControlData()でコントロールからどんな種類の情報(データ)を得ることが出来るのかは、Universal InterfacesのControlDefinitions.hに定義されている識別子(Tag)を調べることで分かります。これらは、SetControlData()でテキスト入力カラムのフォント情報を変更しようとした時に紹介したTagとまったく同じ物です。例えば、ControlDefinitions.hには、次のようなEdit Text関係のTagが定義されています。
enum {
kControlEditTextStyleTag=kControlFontStyleTag,
/* ControlFontStyleRec*/
kControlEditTextTextTag=FOUR_CHAR_CODE('text'),
/* Buffer of chars - you supply the buffer*/
kControlEditTextTEHandleTag=FOUR_CHAR_CODE('than'),
/* The TEHandle of the text edit record*/
kControlEditTextKeyFilterTag = kControlKeyFilterTag,
kControlEditTextSelectionTag = FOUR_CHAR_CODE('sele'),
/* ControlEditTextSelectionRec*/
kControlEditTextPasswordTag = FOUR_CHAR_CODE('pass')
/* The clear text password text*/
};
前回説明したkControlEditTextTEHandleTagも、ここに含まれていることが分かります。残念ながら、このヘッダファイルを詳しく調べてみても、TXNObjectを得るためのTagは存在していません。「だったらTXNObjectを得ることは無理なのでは...」と思われる方も多いでしょう。確かに、常識ではそうです。しかし世の中、どのような状況においても「裏」が存在するのが常なのです!
この世界(ソフト業界)、ドキュメントに記載されているくせにまったく機能しないAPIがあるかと思えば(笑)ドキュメント化されていないくせに立派に機能する「裏API」があったりします。昔々、ExcelやWordにMicroSoft社しか知らない裏APIが使われているという噂(?)が流れ、大問題になった事件がありました。まあ、悪意があるわけではないとしても「実装済みだが発表は次期OSバージョンのタイミングに合わせる」などの「何らかの事情」により、表舞台に現れていない裏APIや裏機能は数多く存在するわけです。
実際に、Control ManagerのAPIを作成しているApple社の技術者は、MLTEの機能を利用するために「何らかの方法」でTXNObjectへアクセスしているわけです。そこに、MLTE APIへの裏道(良く言えば非常階段)が存在していたとしても不思議ではありません。そうした技術資料を得ることができれば、今回の問題は解決へと大きく前進します。筆者は、期待を込めて「何らかの方法で、EditUnicodeTextコントロールに属するTXNObjectを得ることはできないか?」とDTSに質問してみました。すると、数日後にDTSから驚くべき回答が届くことになります!
つづく
copyright 2003 Ottimo, Inc. All rights reserved
無断転載・引用禁止
Contact Us: koike@ottimo.co.jp