(57)【要約】【課題】  オブジェクトは、ソフトウェアアプリケーションの１または複数のコントロールに関連付けられている。コントロールに関連付けられているオブジェクトは、データ入力ユーザインタフェースを使用してデータをそのコントロールに入力しているときに、データ入力ユーザインタフェースの動作を決定する。【解決手段】  より具体的には、オブジェクトは、ユーザインタフェースをユーザに提供するよう働く構成要素にインタフェースの特徴を伝えることができる。こうした構成要素は、例えば、ユーザインタフェースをディスプレイ上にレンダリングし、ユーザインタフェースを介してユーザから入力データを受信し、入力されたデータを指定された宛先に経路指定する共有ソフトウェアモジュールとすることができる。または、オブジェクト自体は、指定された特徴を有するユーザインタフェースを作成することができる。【選択図】  図４
2004234647.tif 000002
【特許請求の範囲】
【請求項１】
手書きインクを受け付けるためのコンピュータ生成されたユーザインタフェースであって、
ペンに関連付けられている手書きインクを受け付ける第１の領域と、
前記ユーザインタフェースと関連付けられているオブジェクトを構成することによってその内容が制御される第２の領域と
を備えたことを特徴とするユーザインタフェース。
【請求項２】
前記オブジェクトは、挿入領域の挿入ポイントの近くの前記ユーザインタフェースの位置を制御することを特徴とする請求項１に記載のユーザインタフェース。
【請求項３】
前記手書きインクは、前記ペンが前記ユーザインタフェースから離れると挿入ポイントに送信されることを特徴とする請求項１に記載のユーザインタフェース。
【請求項４】
前記ペンは、前記手書きインクが前記挿入ポイントに送信される前に前記ユーザインタフェースが表示される面から少なくとも所定の距離離れて移動することを特徴とする請求項３に記載のユーザインタフェース。
【請求項５】
対話の後、前記第１の領域の前記手書きインクを挿入領域の挿入ポイントに送信する第３の領域をさらに備えたことを特徴とする請求項１に記載のユーザインタフェース。
【請求項６】
前記オブジェクトは、開発者によって変更可能であることを特徴とする請求項１に記載のユーザインタフェース。
【請求項７】
前記挿入領域は、エディットコントロールに関連付けられていることを特徴とする請求項２に記載のユーザインタフェース。
【請求項８】
前記エディットコントロールは、前記挿入領域からの前記第１および第２の領域を収容するパネルのオフセットを指定することを特徴とする請求項７に記載のユーザインタフェース。
【請求項９】
前記オフセットは、垂直方向のオフセットを含むことを特徴とする請求項８に記載のユーザインタフェース。
【請求項１０】
前記オフセットは、水平方向のインタフェースを含むことを特徴とする請求項８に記載のユーザインタフェース。
【請求項１１】
前記手書きインクは、インクとして前記挿入領域に挿入されることを特徴とする請求項３に記載のユーザインタフェース。
【請求項１２】
前記手書きインクは、テキストに変換され、前記テキストは前記挿入領域に挿入されることを特徴とする請求項３に記載のユーザインタフェース。
【請求項１３】
前記オフセットは、デフォルトのオフセットであることを特徴とする請求項８に記載のユーザインタフェース。
【請求項１４】
前記オフセットは、前記エディットコントロールに固有であることを特徴とする請求項８に記載のユーザインタフェース。
【請求項１５】
前記オフセットは、開発者によって定義可能であることを特徴とする請求項８に記載のユーザインタフェース。
【請求項１６】
上側領域および下側領域を有するコンピュータ表示ウィンドウであって、
挿入領域でアクティブの挿入ポイントと、
手書きインクを捕捉する第１の領域を含む手書き捕捉パネルとを備え、
前記手書き捕捉パネルは、前記挿入領域が前記下側領域にあるとき前記挿入領域の上に表示され、前記手書き捕捉パネルは、前記挿入領域が前記上側領域にあるとき前記挿入領域の下に表示されることを特徴とするコンピュータ表示ウィンドウ。
【請求項１７】
前記上側領域と前記下側領域の間の分離が定義可能であることを特徴とする請求項１６に記載のコンピュータ表示ウィンドウ。
【請求項１８】
ユーザインタフェースを制御する方法であって、
ソフトウェアアプリケーションから情報を受信すること、および
前記受信した情報に基づいてユーザインタフェースを呼び出すこと
を備えたことを特徴とする方法。
【請求項１９】
前記ユーザインタフェースを呼び出して、前記受信した情報に基づいて指定された位置に表示されること
をさらに備えたことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記ユーザインタフェースを呼び出して、前記受信した情報に基づいて指定された特徴を含むこと
をさらに備えたことを特徴とする請求項１８に記載の方法。
【請求項２１】
前記ユーザインタフェースを呼び出して、前記受信した情報に基づいて指定された特徴を含み、指定された位置に表示されること
をさらに備えたことを特徴とする請求項１８に記載の方法。
【請求項２２】
前記情報は、コントロールを識別することを特徴とする請求項１８に記載の方法。
【請求項２３】
前記情報は、前記コントロールの位置情報をさらに含むことを特徴とする請求項２２に記載の方法。
【請求項２４】
前記ユーザインタフェースを呼び出して、前記コントロールに近い位置に表示されること
をさらに備えたことを特徴とする請求項２３に記載の方法。
【請求項２５】
前記ユーザインタフェースを呼び出して、前記コントロールの境界から垂直方向にオフセットされた位置に表示されること
をさらに備えたことを特徴とする請求項２３に記載の方法。
【請求項２６】
前記ユーザインタフェースを呼び出して、前記コントロールの境界から水平方向にオフセットされた位置に表示されること
をさらに備えたことを特徴とする請求項２３に記載の方法。
【請求項２７】
前記ユーザインタフェースを呼び出して、前記コントロールの境界から水平方向および垂直方向にオフセットされた位置に表示されること
をさらに備えたことを特徴とする請求項２３に記載の方法。
【請求項２８】
前記ユーザインタフェースを呼び出して、前記コントロールの位置に基づいて指定された境界サイズを有すること
をさらに備えたことを特徴とする請求項２３に記載の方法。
【請求項２９】
前記情報は、前記コントロールの境界のサイズ情報をさらに含むことを特徴とする請求項２２に記載の方法。
【請求項３０】
前記ユーザインタフェースを呼び出して、前記コントロールの前記境界の前記サイズ情報に基づいて前記コントロール内に表示されること
をさらに備えたことを特徴とする請求項２９に記載の方法。
【請求項３１】
前記ユーザインタフェースを呼び出して、前記コントロールの境界から垂直方向にオフセットされた位置に表示されること
をさらに備えたことを特徴とする請求項３０に記載の方法。
【請求項３２】
前記ユーザインタフェースを呼び出して、前記コントロールの境界から水平方向にオフセットされた位置に表示されること
をさらに備えたことを特徴とする請求項３０に記載の方法。
【請求項３３】
前記情報は、作業エリアの境界をさらに含むことを特徴とする請求項２２に記載の方法。
【請求項３４】
前記ユーザインタフェースを呼び出して、前記コントロールおよび前記作業エリアの前記境界を基準にして指定された位置に表示されること
をさらに備えたことを特徴とする請求項３３に記載の方法。
【請求項３５】
前記情報は、第２のコントロールの位置をさらに含むことを特徴とする請求項２３に記載の方法。
【請求項３６】
前記ユーザインタフェースを呼び出して、前記コントロールおよび前記第２のコントロールを基準にして指定された位置に表示されること
をさらに備えたことを特徴とする請求項３５に記載の方法。
【請求項３７】
前記情報は、コントロールの型を識別することを特徴とする請求項１８に記載の方法。
【請求項３８】
前記ユーザインタフェースを呼び出して、前記識別された型のコントロールに対応する入力面を含むこと
をさらに備えたことを特徴とする請求項３７に記載の方法。
【請求項３９】
前記ユーザインタフェースを呼び出して、キーボード入力面を含むこと
をさらに備えたことを特徴とする請求項３８に記載の方法。
【請求項４０】
前記ユーザインタフェースを呼び出して、書き込み入力面を含むこと
をさらに備えたことを特徴とする請求項３８に記載の方法。
【請求項４１】
前記ユーザインタフェースを呼び出して、アジア言語書き込み入力面を含むこと
をさらに備えたことを特徴とする請求項３８に記載の方法。
【請求項４２】
指示をユーティリティオブジェクトで受信すること、および
前記指示の受信に応答して、前記ユーティリティオブジェクトにアプリケーションプログラムインタフェースを制御させて前記ユーザインタフェースを呼び出すこと
をさらに備えたことを特徴とする請求項１８に記載の方法。
【請求項４３】
呼出技術を使用して前記受信された情報に基づいて前記ユーザインタフェースを呼び出すこと
をさらに備えたことを特徴とする請求項１８に記載の方法。
【請求項４４】
前記ユーザインタフェースは、ターゲットの活性化に応答して呼び出されることを特徴とする請求項４３に記載の方法。
【請求項４５】
前記ターゲットは、ポインティング装置が前記ターゲットの近くに移動したとき活性化されることを特徴とする請求項４４に記載の方法。
【請求項４６】
前記ターゲットは、ポインティング装置が前記ターゲット上を移動したとき活性化されることを特徴とする請求項４４に記載の方法。
【請求項４７】
前記ターゲットは、ポインティング装置が所定の時間前記ターゲットの上で保持されたときに活性化されることを特徴とする請求項４４に記載の方法。
【請求項４８】
終了技術を使用して前記受信した情報に基づいて前記ユーザインタフェースを終了させることをさらに備えたことを特徴とする請求項１８に記載の方法。
【請求項４９】
入力データを受信する少なくとも１つのコントロールを有するアプリケーションと、
前記少なくとも１つのコントロールにデータを入力するユーザインタフェースと、
前記少なくとも１つのコントロールに関する情報を前記アプリケーションから受信し、前記受信した情報に応答して前記ユーザインタフェースを制御するユーティリティオブジェクトと
を備えたことを特徴とするコンピューティング環境。
【請求項５０】
前記アプリケーションは複数のコントロールを有し、
前記ユーティリティオブジェクトは、前記複数のコントロールのそれぞれに関する情報を前記アプリケーションから受信する
ことを特徴とする請求項４９に記載のコンピューティング環境。
【請求項５１】
前記アプリケーションは、第２のコントロールを含み、
前記第２のコントロールに関する情報を前記アプリケーションから受信し、前記第２のコントロールに関する前記受信した情報に応答して前記ユーザインタフェースを制御する第２のユーティリティオブジェクトをさらに備えたことを特徴とする請求項４９に記載のコンピューティング環境。
【請求項５２】
前記ユーティリティオブジェクトからの命令に応答して前記ユーザインタフェースを制御する前記少なくとも１つのコントロールの間で共有される構成要素をさらに備えたことを特徴とする請求項４９に記載のコンピューティング環境。
【請求項５３】
前記共有構成要素は、前記ユーザインタフェースからデータを受信し、前記データを少なくとも１つのコントロールに経路指定することを特徴とする請求項５２に記載のコンピューティング環境。
【請求項５４】
前記ユーティリティオブジェクトからの命令を前記共有構成要素に中継するプロキシ構成要素をさらに含むことを特徴とする請求項５２に記載のコンピューティング環境。
【請求項５５】
前記共有構成要素は、メッセージを受信し格納するメッセージキューを含み、
前記プロキシ構成要素は、前記ユーティリティオブジェクトからの命令を前記共有構成要素の前記メッセージキューに中継して、前記共有構成要素が、前記命令が前記メッセージキューで受信された順序で、前記メッセージキューに中継される前記命令を取り出し、応答することを特徴とする請求項５４に記載のコンピューティング環境。
【請求項５６】
複数のオブジェクトと、
前記ユーティリティオブジェクトからの命令を前記共有構成要素に中継する前記複数のオブジェクトのそれぞれに対応するプロキシ構成要素と
をさらに備えたことを特徴とする請求項５２に記載のコンピューティング環境。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的に、データ入力ユーザインタフェースを呼び出すまたは制御するためのオブジェクトに関する。本発明の様々な実施形態は、エディットコントロール、リッチエディットコントロールなどのユーザインタフェースから入力データを受信する制御に基づいてデータ入力ユーザインタフェースを呼び出し、または制御するための特定の応用例を有する。
【背景技術】
【０００２】
コンピュータが進化するにつれて、ユーザ経験知を向上させ、コンピュータをより多機能にする様々なデータ入力技術が開発されている。例えば、典型的なコンピュータシステム、特にMicrosoft WINDOWS（登録商標）ブランドのオペレーティングシステムなど、グラフィカルユーザインタフェース（ＧＵＩ）を使用してユーザ対話を行うコンピュータシステムは、１または複数の別個の入力装置からユーザ入力を受け付けるように最適化されている。従って、コンピュータユーザは、キーボードでテキストを入力し、ポインタの位置に関連付けられたユーザの選択部分を活性化させる１または複数のボタンを有するマウスなど、ポインティング装置で表示画面上のポインタの位置を制御することができる。一部のコンピューティングシステムでは、多目的データ入力装置として使用できるペン状のスタイラスを設けることによってユーザが使用可能な入力システムが拡張されている。
【０００３】
例えば、Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Edition オペレーティングシステムは、ユーザがペンまたはスタイラスを使用してデータをコンピュータに送る、Tablet PC Input Panel、テキスト入力パネル、またはＴＩＰと呼ばれるデータ入力ユーザインタフェースを提供する。この種のユーザインタフェースは、より広範なカテゴリのデータ入力グラフィカルユーザインタフェースに分類される。これは、一般にはデータ入力パネルと呼ぶこともできる。データ入力パネルは、その表面にわたるスタイラスの動きを電子インクに変換する書き込み面を備えることができる。データ入力パネルの一部のバージョンは、電子インクをテキストに変換することができ、他の種類のデータ入力パネルは、その代わりに、またはそれに加えてコンピュータ上で動作しているアプリケーションに直接電子インクを提供することができる。また、データ入力パネルは、従来のキーボードの文字を表示する「ソフト」キーボード面を備えていることもある。ユーザがスタイラスを使用して表示されたキー上でタップすると、コンピュータは、そのキーに関連付けられた文字を入力データとして受信する。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
データ入力パネルは、実質的にはコンピュータの有用性を向上させるが、従来のデータ入力パネルに関連する不都合が依然としていくつかある。まず、多くのコンピュータユーザは、データ入力パネルに不慣れである。従って、ソフトウェアアプリケーションを作成する開発者は、データをアプリケーションに入力するためにデータ入力パネルを手動で呼び出す方法をユーザが知っていると確信できない。代わりに開発者は、ユーザがデータ入力パネルを活性化させ、使用できることを願う、または別のデータ入力方法を利用できるようにする必要がある。
【０００５】
また、データ入力パネルは、グラフィカルユーザインタフェースであるため、一般にデータ入力パネルからデータが入力されるアプリケーションと同時に表示される。データが入力される場所をデータ入力パネルが実際に隠してしまうのを防ぐために、データ入力パネルは一般に、アプリケーションの下に「ドッキング」される。データ入力パネルをこのように配置することによって、ユーザがデータの入力先を見るのを妨げることは確実になくなるが、ユーザが（アプリケーションを制御するために）アプリケーションと、（データをアプリケーションに入力するために）データ入力パネルとの間でスタイラスを連続的に前後に動かすのは不都合なことがある。
【０００６】
さらに、典型的なデータ入力パネルによって提供されるデータ入力技法は、多岐にわたるため、あるアプリケーションの特定の位置にデータを入力するのにどの技法が最適であるかをユーザが決定するのはしばしば不都合である。例えば、あるアプリケーションは、大文字と小文字が区別されるパスワードを受けるエディットコントロールを含んでいることがある。しかし、ユーザがデータ入力パネルによって提供される書き込み面に書き込むことにより、エディットコントロールにパスワードを入力しようとした場合、ユーザの手書きが誤って認識されることがある。さらに、エディットコントロールが誤って認識された手書きを表示せず、むしろ誤って認識されたテキストを意図的に隠す場合、ユーザは、そのパスワードがなぜ受け付けられないのかを理解することさえできないことがある。この状況では、ユーザは、書き込み面ではなく代わりにソフトキーボードを使用して、データをエディットコントロールに入力することが好ましいかもしれないが、ユーザは、ソフトキーボード面がそのタスクにより適していることを理解し、データ入力パネルをその表示面に自ら変更する必要がある。
【０００７】
従って、入力パネルからデータが挿入される位置の近くに、しかしその位置を不注意に隠すことなく、データ入力パネルを表示できることが有利である。より具体的には、ユーザが、その注意をデータ入力パネルにも、データ入力パネルを介してアプリケーションに入力されるデータの挿入にも同時に集中できる位置でデータ入力パネルをインテリジェントに表示できることが有利である。さらにアプリケーションが、アプリケーションの制御にデータを入力するために最も適したデータ入力パネル面の様々な文字を指定できることが有利である。例えば、アプリケーションが、大文字と小文字が区別されるパスワードを受けるエディットコントロールを含んでいる場合、ユーザがデータをそのエディットコントロールに入力しようとしたとき、アプリケーションが自動的にデータ入力パネルの面をキーボード面に変更できることが有用となる。
【課題を解決するための手段】
【０００８】
好都合には、本発明の様々な実施形態は、アプリケーションがデータ入力パネルの位置および／または外観を含むデータ入力パネルの１または複数の特徴を制御できるようにするオブジェクトを提供する。本発明の一部の実施形態によれば、オブジェクトは、あるアプリケーションにおける１または複数のエディットコントロールに関連付けられる。例えば、本発明の一部の実施形態で、コンピュータのオペレーティングシステムの入力フォーカスが、そのオブジェクトに関連付けられているエディットコントロールにシフトしたとき、オブジェクトは、データ入力パネルが表示される位置を指定する。本発明のさらに別の実施形態では、コンピュータのオペレーティングシステムの入力フォーカスが、オブジェクトに関連付けられているエディットコントロールにシフトしたとき、オブジェクトは、データ入力パネルによって表示される面を指定する。本発明のさらに別の実施形態では、コンピュータのオペレーティングシステムの入力フォーカスが、オブジェクトに関連付けられているエディットコントロールに変わると、オブジェクトは、データ入力パネルの全体的な外観を指定する。つまり、オブジェクトは、データ入力パネルの位置、およびデータ入力パネルによって表示される面の両方を指定する。本発明のさらに別の実施形態では、オブジェクトは、それに加えて、またはその代わりにデータ入力パネルがユーザによってどのように呼び出されるかを決定することができる。
【発明を実施するための最良の形態】
【０００９】
（概要）
本発明の態様は、データ入力パネルなどデータ入力ユーザインタフェースの挙動を制御することに関する。より詳細には、本発明の様々な実施形態は、データ入力パネルの位置および内容を制御することに関する。当業者にはわかるように、ほとんどのソフトウェアアプリケーションは、典型的に、ユーザから入力データを受け付ける一種の特徴または構成要素を有する。グラフィカルユーザインタフェースを有するアプリケーションでは、こうした特徴または構成要素は、一般にコントロールと呼ばれている。従って、コントロールとは、アクションを実行するためにユーザが操作することができる表示されたオブジェクトである。コントロールの他の例は、例えば、ユーザがポインティング装置を使用してチェックすることができるボタン、やはりポインティング装置によって操作することができるスクロールバーなどがある。収容ウィンドウ（containing window）は、さらに別の種類のコントロールであり、これによってユーザは、ウィンドウの内容を操作することができる。当業者にはわかるように、コントロールの特徴および挙動は、一般にコントロールをホストするアプリケーションによって指定される。
【００１０】
例えば、キーボードなどでユーザがテキストデータを入力することができる境界付きのエリアは、一般にエディットコントロールと呼ばれる。当業者にはわかるように、異なる様々な種類のエディットコントロールがある。例えば、キーボードから文字データを受け付ける従来のエディットコントロールに加えて、Microsoft WINDOWS（登録商標）ブランドのＸＰオペレーティングシステムによって、アプリケーションは、リッチエディットコントロールを含むことができる。リッチエディットコントロールは、入力テキスト、および挿入されたテキストに関連付けられている様々な型のメタデータを受け付ける。また、Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Edition オペレーティングシステムによって、アプリケーションは、インクエディットコントロールを含むことができる。インクエディットコントロールとは、スタイラスタイプのポインティング装置を操作して電子インクを作成することにより、ユーザがコントロールにデータを入力できるようになるリッチエディットコントロールの一種である。一部のインクエディットコントロールでは、インクはテキストに変換され、他のタイプのインクエディットコントロールでは、インクをテキストに変換することなく電子インクを処理することができる。
【００１１】
本発明の様々な実施形態によれば、オブジェクトが１または複数のコントロールに関連付けられている。あるアプリケーションのコントロールに関連付けられているオブジェクトは、データ入力ユーザインタフェースを使用してデータをそのコントロールに入力しているときに、データ入力インタフェースの動作を決定する。より具体的には、本発明によるオブジェクトは、ユーザインタフェースをユーザに提供するよう働く構成要素にインタフェースの特徴を伝える。この構成要素は、例えば、ユーザインタフェースをディスプレイにレンダリングし、ユーザインタフェースを介してユーザから入力データを受信し、入力されたデータを指定された宛先に経路指定する共有ソフトウェアモジュールとすることができる。または、オブジェクト自体が指定された特徴を有するユーザインタフェースを作ることができる。
【００１２】
例えば、コントロールに関連付けられているオブジェクトは、コンピュータのオペレーティングシステムの入力フォーカスがそのコントロールにシフトしたとき、データ入力パネルなどのデータ入力ユーザインタフェースの外観を決定することができる。本発明の一部の実施形態では、オブジェクトは、データ入力パネルをコントロールの境界の近くに表示させる。例えば、オブジェクトは、データ入力パネルをエディットコントロールの境界のすぐ下またはすぐ上に表示させることができる。さらに、オブジェクトは、データ入力パネルが最初に表示する面を決定することができる。例えば、オブジェクトがパスワードや型式番号などランダムな文字を受け取る、または受け取った文字を隠すエディットコントロールに関連付けられている場合、オブジェクトは、データ入力パネルに、データをそのコントロールに入力するために、書き込み面ではなくキーボード面を最初に表示させるようにすることができる。
【００１３】
さらに、オブジェクトを使用して、データ入力パネルなどのデータ入力ユーザインタフェースを呼び出す技術を決定することができる。例えば、オブジェクトは、コンピュータのオペレーティングシステムの入力フォーカスがそのオブジェクトに関連付けられているコントロールにシフトしたときはいつでも、データ入力パネルが強制的に呼び出されるようにすることができる。または、オブジェクトは、コンピュータのオペレーティングシステムのフォーカスがそのオブジェクトに関連付けられているコントロールに変わったときに、ターゲットが表示されるようにすることができる。本発明の様々な実施形態で、ユーザがターゲット上でスタイラスを通過させ、ポインタがターゲットをポイントしている間に活性化ボタンを押し下げたとき、またはユーザがターゲットに対して他の指定された何らかのアクションを実行するとき、ターゲットが（オブジェクトによって指定されているように）データ入力パネルを呼び出す。
【００１４】
従って、オブジェクトのプロパティ値を設定し、オブジェクトに対して様々なメソッドを呼び出すことによって、アプリケーションは、ユーザに対して表示されるデータ入力パネルなどのデータ入力ユーザインタフェースの特徴を決定することができる。さらに、オブジェクトによって提供されるメソッドを実行することによって、アプリケーションは、ユーザのアクションに応答してデータ入力ユーザインタフェースの特徴を変更する、またはユーザインタフェースを介して入力されるデータがどのようにコントロールに引き渡されるかを制御することができる。本発明のこうした特徴のそれぞれについて、以下でより詳しく説明する。
【００１５】
（動作環境の例）
当業者にはわかるように、本発明の様々な実施形態によるオブジェクトは、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せを使用して実施することができる。例えば、本発明の様々な実施形態は、データ入力ユーザインタフェースの動作を制御するのにオブジェクトの操作を行う機能モジュールによって実施することができる。各モジュールは、単にアナログまたはデジタルの電子回路から構成される。しかし、当業者にはわかるように、モジュールは、例えば、パーソナルコンピュータ、ラップトップコンピュータなど従来のプログラム可能コンピューティング装置に見られるようなプログラム可能電子回路を制御する実行可能ソフトウェア命令を使用して構成することもできる。
【００１６】
より具体的には、本発明の様々な実施形態によるオブジェクトは、１または複数のプログラム可能コンピューティング装置によって実行されるプログラムモジュールなどのコンピュータ実行可能命令の一般的な文脈で説明することができる。一般にプログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含むことができる。一般に、様々な実施形態では、必要に応じてプログラムモジュールの機能を組み合わせる、または分散させることができる。
【００１７】
本発明の様々な実施形態は、ソフトウェアでプログラムされたプログラム可能コンピュータ装置を使用して実施できるので、本発明の様々な実施形態を使用できる一般のプログラム可能コンピューティング装置（以下、単にコンピュータと呼ぶ）の構成要素および動作を簡単に説明することが、本発明をよりよく理解するのに役立つであろう。図１は、本発明の様々な態様の実施に使用できる従来の汎用デジタルコンピューティング環境の例を示す機能ブロック図である。図１では、コンピュータ１００は、処理ユニット１１０、システムメモリ１２０、およびシステムメモリを含む様々なシステム構成要素を処理ユニット１１０に結合するシステムバス１３０を含む。システムバス１３０は、様々なバス構造のうちの任意のものを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスなど、あらゆる種類のバス構造とすることができる。システムメモリ１２０は、読取り専用メモリ（ＲＯＭ）１４０およびランダムアクセスメモリ（ＲＡＭ）１５０を含む。
【００１８】
起動時などコンピュータ１００の要素間で情報の転送を助ける基本ルーチンを含む基本入出力システム１６０（ＢＩＯＳ）は、ＲＯＭ１４０に格納されている。コンピュータ１００は、ハードディスク（図示せず）からの読出し、およびそこへの書込みを行うためのハードディスクドライブ１７０、取外し可能磁気ディスク１９０からの読出し、またはそこへの書込みを行うための磁気ディスクドライブ１８０、ＣＤ  ＲＯＭまたは他の光媒体など取外し可能光ディスク１９２からの読出し、またはそこへの書込みを行うための光ディスクドライブ１９１も含む。ハードディスクドライブ１７０、磁気ディスクドライブ１８０、および光ディスクドライブ１９１は、それぞれハードディスクドライブインタフェース１９２、磁気ディスクドライブインタフェース１９３、および光ディスクドライブインタフェース１９４によってシステムバス１３０に接続されている。ドライブおよびその関連するコンピュータ読取り可能媒体は、コンピュータ読取り可能命令、データ構造、プログラムモジュール、およびパーソナルコンピュータ１００用の他のデータの不揮発性記憶装置を提供する。動作環境の例では、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、読取り専用メモリ（ＲＯＭ）など、コンピュータでアクセス可能なデータを格納することができる他のタイプのコンピュータ読取り可能媒体も使用できることを、当業者であれば理解されよう。
【００１９】
オペレーティングシステム１９５、１または複数のアプリケーションプログラム１９６、他のプログラムモジュール１９７、およびプログラムデータ１９８を含むいくつかのプログラムモジュールを、ハードディスクドライブ１７０、磁気ディスク１９０、光ディスク１９２、ＲＯＭ１４０、またはＲＡＭ１５０に格納することができる。ユーザは、キーボード１０１やポインティング装置１０２などの入力装置を介してコマンドおよび情報をコンピュータ１００に入力することができる。他の入力装置（図示せず）には、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナなどがある。これらおよび他の入力装置は、しばしばシリアルポートインタフェース１０６を介して処理ユニット１１０に接続される。シリアルポートインタフェース１０６は、システムバスに結合されているが、パラレルポート、ゲームポート、ユニバーサルシリアルバス（ＵＳＢ）など他のインタフェースによって接続することもできる。さらに、これらの装置を、適切なインタフェース（図示せず）を介して直接システムバス１３０に結合することもできる。モニタ１０７または他の種類の表示装置も、ビデオアダプタ１０８などのインタフェースを介してシステムバス１３０に結合される。モニタに加えて、パーソナルコンピュータは一般に、スピーカ、プリンタなど他の周辺出力装置（図示せず）を含む。一例として、インクなどフリーハンド入力をデジタル式に捕捉するためにペンデジタイザ１６５および付属ペンまたはスタイラス１６６が設けられている。ペンデジタイザ１６５とシリアルポートの間の直接接続を示しているが、実際にはペンデジタイザ１６５は、当分野で知られているように、処理ユニット１１０に直接、パラレルポートまたは他のインタフェースおよびシステムバス１３０を介して結合することができる。さらに、デジタイザ１６５をモニタ１０７から離して示しているが、本発明の多くの実施形態では、デジタイザ１６５の使用可能なエリアは、モニタ１０７の表示エリアと同程度の範囲を占める。さらに、デジタイザ１６５をモニタ１０７に統合する、またはモニタ１０７に重ねる個別の装置として存在させる、そうでない場合はモニタ１０７に取り付けることができる。
【００２０】
アプリケーションプログラム１９６およびプログラムモジュール１９７は、スタイラス１６６を介してインク入力を受け取り、分析する際に使用する解析モジュール、および認識モジュールを含むことができる。解析モジュールを使用して、受信したストロークを分析し、ストロークをインクオブジェクト（文字、単語、図など）にグループ分けすることができる。認識モジュールを使用してインクオブジェクトを分析し、英数字のインクオブジェクトに対して文字認識を行う。認識情報は、インクオブジェクトのプロパティとして格納することができる。こうした解析モジュールおよび認識モジュールの例は、ワシントン州レドモンドのMicrosoft CorporationのTablet PC Platform Software Development Kit（ＳＤＫ）で入手可能である。
【００２１】
コンピュータ１００は、リモートコンピュータ１０９など１または複数のリモートコンピュータへの論理接続を使用してネットワーク式環境で動作することができる。リモートコンピュータ１０９は、サーバ、ルータ、ネットワークＰＣ、ピア装置、または他の一般のネットワークノードとすることができ、図１にはメモリ記憶装置１１１のみを示しているが、一般にコンピュータ１００に関連して上述した多くの、またはすべての要素を含む。図１に示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１１２、およびワイドエリアネットワーク（ＷＡＮ）１１３を含む。こうしたネットワーキング環境は、オフィス、企業全体のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的であり、有線および無線の通信プロトコルを使用する。
【００２２】
ＬＡＮネットワーキング環境で使用する場合、コンピュータ１００は、ネットワークインタフェースまたはアダプタ１１４を介してローカルネットワーク１１２に接続される。ＷＡＮネットワーキング環境で使用する場合、パーソナルコンピュータ１００は一般に、モデム１１５、またはインターネットなどワイドエリアネットワーク１１３を介して通信を確立する他の手段を含む。モデム１１５は、内蔵型または外付けでもよく、シリアルポートインタフェース１０６を介してシステムバス１３０に接続される。ネットワーク環境では、パーソナルコンピュータ１００に関連して示したプログラムモジュール、またはその一部をリモートメモリ記憶装置に格納することができる。
【００２３】
図示したネットワーク接続は、例示であり、コンピュータ間の通信リンクを確立する他の技術を使用できることは理解されよう。ＴＣＰ／ＩＰ、Ｅｔｈｅｒｎｅｔ（登録商標）、ＦＴＰ、ＨＴＴＰなどよく知られている様々な任意のプロトコルの存在が想定され、システムは、クライアント−サーバ構造でユーザがＷｅｂベースのサーバからＷｅｂページを取り出すことができるように動作することができる。従来の様々なＷｅｂブラウザのうちの任意のものを使用してＷｅｂページ上でデータを表示し処理することができる。
【００２４】
本発明の１または複数の態様は、１または複数のコンピュータまたは他の装置によって実行される１または複数のプログラムモジュールなどのコンピュータ実行可能命令で実施することができる。一般にプログラムモジュールは、コンピュータまたは他の装置のプロセッサによって実行されたときに特定のタスクを実行する、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。コンピュータ実行可能命令は、ハードディスク、光ディスク、取外し可能媒体、固体メモリ、ＲＡＭなどのコンピュータ読取り可能媒体に格納することができる。当業者にはわかるように、様々な実施形態で、必要に応じてプログラムモジュールの機能を組み合わせる、または分散させることができる。さらに機能は、集積回路、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）など、ファームウェア、またはハードウェアの同等物で全体または一部実施することができる。
【００２５】
（データ入力ユーザインタフェースの挙動）
（概要）
上述したように、本発明の様々な実施形態によるオブジェクトをあるアプリケーションが使用して、データ入力グラフィカルユーザインタフェースの任意の特徴を制御することができる。例えば、本発明によるオブジェクトをアプリケーションが使用して、データ入力パネルなどのユーザインタフェースの位置および外観を制御することができる。本発明の様々な環境によるこうした特定の特徴の実装について、以下で詳しく説明する。
【００２６】
（ユーザインタフェースの配置）
本発明の様々な実施形態によるユーティリティオブジェクトの１つの特徴は、データ入力グラフィカルユーザインタフェースからデータを受け取るアプリケーションによって指定された作業スペースのどこかに、データ入力パネルなどのデータ入力グラフィカルユーザインタフェースを配置する能力である。本発明の一部の実施形態では、作業スペースは、ユーザに表示される任意のスペースでよい。または、作業スペースは、データ入力グラフィカルユーザインタフェースが、ユーザから入力データを受け取ることができる任意のスペースでもよい。例えば、データ入力グラフィカルユーザインタフェースがある面にわたるスタイラスの動きを介して入力データを受け取る場合、作業スペースは、スタイラスの動きを検出することができるその面の部分に対応するスペースとすることができる。
【００２７】
従って、本発明の一部の実施形態によるユーティリティオブジェクトは、アプリケーションに、ユーザインタフェースからのデータが送られるコントロールの近くにデータ入力グラフィカルユーザインタフェースを配置する能力を提供することができる。例えば、コントロールがエディットコントロールである場合、本発明によるユーティリティオブジェクトは、データ入力ユーザインタフェースをエディットコントロールの近くに配置することができ、その結果ユーザは、ユーザインタフェースおよびコントロールへのデータの入力の両方を同時に見ることができる。この特徴は、例えば、ユーザがデータ入力ユーザインタフェースを使用してフォームなど広いエリアにわたって広がる様々なエディットコントロールにデータを入力しているときに特に有用である。
【００２８】
図２Ａは、アプリケーションのグラフィカルユーザインタフェースの一例を示す図である。この図からわかるように、アプリケーションのグラフィカルユーザインタフェースが表示される作業スペースは、境界２０１を有する。上述したように、境界２０１は表示エリアの縁とすることができる。または、境界２０１は、データ入力ユーザインタフェースの入力データを受け付けることができるエリアに対応する表示されたスペースの縁とすることができる。この図からわかるように、アプリケーションのユーザインタフェースは、３つのエディットコントロール２０３〜２０７を含み、それぞれは境界ボックスによって境界が定められている。各境界ボックスの下には、それぞれ関連付けられているエディットコントロール２０３〜２０７に入力すべきデータを識別するタイトル２０９〜２１３がある。従って、図２Ａで示すアプリケーションのユーザインタフェースは、例えばユーザに個人情報を要求するコンピュータ上にレンダリングされたフォームでもよい。
【００２９】
図３は、図２Ａに示すアプリケーションのエディットコントロール２０３〜２０７へのデータ入力に使用できるデータ入力グラフィカルユーザインタフェースの１種を示している。データエントリグラフィカルユーザインタフェースは、本明細書ではデータ入力パネル３０１と呼ばれ、境界３０３を含む。境界３０３の内側が書き込み面３０５である。当業者にはわかるように、ユーザは、スタイラスなど、適切なポインティング装置を使用して電子インクを面３０５上に書き込むことができる。インクをテキストとして認識することができる（本発明の様々な実施形態にかかる一部のデータ入力パネルでは、書き込み面は、スタイラスからの接触に応答して電子インクを生成するだけの場合がある）。本発明の様々な実施形態では、スタイラスによって示された特定のジェスチャを、代わりにある機能を実行するコマンドとして認識する場合もある。データ入力パネル３０１は、送信ボタン３０７、複数のコントロールボタン３０９、および補助インタフェースボタン３１１，３１３も含む。
【００３０】
ユーザが書き込み面３０５上に電子インクを書き込んだ後、データ入力パネル３０１は、所定の期間の後、電子インクをテキストに変換する。しかし、ユーザは、認識プロセスのスピードアップを望む場合、ポインティング装置を使用して送信ボタン３０７を活性化させてもよい。テキストは、電子インクから認識されると、一般にアプリケーションのコントロールの挿入ポイントに挿入される。認識されたテキストを挿入ポイントに挿入することに加えて、ユーザは、コントロールボタン３０９を使用して、文字以外のアクションも挿入ポイントに挿入することができる。例えば、コントロールボタン３０９を使用して、ユーザは、挿入ポイントを既存のテキストにわたって前方または後方に移動させ、削除し、バックスペースし、改行を作成することができる。
【００３１】
以下でより詳しく説明するように、補助インタフェースボタン３１１，３１３の活性化によって、データ入力パネル３０１に、それぞれ数字および記号を含む補助ソフトキーボードを表示するよう命令し、クローズボタン３１５を活性化させることによってデータ入力パネル３０１を閉じる。データ入力パネル３０１は、面選択ボタン３１７，３１９も含む。以下でも詳しく説明するように、面選択ボタンによってユーザは、データ入力パネル３０１によって表示されるデータ入力面の間を切り換えることができる。図３において、書き込み面ボタン３１７が活性化されると、データ入力パネル３０１に、書き込み面３０５を表示するよう促す。
【００３２】
ユーザは、エディットコントロールにデータを挿入したいとき、最初に、例えばスタイラス、マウスなどのポインティング装置を使用してエディットコントロールで挿入ポイントを設定する。次に図２Ｂを参照すると、例えば、エディットコントロール２０３にデータを挿入しようとしているユーザは、エディットコントロール２０３の境界内に挿入ポイント２１５を設定する。典型的には、エディットコントロール内に挿入ポイントを配置することによって、コンピュータのオペレーティングシステムが入力フォーカスをそのエディットコントロールにシフトする。つまり、オペレーティングシステムは、ユーザによる将来のデータ入力がそのエディットコントロールに引き渡されることを認識する。エディットコントロール２０３が入力フォーカスを受け取ったことに応答して、本発明の様々な実施形態によるユーティリティオブジェクトは、共有構成要素に指示して、エディットコントロール２０３にデータを入力するためのデータ入力パネル３０１を表示する。共有構成要素は、複数のユーティリティオブジェクトの間で共有することができるグラフィカルユーザインタフェースをカプセル化し、インスタンス化する。以下で詳しく説明するように、共有グラフィカルユーザインタフェースの特徴は、ユーザインタフェースを制御するオブジェクトによって提供されるデータに応じて異なる。
【００３３】
本発明の一部の実施形態では、ユーティリティオブジェクトは、ユーザが挿入ポイントをエディットコントロールに配置するときはいつでも、データ入力パネル３０１を表示するよう共有構成要素に指示することができる。しかし、本発明の別の実施形態では、ユーティリティオブジェクトは、ユーザがスタイラスで挿入ポイントを配置したことのみに応答して、データ入力パネル３０１を表示するように共有構成要素に指示することができる。スタイラスのポインティング装置で作成された挿入ポイントのみに応答することによって、オブジェクトは、ユーザがキーボードやマウスなどの異なるデータ入力ツールを使用しているときに、データ入力パネル３０１が表示されないようにする。従って、データ入力パネル３０１は、実際にデータをコントロールに入力することが必要なときのみに表示される。
【００３４】
エディットコントロール２０３が入力フォーカスを受けていると判断したとき、ユーティリティオブジェクトは、エディットコントロール２０３に対して特定の位置にデータ入力パネル３０１を表示するように共有構成要素に指示することができる。例えば、オブジェクトは、データ入力パネル３０１の最も近い水平方向の境界の縁と、エディットコントロール２０３の最も近い水平方向の境界の縁の間の垂直方向のオフセットを指定することができる。同様に、オブジェクトは、データ入力パネル３０１の最も近い垂直方向の境界の縁と、エディットコントロール２０３の最も近い垂直方向の境界の縁の間の水平方向のオフセットを指定することができる。本発明の一部の実施形態では、オブジェクトは、データ入力パネル３０１の高さおよび幅を指定して、関連のエディットコントロールの近くにあるままで所定の作業スペース内に確実に収まるようにすることさえできる。
【００３５】
実施形態の例では、スペースが作業スペースの境界２０１内で使用可能な場合、ユーティリティオブジェクトは、データ入力パネル３０１をエディットコントロール２０３の境界の下側に、右側にシフトさせて表示するように共有構成要素に指示する。例えば、オブジェクトは、共有構成要素に、データ入力パネル３０１の上側の境界を、エディットコントロールブロック２０３の下側の境界の０．２５インチ（０．６３５ｃｍ）に相当するピクセル下方に配置するよう指図することができる。同様に、オブジェクトは、共有構成要素に、データ入力パネル３０１の左側の垂直方向の境界をエディットコントロール２０３の左側の垂直方向の境界の１インチ（２．５４ｃｍ）の１／１６に相当するピクセル右方に配置するように指図することができる。
【００３６】
この位置構成は、特に、アプリケーションが様々なエディットコントロールを備えるフォームを表示しているときに便利である。データ入力パネル３０１をエディットコントロール２０３の下側に、わずかに右側にシフトさせて配置することにより、データ入力パネル３０１は、エディットコントロール２０３の近くに配置されたまま、しかし、エディットコントロール２０３に入力されるテキストを見るユーザの視界を妨げることはない。また、この配置によって、ユーザは、エディットコントロール２０５の少なくとも一部をエディットコントロール２０３のすぐ下で見ることができ、その結果ユーザは、エディットコントロール２０３へのデータ入力を忘れることもない。さらに、エディットコントロール２０５は部分的に可視であり、その結果ユーザは、スタイラスを使用して入力フォーカスをエディットコントロール２０５に移動させコントロールをターゲットにすることができる。さらに、エディットコントロール２０３に関連付けられたタイトル２０９が左寄せの場合、データ入力パネル３０１を右側にシフトさせた位置に配置することによって、ユーザは、タイトル２０９の少なくとも最初の数文字を見ることができ、従って、ユーザがどのデータをエディットコントロール２０３に入力すべきかを覚えておくのを助ける。
【００３７】
データ入力パネル３０１が表示されると、ユーザは、データ入力パネル３０１の書き込み面を使用して、テキストをエディットコントロール２０３に入力することができる。例えば、図２Ｃに示すように、ユーザは、名前「John Doe」を電子インク２１７で書き込み面に手書きするかもしれない。所定の時間の後、またはユーザが送信ボタン３０７を活性化させた場合、データ入力パネル３０１は、インク２１７からテキストを認識する。次いで、図２Ｄに示すように、データ入力パネル３０１は、認識されたテキスト２１９をエディットコントロール２０３に挿入する。
【００３８】
本発明の様々な実施形態で、オブジェクトは、データ入力パネル３０１のデフォルトの位置を使用すると、関連付けられたエディットコントロールを隠さざるを得ない状況を補償することができる。例えば、図４に示すように、データ入力パネル３０１を使用してエディットコントロール２０７にテキストを挿入している。エディットコントロール２０７は作業スペースの境界２０１のすぐ上にあるため、データ入力パネル３０１をエディットコントロール２０７の下に挿入することはできない。この状況で、オブジェクトは、共有構成要素に、データ入力パネル３０１をエディットコントロール２０７の上側に、右側にシフトさせた位置にレンダリングするよう指示することができる。より具体的には、オブジェクトは、共有構成要素に垂直方向の負のオフセットを提供し、それによってデータ入力パネル３０１はエディットコントロール２０７の上側に配置される。
【００３９】
同様に、データ入力パネル３０１をエディットコントロールの右側にシフトさせて表示する余裕が十分ない場合、オブジェクトは、共有構成要素に、データ入力パネル３０１をエディットコントロールの左側にシフトさせて配置するよう指示することができる。例えば、図５に示すように、エディットコントロール２０３は、作業スペースの境界２０１の垂直方向部分に近すぎて、データ入力パネル３０１をエディットコントロール２０３の右側にシフトさせて表示することができない。代わりに、オブジェクトは、共有構成要素に、データ入力パネル３０１をエディットコントロール２０３の左側にシフトさせて配置するよう指示する。つまり、オブジェクトは、共有構成要素に水平方向の負のオフセット値を提供する。従って、データ入力パネル３０１は、背後にあるエディットコントロール２０５を完全には隠さない。また、アプリケーションがそのユーザインタフェースの右辺に沿ってエディットコントロールを含んでいる場合、これらのエディットコントロールの右寄せされたタイトルは、本発明のこれらの実施形態に従ってデータ入力パネル３０１を使用するユーザには依然として部分的に可視である。同様に、データ入力パネル３０１をエディットコントロールの下側に、左側にシフトさせて表示する余裕が十分ない場合、オブジェクトは、共有構成要素に、図６に示すように、データ入力パネル３０１をエディットコントロールの上側に、左側にシフトさせて表示するよう指示することができる。
【００４０】
場合によっては、ユーザは、データ入力パネル３０１を使用してマルチラインエディットコントロールにデータを入力したいことがある。本発明の様々な実施形態によれば、データ入力パネル３０１を、上記のシングルラインエディットコントロールを基準にして配置したのと同じように、マルチラインエディットコントロールを基準にして配置することができる。しかし、マルチラインエディットコントロールが大きすぎてデータ入力パネル３０１がマルチラインエディットコントロールの上側または下側に配置できない場合、オブジェクトは、共有構成要素に、データ入力パネル３０１をエディットコントロール自体の中に配置するよう指示することができる。例えば、挿入ポイント２１５がマルチラインエディットコントロールの上半分（または作業スペースの上半分）に配置されている場合、オブジェクトは、共有構成要素に、データ入力パネル３０１をマルチラインエディットコントロールの一番下の位置（または作業スペース内の一番下の使用可能な位置）に配置するよう指示することができる。同様に、挿入ポイント２１５がマルチラインエディットコントロールの下半分（または作業スペースの下半分）に配置されている場合、オブジェクトは、共有構成要素に、データ入力パネル３０１をマルチラインエディットコントロールの一番上の位置（または作業スペース内の一番上の使用可能な位置）に配置するよう指示することができる。しかし、当業者にはわかるように、ユーザを混乱させる、またはユーザの作業の流れを妨害するのを避けるために、使用中、データ入力パネル３０１の動きを最小限に抑えることが有利である。従って、本発明の様々な実施形態では、ユーザが挿入ポイント２１５をマルチラインエディットコントロールの上半分から下半分に、またはその逆に移動させたときだけデータ入力パネル３０１を配置し直す。
【００４１】
本発明の様々な実施形態では、上記の自動配置機能は無視または変更できることも当業者であれば理解されたい。例えば、本発明に従ってオブジェクトを使用するソフトウェアアプリケーションを作成している開発者は、自動配置機能を使用不可にして、代わりにアプリケーションを介して呼び出されるデータ入力ユーザインタフェースの代替の位置情報を提供することができる。従って、開発者は、常に関連するコントロールのすぐ上またはすぐ下にデータ入力パネル３０１を配置することを選択してもよい。または、開発者は、ユーザがデータを特定のコントロールに挿入しているときは、データ入力ユーザインタフェースについて特定の位置となることを好むかもしれない。この構成では、その特定のコントロールに関連付けられているオブジェクトは、ユーザインタフェースの位置およびサイズの正確な値を指定することができる。
【００４２】
本発明のさらに別の実施形態では、オブジェクトは、確実に関連付けられているデータ入力パネル３０１をエディットコントロールとともに移動させるようにすることができる。例えば、ユーザがポインティング装置を操作することによって移動させることができるウィンドウ内に、一部のエディットコントロールを含む。以下でより詳しく説明する方法を使用して、オブジェクトを介して動作するアプリケーションは、データ入力パネル３０１に、その関連付けられているエディットコントロールとともに移動するよう指図することができる。この方法によれば、データ入力パネル３０１は、アプリケーションによって指定された新しい位置に直接移動する。当然、データ入力タブレット３０１を漸進的に移動させ、従ってデータ入力パネル３０１の作業スペースにわたる動きを連続的に表示する別の方法を使用することもできる。
【００４３】
（ユーザインタフェースの外観）
データ入力グラフィカルユーザインタフェースのサイズおよび位置を指定することに加えて、本発明の様々な実施形態によるユーティリティオブジェクトは、データ入力グラフィカルユーザインタフェースの外観を指定することもできる。従って、本発明の様々な実施形態によるユーティリティオブジェクトは、共有構成要素が表示されたデータ入力パネル３０１にどの機能を含むかを決定することができる。
【００４４】
ここで図３に戻ると、データ入力パネル３０１は、上述したように、異なる２つのデータ入力面を提供することができる。データ入力パネル３０１は、その図に示すように書き込み面３０５を表示しているとき、書き込み面３０５にわたるスタイラスの動きに対応する電子インクを生成する。一方、データ入力パネル３０１は、キーボード面を表示している場合、ソフトキーボード上で活性化される各キーに対応するテキストの文字を生成する。上述したように、ユーザは、面ボタン３１７，３１９を活性化させることによってこれらの面の間を前後に切り換えることができる。しかし、本発明の様々な実施形態では、ユーティリティオブジェクトは、入力フォーカスがコントロールにシフトされたときにデータ入力パネル３０１が最初に特定の面を表示することを指定することができる。
【００４５】
例えば、アプリケーションは、パスワードや製品の型式番号など、数字および文字のランダムな組合せを受け取るエディットコントロールを含むことができる。この種のデータでは、書き込み面３０５は、データを入力するのに最適な面ではないことがある。多くの手書き認識器では、ランダムな文字を認識することは困難である。さらに、多くのパスワードエディットコントロールは、そのデータを正確には表示せず、代わりに「＊」など単一の文字のみを表示して、傍観者があるユーザのパスワードをうっかり見ることを防ぐようにする。従って、ユーザの手書きが誤って認識された場合、ユーザは、認識結果を見てどの文字が誤って認識されているかを判断することさえできない。本発明の様々な実施形態では、このタイプのエディットコントロールに関連付けられているオブジェクトは、共有構成要素に、最初にキーボード面を表示するよう指示することができる。キーボード面は、ユーザに、ランダムな数字および文字を入力するのにより信頼性の高い技術を提供するためである。
【００４６】
書き込み面３０５またはキーボード面の最初の表示を指定することに加えて、ユーティリティオブジェクトは、共有構成要素によって表示できる任意の面の最初の表示または永続的な表示を指定することができる。例えば、図７は、アジア言語ユーザが使用するデータ入力パネル７０１を示す。単一エリアを備える書き込み面３０５の代わりに、このデータ入力パネル７０１の書き込み面は、ユーザが単一のアジア言語文字を各エリア７０３に書き込むことができるように複数の書き込みエリア７０３を同時に表示する。従って、エディットコントロールがデータをアジア言語文字の形で受信するように構成されている場合、そのエディットコントロールに関連付けられているユーティリティオブジェクトは、共有構成要素がアジア言語のデータ入力パネル７０１を最初に表示するよう指定することができる。ラテン語書き込み面３０５に加えて、アジア言語書き込み面をデータ入力パネル３０１に含めることができることに注意されたい。従って、本発明の一部の実施形態では、ユーザは、アジア言語書き込み面、ラテン語書き込み面３０５、およびキーボード面の間で切り換えることができる。
【００４７】
さらに別の実施形態では、任意の数の様々な特化された面を使用することができる。例えば、ＵＲＬアドレスを受信するように構成されているブラウザのエディットコントロールは、文字列「ｗｗｗ．」、「．ｃｏｍ」、「．ｎｅｔ」、「．ｏｒｇ」、および「．ｇｏｖ」のキーを含むソフトキーボードの表示を指定することができる。同様に、ユーティリティオブジェクトは、例えばデータ入力パネル３０１がパスワードや部品の型式番号のランダムな文字をよりよく認識するのを助けるために、ラテン語ユーザ用の分割された書き込み面を有する面の表示を指定することができる。また、ユーティリティオブジェクトは、ユーザインタフェースが電子インクをテキストに変換することなく電子インクを集める面を含むことを指定することもできる。この種の面は、例えばユーザの原本の署名を捕捉するときに有用となり得る。
【００４８】
（データユーザインタフェースの呼出）
データ入力ユーザインタフェースなどのユーザインタフェースの外観または他のプロパティを決定することに加えて、本発明の様々な実施形態によるユーティリティオブジェクトを使用して、ユーザインタフェースがどのように呼び出されるかを制御することもできる。例えば、本発明の一部の実施形態では、アプリケーションからの状況情報に基づいて、ユーティリティオブジェクトは、スタイラスまたはペンがユーティリティオブジェクトに関連付けられているコントロールの境界エリア内をさまよっているかどうかを判断することができる。それに応答して、ユーティリティオブジェクトは、ペンが境界エリアの内側または外側をさまよっているかどうかに従って、共有構成要素に、データ入力ユーザインタフェースを自動的に表示する、または隠すように指示することができる。この境界エリアは、コントロールのまさに境界に接することができる、またはペンが可視のコントロールの境界に近づくだけでよいように、より大きいエリアをカバーするようにすることができる。
【００４９】
さらに、ペン（または他のポインティング装置）が挿入ポイントを含むコントロールの範囲に移動するとき、ユーティリティオブジェクトは、共有構成要素に、データ入力ユーザインタフェースをすぐに、またはわずかの遅延の後で表示するよう指示することができる。遅延によってユーザは、他の隣接するコントロールをターゲットにしているときに、ユーティリティオブジェクトに関連付けられているコントロールにわたって、またはその上をペン（または他のポインティング装置）でドラッグし、その結果、ユーザがユーティリティオブジェクトに関連付けられているコントロールの内側またはその上で瞬間的にペンを持つことによって、データ入力ユーザインタフェースにアクセスしたいことを明示的に示したときにのみ、データ入力ユーザインタフェースが表示されるようにすることができる。本発明の別の実施形態では、ユーティリティオブジェクトは、共有構成要素に、ペンが全表示エリアの範囲内にあるときにのみデータ入力ユーザインタフェースを表示するよう指示し、その結果、ペンが全画面の範囲内にあるときにのみデータ入力ユーザインタフェースが可視になるようにすることができる。
【００５０】
本発明のさらに別の実施形態によれば、ユーティリティオブジェクトは、データ入力ユーザインタフェースを直接呼び出さない。代わりに、ユーティリティオブジェクトは、データ入力ユーザインタフェースをインスタンス化するターゲットを活性化させることができる。より具体的には、共有構成要素を、データ入力ユーザインタフェースを呼び出すターゲットを作成するように構成することができる。または、アプリケーションプログラミングインタフェースなど別の構成要素を使用して、データ入力ユーザインタフェースを呼び出すターゲットを作成することができる。この構成では、ユーティリティオブジェクトは、共有構成要素（または適切な構成要素）に、例えば、ユーザがユーティリティオブジェクトに関連付けられているいくつかの型のコントロールにデータを入力したいときに、データ入力ユーザインタフェースを呼び出すターゲットを作成するよう指示することができる。従って、ターゲットを呼び出すことで、ユーティリティオブジェクトによって、ユーザは、データ入力ユーザインタフェースを連続的に表示させることなく、必要に応じてデータ入力ユーザインタフェースを容易に呼び出すことができるようになる。
【００５１】
さらに、ユーティリティオブジェクト（またはユーティリティオブジェクトをホストしているアプリケーション）は、ペンまたはスタイラス（または他の適切なポインティング装置）の位置に関連するイベントメッセージを監視して、ペンまたはスタイラス（または他のポインティング装置）がデータ入力ユーザインタフェースおよび表示ターゲット上、または一部の実施形態ではその近くをいつ移動したかを決定することができる。それに応答して、ユーティリティオブジェクトは、共有構成要素（または他の適切な構成要素）に、ペン（または他のポインティング装置）がターゲット上またはその近くに配置されている間のみにデータ入力ユーザインタフェースを表示するよう指示することができる。本発明の一部の実施形態では、例えば、データ入力ユーザインタフェース表示ターゲットは、四角形、円形、または他の任意の形状とすることができ、挿入ポイントを含むコントロールの上、下、左、右に、および／またはそれに重なるように配置することができる。また、ターゲットをすぐに、または遅延の後に表示し、次にデータ入力ユーザインタフェースをすぐに、または遅延の後に表示することができる。
【００５２】
（ユーザインタフェースの他の特徴）
本発明の様々な実施形態で使用するデータ入力ユーザインタフェースは、所望の任意のソースから実施できることに注意されたい。例えば、ユーザインタフェースの異なる面を、ユーティリティオブジェクトからの指示に応答してユーザインタフェースをレンダリングする共有構成要素によって提供することができる。または、ユーティリティオブジェクトは、１または複数の面を共有構成要素に提供することができる。さらに、アプリケーションは、１または複数の面をユーティリティオブジェクトに提供し、ユーティリティオブジェクトが、その面を共有構成要素に提供することができる。本発明の一部の例では、共有構成要素は、ユーザインタフェース自体をインスタンス化する実行可能構成要素とすることができる。共有構成要素は、代わりに、複数のユーティリティオブジェクト間でデータパネルの状態情報を共有するよう働く非実行の構成要素とすることができる。さらに、本発明の一部の実施形態では、共有構成要素をまったく除外することができる。こうした実施形態では、ユーティリティオブジェクトは、データ入力グラフィカルユーザインタフェース自体をレンダリングすることができる。
【００５３】
インタフェース面の表示を指定することに加えて、本発明の様々な実施形態では、ユーティリティオブジェクトは、データ入力ユーザインタフェースが任意の特徴を最初に、または永続的に表示することを指定することができる。例えば、データ入力パネル３０１は、補助キーボードボタン３１１，３１３を含む。補助キーボードボタン３１１が活性化すると、データ入力パネル３０１は、図８に示すように、数字０〜９、「，」文字、および「．」文字を含む補助キーボード８０１を表示する。同様に、補助キーボードボタン３１７が活性化すると、データ入力パネル３０１は、図９に示すように、様々な記号のキーを含む補助記号キーボード９０１を表示する。本発明の様々な実施形態では、ユーティリティオブジェクトは、データ入力パネル３０１がこれらのボタン、またはユーザに便利となり得る任意の追加の補助表示を表示または非表示できるようにすることを指定することができる。
【００５４】
さらに、本発明によるユーティリティオブジェクトは、単にデータ入力ユーザインタフェース内の構成要素の構成を定義することができる。例えば、図１０に示すデータ入力パネル３０１の特徴は、図３に示すデータ入力パネル３０１のものと逆である。典型的には、この構成は、右手または左手で書き込む際のユーザの好みに基づく。この構成は、ユーティリティオブジェクトによって指定することもできる。
【００５５】
本発明の一部の実施形態では、ユーティリティオブジェクトは、単に共有構成要素に対するデータ入力ユーザインタフェースの特徴を識別するだけである。つまり、オブジェクトは、所定の値を共有構成要素に提供し、次に、共有構成要素は、その特徴に基づいて前もって格納されているユーザインタフェースをレンダリングする。または、上述したように、ユーティリティオブジェクトがインタフェースの一部またはその全体を実行可能構成要素に提供して、ユーザに表示できるようにする。本発明の様々な実施形態によるユーティリティオブジェクトは、その関連するコントロールから離してインスタンス化することはできないことに注意されたい。代わりに、オブジェクトをコントロールに埋め込むことができる。
【００５６】
（ユーティリティオブジェクトの特徴および動作）
（概要）
本発明によるユーティリティオブジェクトの全体的な動作は上述したが、次に、本発明の１または複数の特定の実施形態によるユーティリティオブジェクトの特徴をより詳しく説明する。本発明の一部の実施形態によるユーティリティオブジェクトは、プロパティ、メソッド、およびイベントを含む。上述したように、プロパティは、オブジェクトによって制御されるデータ入力ユーザインタフェースの特徴を定義する。メソッドによってアプリケーションは、例えばユーザによるアクションに応答してデータ入力ユーザインタフェースの特徴を変更することができる。その場合、イベントとは、オブジェクトが応答する、オブジェクトが注目する特定のアクションの発生である。
【００５７】
（プロパティ）
本発明の様々な実施形態によるユーティリティオブジェクトは、ＡｔｔａｃｈｅｄＥｄｉｔＷｉｎｄｏｗプロパティ、Ｂｕｓｙプロパティ、およびＦａｃｔｏｉｄプロパティを含むことができる。ＡｔｔａｃｈｅｄＥｄｉｔＷｉｎｄｏｗプロパティは、データ入力パネルが結び付けられるエディットコントロールボックスのウィンドウハンドルを識別し、それによってデータ入力パネルからのデータが不正なエディットコントロールにうっかり送信されないようにする。Ｂｕｓｙプロパティは、オブジェクトを使用するアプリケーションによって読み取ることができ、関連するデータ入力パネルが現在インクで書かれているか、インクを認識しているかを識別する。Ｆａｃｔｏｉｄプロパティは、データ入力パネルの手書き認識にバイアスをかけるファクトイド（factoid）、または１組のヒューリスティックを識別して、特定のコントロールのその精度を向上させる。例えば、ユーザの年齢を受け取るコントロールに関連付けられているファクトイドは、文字より数字として入力電子インクを認識するようにデータ入力パネルにバイアスをかけることができる。
【００５８】
ユーティリティオブジェクトは、Ｈｅｉｇｈｔプロパティ、Ｗｉｄｔｈプロパティ、ＨｏｒｉｚｏｎｔａｌＯｆｆｓｅｔプロパティ、およびＶｅｒｔｉｃａｌＯｆｆｓｅｔプロパティを含むこともできる。上述したように、ＨｏｒｉｚｏｎｔａｌＯｆｆｓｅｔプロパティおよびＶｅｒｔｉｃａｌＯｆｆｓｅｔプロパティは、アプリケーションによってエディットコントロールを基準にして、データ入力パネルの位置を定義するよう設定することができる。ＨｏｒｉｚｏｎｔａｌＯｆｆｓｅｔプロパティのデフォルト値は、１インチ（２．５４ｃｍ）の１／１６に相当するピクセルとすることができ、ＶｅｒｔｉｃａｌＯｆｆｓｅｔプロパティのデフォルトの値は、０．２５インチ（０．６３５ｃｍ）に相当するピクセルとすることができる。これらのプロパティのそれぞれは、アプリケーションが読み取り、書き込むことができる。Ｈｅｉｇｈｔプロパティは、アプリケーションにテキストパネルユーザインタフェースの高さを提供する。本発明の様々な実施形態では、様々なディスプレイの解像度に適したパネルの一貫した外観サイズを維持するために、Ｈｅｉｇｈｔプロパティのデフォルトの値を、例えば、９６ｄｐｉのディスプレイでは１５７ピクセル、１２０ｄｐｉのディスプレイでは１９６．２５ピクセル、１３３ｄｐｉのディスプレイでは２１７．５１ピクセルとすることができる。同様に、Ｗｉｄｔｈプロパティは、アプリケーションにデータ入力パネルの幅を提供する。本発明の一部の実施形態では、様々なディスプレイの解像度に適したパネルの一貫した外観サイズを維持するために、Ｗｉｄｔｈプロパティのデフォルトの値を、９６ｄｐｉのディスプレイでは５７０ピクセル、１２０ｄｐｉのディスプレイでは７１２．５ピクセル、１３３ｄｐｉのディスプレイでは７８９．７ピクセルとすることができる。本発明の一部の実施形態では、アプリケーションがＨｅｉｇｈｔプロパティまたはＷｉｄｔｈプロパティを変更することはできないが、本発明のさらに別の実施形態では、代わりにアプリケーションが片方または両方のプロパティを変更することができる。
【００５９】
ユーティリティオブジェクトは、さらに、アプリケーションにデータ入力パネルの左縁の水平方向の位置を提供するＬｅｆｔプロパティ、およびアプリケーションにデータ入力パネルの上縁の垂直方向の位置を提供するＴｏｐプロパティを含むことができる。また、ユーティリティオブジェクトは、入力パネルの可視状態を取り出す、または設定するＶｉｓｉｂｌｅプロパティを含むこともできる。従ってアプリケーションは、表示されるデータ入力パネルを表示したい、または隠したい場合、Ｖｉｓｉｂｌｅプロパティの値を変更することができる。典型的には、このプロパティのデフォルトの値は、データ入力パネルを表示せず、ユーザがスタイラスを使用してフォーカスをその関連するエディットコントロールにシフトして、そのエディットコントロールに挿入ポイントを配置したときにのみ変わるが、Ｖｉｓｉｂｌｅプロパティによってアプリケーションは、ユーザがペンでエディットコントロール内に挿入ポイントを配置することによって、入力フォーカスをエディットコントロールに変更したかどうかに関係なく、パネルが可視であるかを明示的に制御できるようになる。このデフォルトの値を使用して、複数のデータ入力パネルが同時に表示されるのを防ぐこともできる。しかし、本発明の代替実施形態では、ユーティリティオブジェクトによって、複数のデータ入力パネルを同時に表示させることもできる。
【００６０】
上記に示したプロパティに加えて、ユーティリティオブジェクトは、ＤｅｆａｕｌｔＰａｎｅｌプロパティおよびＣｕｒｒｅｎｔＰａｎｅｌプロパティを有することもできる。ＤｅｆａｕｌｔＰａｎｅｌプロパティは、デフォルトでデータ入力パネルにどの面が表示されるかを決定し、ＣｕｒｒｅｎｔＰａｎｅｌプロパティは、データ入力パネルにどの面が現在表示されているかを決定する。特化されたパネルに使用できるパネル値は、多種多様であるが、（キーボード面および書き込みパッド面を有する）本発明の実施形態の例では、４つの可能なパネル値がある。
【００６１】
第１のパネル値、Ｄｅｆａｕｌｔ値は、ＤｅｆａｕｌｔＰａｎｅｌプロパティのみに提供され、データ入力パネルが最初に適切な入力言語用のデフォルトの手書き面で開始し、次にオブジェクトインスタンスの残りの寿命の間ユーザが選択する任意の面を保持することを指定する。第２のパネル値、Ｉｎａｃｔｉｖｅ値は、オブジェクト自体によってＣｕｒｒｅｎｔＰａｎｅｌプロパティのみに割り当てられ、アプリケーションによってのみ読み取ることができる。この値は、データ入力パネルが使用不可であることを示す。これは、別のデータ入力パネルに関連付けられているコントロールに現在フォーカスがある場合に起こり得る。第３のパネル値、Ｈａｎｄｗｒｉｔｉｎｇ値は、ＣｕｒｒｅｎｔＰａｎｅｌプロパティおよびＤｅｆａｕｌｔＰａｎｅｌプロパティの両方に割り当てられ、そこから読み取ることができる。このパネル値は、共有構成要素に、データ入力パネルが表示されるときに適切な入力言語用の手書き面を表示させる。同様に、第４のパネル値、Ｋｅｙｂｏａｒｄ値は、ＣｕｒｒｅｎｔＰａｎｅｌプロパティおよびＤｅｆａｕｌｔＰａｎｅｌ値の両方に割り当てられ、そこから読み取ることができる。Ｋｅｙｂｏａｒｄパネル値は、共有構成要素に、データ入力パネルが表示されるときに適切な入力言語用のキーボード面を表示させる。
【００６２】
上述したプロパティに加えて、本発明の様々な実施形態によるオブジェクトは、データ入力グラフィカルユーザインタフェースの特徴を設定する所望の任意のプロパティを含むことができることを理解されたい。例えば、あるオブジェクトは、特定の認識辞書、入力手書きの認識にバイアスをかけるファクトイド・ヒューリスティック、一般的な、または特定のコントロールに挿入されるテキストを認識するための特定の認識エンジンの使用、またはユーザが新しい手書きを入力するのをやめるのを待つことなくユーザインタフェースが入力手書きの背景認識を行うようにする命令など、ユーザインタフェースに１または複数の認識コンテキストの特徴を指定するプロパティを含むことができる。さらに、オブジェクトは、ユーザインタフェースに、認識されたテキストを戻すための割り当てられた認識タイムアウト値、特定の電子インクの濃さまたは色を使用する、またはキーボード面の所望のキーを強調表示させるプロパティを含むことができる。オブジェクトのプロパティまたはメソッドは、入力パネルがインクを直接コントロールに挿入する、またはすでにコントロールに挿入されているインクにアクセスできるようにすることができる。また、オブジェクトは、データ入力パネルに複数行を書き込み面に表示させる、ユーザが自発的にデータ入力パネルを閉じるかどうかを決定する、またはアプリケーションにデータ入力パネルの状況（すなわち、パネルが使用中であるか、パネルが電子インクを含んでいるかなど）を知らせるプロパティを含むこともできる。
【００６３】
上述した種類の１または複数のプロパティは、コントロール自体に埋め込むことができることにも注意されたい。例えば、アプリケーションは、社会保障番号を受けるリッチエディットコントロールに入力されたデータが、文字に優先して数字が認識されるよう手書きの認識にバイアスをかけるファクトイドを使用して認識されるよう指定することができる。本発明の様々な実施形態では、こうした任意のプロパティを、関連付けられたオブジェクトによって使用するのではなく、特定のコントロールに埋め込むことができる。また、アプリケーションは、ユーティリティオブジェクトを内部で使用するコントロールを含むことができ、オブジェクトのアプリケーションプログラミングインタフェースを、それ自体のアプリケーションプログラミングインタフェース上で見えるようにする、または見せないようにすることができる。しかし、この種のコントロールは、たとえ個別のユーティリティオブジェクトを使用していても、入力フォーカスを受信したときに依然として入力パネルを表示する。
【００６４】
（メソッド）
上述したプロパティに加えて、本発明の様々な実施形態によるユーティリティオブジェクトは、いくつかのメソッドを実行することができる。例えば、ユーティリティオブジェクトは、共有構成要素に、待ち状態の任意の手書きに対して手書き認識をすぐに実行し、認識結果を結び付けられているエディットコントロールに送信するよう要求するＣｏｍｍｉｔＰｅｎｄｉｎｇＩｎｐｕｔメソッドを実行することができる。共有構成要素は、典型的には、ある事前設定されたタイムアウト期間の後で、手書き認識を自動的に実行するので、アプリケーションがＣｏｍｍｉｔＰｅｎｄｉｎｇｌｎｐｕｔメソッドを使用して、直接入力を認識させ、送らせるようにする。また、オブジェクトは、ユーザがその結び付けられているエディットコントロールから入力フォーカスを離しつつあることを検出したとき、またはアプリケーションがシャットダウンされつつあることを検出したとき、このメソッド自体を使用することもできる。
【００６５】
また、ユーティリティオブジェクトは、コントロールの入力フォーカスがスタイラスを使用して設定されているときに、データ入力パネルが表示されるかどうかを指定するブール値を設定または取り出すＡｕｔｏＳｈｏｗメソッドを含むこともできる。従って、ＡｕｔｏＳｈｏｗメソッドを使用して、ユーザがペンまたはスタイラスを使用して結び付けられているコントロールにフォーカスを設定したとき、データ入力パネルの活性化を不能にすることができる。つまり、ＡｕｔｏＳｈｏｗメソッドを使用して、アプリケーションがＶｉｓｉｂｌｅプロパティの値を変更するときにのみデータ入力パネルが確実に可視になるようにすることができる。ユーティリティは、データ入力パネルの位置を固定画面位置に設定するＭｏｖｅＴｏメソッド、および初期化時にも読み取られるデータ入力パネル設定値を共有構成要素に更新させるＲｅｆｒｅｓｈメソッドを実行することもできる。
【００６６】
また、アプリケーションが、Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Edition オペレーティングシステムなど、テキストサービスフレームワークを提供するオペレーティングシステムとともに使用されている場合、ユーティリティオブジェクトは、リッチエディットコントロールまたはインクエディットコントロール（つまりテキストサービスフレームワークをサポートするエディットコントロール）に関連付けられたときにＥｎａｂｌｅＴｅｘｔＳｅｒｖｉｃｅｓＦｒａｍｅｗｏｒｋメソッドを実行することができる。当業者にはわかるように、テキストサービスフレームワークは、様々なメタデータをテキストに関連付けることができる。例えば、テキストが手書きまたは音声から認識された場合、そのテキストは別の認識選択を有する。アプリケーションがテキストサービスフレームワークをサポートしている場合、アプリケーションがテキストを受信したとき、そのテキストに関連付けられている任意のメタデータも受信し、維持する。従って、このメソッドを実行することによって、共有構成要素に、結び付けられているコントロール上で適切なテキストサービスフレームワーク（Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Edition オペレーティングシステムとともに使用するCommon Text Frameworkなど）を開始するよう指示する。
【００６７】
修正機能の提供とともに、テキストサービスフレームワークを使用して、認識された入力データが確実にその宛先エディットコントロールと正確に一致するようにすることもできる。より具体的には、リッチエディットコントロールまたはインクエディットコントロールがCommon Text Frameworkを呼び出したとき、Common Text Frameworkは、認識されたテキストをコントロールと関連付けるための、その後認識されるテキストのメタデータを作成する。従って、入力フォーカスがコントロールからシフトされた後でさえ、Common Text Frameworkは、認識されたテキストをコントロールと一致させ、認識されたテキストが確実にコントロールに挿入されるようにすることができる。
【００６８】
しかし、Common Text Frameworkでは、オブジェクトは、リッチエディットコントロールに、Common Text FrameworkへのＯＬＥインタフェースを要求するよう指示するメッセージを送信する必要がある（つまりリッチエディットコントロールは、ＣＯＭインタフェースへのポインタにＣＯＭの特徴にアクセスするよう要求する必要がある）ことに注意されたい。本発明の一部の実施形態では、このメッセージを、自動的に実行するのではなく、ＥｎａｂｌｅＴｅｘｔＳｅｒｖｉｃｅｓＦｒａｍｅｗｏｒｋメソッドで実行する。何故ならば、オブジェクトがリッチエディットコントロールに結び付けられていない場合、メッセージには意味がなく、望ましくない結果を引き起こす可能性があるからである。しかし、本発明の代替実施形態では、ユーティリティオブジェクトは、コントロールまたはウィンドウのクラス名を検査し、識別されたクラス名に基づいて自動的にメッセージを送信することができる。
【００６９】
上述のメソッドに加えて、本発明の様々な実施形態とともに追加で、またはその代わりに他のメソッドを使用することができる。従って、アプリケーションがそれ自体のデ―タ入力パネルを備えるオペレーティングシステムによって実行されている場合、ユーティリティオブジェクトは、そのシステムデータ入力パネルに関連する様々なメソッドを実行することもできる。例えばオブジェクトは、システムデータ入力パネルの現在の可視性を決定するメソッドを呼び出し、システムデータ入力パネルの可視状態を設定し、オブジェクトに関連付けられているデータ入力パネルがどのようにシステムデータ入力パネルと対話するかを制御することができる。
【００７０】
（イベント）
上述したメソッドおよびプロパティに加えて、本発明の様々な実施形態によるユーティリティオブジェクトは、様々なイベントを監視することができる。例えば、ユーティリティオブジェクトは、オブジェクトがユーザ入力をその結び付けられているコントロールに挿入する前、入力フォーカスが変わったときに起きるＩｎｐｕｔＦａｉｌｅｄイベントを監視することができる。以下で詳しく説明するように、ＩｎｐｕｔＦａｉｌｅｄイベントを使用して、認識されたテキストがエディットコントロールに適切に引き渡されていないことをアプリケーションに警告することができる。また、オブジェクトは、データ入力パネルの面が変わったときに起きるＰａｎｅｌＣｈａｎｇｅｄイベント、およびデータ入力パネルが移動しているときに起きるＰａｎｅｌＭｏｖｉｎｇイベントを監視することもできる。また、（パネルが画面上のその位置を再計算したとき、およびアプリケーションがＭｏｖｅＴｏメソッドを呼び出したときに実行される）ＰａｎｅｌＭｏｖｉｎｇイベント中に渡される値を変更することによって、アプリケーションがユーザインタフェースの左上の座標を無視することができることに留意されたい。ユーティリティオブジェクトは、データ入力パネルが表示から非表示、およびその逆に変わったときに起きるＶｉｓｉｂｌｅＣｈａｎｇｅｄイベントを監視することもできる。さらに、本発明の様々な実施形態によるオブジェクトは、インクストロークが認識され、テキストに変換される前に実行するイベントを含むことができる。このイベントによって、アプリケーションは、認識される前にインクを捕捉でき、その結果、例えばその元の形でインクを受信し、またはインクを別の認識エンジンに提供できるようになる。
【００７１】
（代替のアプリケーションプログラミングインタフェースとの使用）
本発明の一部の実施形態は、一般にMicrosoft WINDOWS（登録商標）ブランドのXP Tablet PC Edition オペレーティングシステムとの関連で説明しているが、本発明の様々な実施形態を、様々なソフトウェア環境で使用できることを理解されたい。特に、本発明によるユーティリティオブジェクトをＣＯＭ環境で使用することができる。ＣＯＭ環境では、ユーティリティオブジェクトをＧＵＩＤ（つまりデータ入力ユーザインタフェースを作成する共有構成要素）に関連付けられているダイナミックリンクライブラリと関連付けることができる。アプリケーションがインスタンス化されたとき、Microsoft WINDOWS（登録商標）ブランドのXP Tablet PC Edition オペレーティングシステムは、例えばレジストリを見て、そのアプリケーションに関連付けられているダイナミックリンクライブラリを見つける。次に、オペレーティングシステムは、ダイナミックリンクライブラリに含まれている関数を呼び出し、ダイナミックリンクライブラリは、ＣＯＭインタフェースを介して共有構成要素を呼び出す。また、ＣＯＭ環境では、例えば、オブジェクトはウィンドウハンドルを介してコントロールに結び付ける。同様に、データ入力パネルの外観を自動化オブジェクトをラップするクラスに連動させることにより、本発明にかかるユーティリティオブジェクトを．ＮＥＴ環境で使用することができる。しかし、上述したように、本発明の様々な実施形態によるユーティリティオブジェクトを、適した任意の動作環境で使用することができる。
【００７２】
（オブジェクトのアプリケーションとの動作）
（アプリケーションによるオブジェクトのインスタンス化）
次に、本発明の様々な実施形態によるユーティリティオブジェクトの動作を、図１１Ａ、１１Ｂ、１２との関連で説明する。図１２で示す構成の例に示すように、アプリケーション１２０１は、３つのコントロール１２０３、１２０５、１２０７を含む。ユーティリティオブジェクト１２０９は、コントロール１２０３に結び付けられる。同様にユーティリティオブジェクト１２１１は、コントロール１２０５に結び付けられる。ユ―ティリティオブジェクト１２１３は、コントロール１２０７に結び付けられる。第２のアプリケーション１２１５は、コントロール１２１７およびコントロール１２１９を含む。本発明による様々な実施形態によるユーティリティオブジェクトは、コントロール１２１７およびコントロール１２１９に結び付けられる。ユーティリティオブジェクト１２０９、１２１１、１２１３、１２２１のそれぞれは、共有構成要素１２２３とのインタフェースをとる。つまり、オブジェクト１２０９、１２１１、１２１３、１２２１のそれぞれは、単一の共有構成要素１２２３の使用を共有する。上述したように、共有構成要素１２２３は、ユーティリティオブジェクト１２０９、１２１１、１２１３、１２２１によって提供されるプロパティ値に基づいて、データ入力グラフィカルユーザインタフェースを作成する。実施形態の例では、共有構成要素１２２３は、図３に示したデータ入力パネルを作成するが、本発明の代替実施形態では、共有構成要素が他の種類のユーザインタフェースを作成できることを理解されたい。
【００７３】
図１１を参照すると、ユーザがデータをコントロール１２０３に入力しようとしたとき、オブジェクト１２０９は、コントロール１２０３がオペレーティングシステムから入力フォーカスを受信しつつあると判断する。それに応答して、共有構成要素１２２３は、ステップ１１０１で、オブジェクト１２０９から呼出を受け取る。これには、オブジェクト１２０９によって定義されるプロパティ値が含まれている。これらの値を使用して、共有構成要素１２２３は、ステップ１１０３でユーザがそれを介してデータをコントロール１２０３に入力できるデータ入力パネルを表示する。実施形態の例では、オブジェクト１２０９のＤｅｆａｕｌｔＰａｎｅｌプロパティの値はＤｅｆａｕｌｔであり、この例では、最初は書き込み面である。従って、共有構成要素１２２３は、書き込み面３０５を含むデータ入力パネルを表示する。
【００７４】
共有構成要素１２２３は、入力フォーカスが新しいコントロールにシフトしたと判断したとき、そのコントロールの識別を格納することに注意されたい。この識別を使用して、共有構成要素１２２３は、そのコントロールが入力フォーカスを有する間に受信された電子インクをコントロールに関連付けることができる。前のコントロールに関連付けられている電子インクが依然として認識されている間に入力フォーカスがその後新しいコントロールにシフトした場合、共有構成要素１２２３は、認識されたインクを適切なコントロールに引き渡すことができないと判断する（しかし、上述したように、結び付けられたコントロールに対してCommon Text Frameworkが呼び出された場合、フォーカスがコントロールを離れた後でさえ、データ入力パネルは、手書きの結果をコントロールに送信することができる）。従って、共有構成要素１２２３は、認識されたテキストとともに、ＩｎｐｕｔＦａｉｌｅｄイベントをアプリケーションに発行する。このことによって、アプリケーションは、認識されたテキストを適切なコントロールに経路指定して戻すことができる。
【００７５】
ユーザは、データを別のコントロールに入力したいとき、入力フォーカスをコントロール１２０３から所望のコントロールにシフトする。例えば、ユーザは、データをコントロール１２１７に入力したい場合、コントロール１２１７の境界内でスタイラスをタップして挿入ポイントを置くことにより、フォーカスをこのコントロールに変更する。ステップ１１０５において、共有構成要素１２２３は、フォーカスがコントロール１２０３からコントロール１２１７に変わろうとしていると判断する。ステップ１１０７において、共有構成要素１２２３は、フォーカスを受信しつつあるコントロールに関連付けられているオブジェクトのＤｅｆａｕｌｔＰａｎｅｌプロパティの値（つまりオブジェクト１２２１のＤｅｆａｕｌｔＰａｎｅｌプロパティの値）もＤｅｆａｕｌｔであるか否かを判断する。今度のオブジェクトのＤｅｆａｕｌｔＰａｎｅｌプロパティの値がＤｅｆａｕｌｔではない場合、共有構成要素１２２３は、データ入力パネルの現在の状態をキャッシュする。この例では、オブジェクト１２２１のＤｅｆａｕｌｔＰａｎｅｌプロパティの値は代わりにＫｅｙｂｏａｒｄである。従って、ステップ１１０９で、共有構成要素１２２３は、ＤｅｆａｕｌｔＰａｎｅｌプロパティの現在の値をキャッシュする。しかし、オブジェクト１２２１のＤｅｆａｕｌｔＰａｎｅｌプロパティの値もＤｅｆａｕｌｔであった場合、動作は何も起こらない。
【００７６】
オブジェクト１２２１は、共有構成要素１２２３の制御権を握っているとき、共有構成要素１２２３に、最初にキーボード面を表示するデータ入力パネルをユーザに提供するようにさせる。その後、ユーザが入力フォーカスをまた別のコントロール、例えばコントロール１２０７などに変更したくなったとき、共有構成要素１２２３は、再度フォーカスの変更を検出し、以前キャッシュされていたＤｅｆａｕｌｔＰａｎｅｌプロパティの値（依然として書き込み面）を取り出し、復元する。従って、以前表示された書き込みパッドが復元される。次に、共有構成要素１２２３は、ステップ１１０７に戻ってＤｅｆａｕｌｔＰａｎｅｌプロパティの値がＤｅｆａｕｌｔであるかどうかを判断する。この場合、コントロール１２０７のＤｅｆａｕｌｔＰａｎｅｌプロパティもＤｅｆａｕｌｔであるため、共有構成要素１２２３は動作を何も起こさず、コントロール１２０７は、データ入力パネルの外観を現在の状態のままにしておく。従って、Ｄｅｆａｕｌｔ値は単に、現在のパネル種別は、何であろうと、共有構成要素１２２３が新しいパネル種別を受け取るのに応答してキャッシュされ、入力フォーカスが再度変更されたとき復元される。
【００７７】
（共有構成要素の使用）
詳しく説明したように、各ユーティリティオブジェクトは、単一の共有構成要素を使用して、ユーザインタフェースの動作を制御する。従って、各オブジェクトは、単一の共有構成要素と通信し、それに応答して情報を受け取る。例えば、本発明の一部の実装形態では、オブジェクトおよび共有構成要素は、Microsoft WIN32 アプリケーションプログラミングインタフェースを使用して、異なるソフトウェアプロセスにわたって情報を交換することができる。このアプリケーションプログラミングインタフェースを使用して、オブジェクトは、タスクを実行する命令で、イベント「ハンドル」または他の参照を構成要素に渡し、共有構成要素がイベントをそのタスクの完了を示すように「設定」したときを識別する。その代わりに、またはそれに加えて、オブジェクトは、返事としてデータ付きメッセージ（例えばデータ入力パネルの状態など）を提供するよう共有構成要素に要求する命令を共有構成要素に提供することができる。さらに別の通信技術および方法を使用して、本発明の異なる実施形態によるオブジェクトと共有構成要素の間で通信することができる。
【００７８】
図１３に、本発明の様々な実施形態で使用できる様々なオブジェクトと共有構成要素の間の代表的な１つの関係を示している。この図に示すように、ソフトウェアアプリケーション１３０１は、様々なオブジェクト１３０３を使用することができる。同様に、別のソフトウェアアプリケーション１３０５は、１または複数のオブジェクト１３０７を使用することができる。実施形態の例では、例えば、オブジェクト１３０３，１３０７は、それぞれのソフトウェアアプリケーション１３０１，１３０５によって作成されたＣＯＭオブジェクトとすることができる（ソフトウェアプロセスによって維持されたオブジェクトは、ソフトウェアプロセスに関連して「インプロセス（in-process）」オブジェクトと呼ばれることもある）。しかし、本発明の様々な代替実施形態は、ＣＯＭ技術を使用しないソフトウェアオブジェクトを含めて、このタイプの関係の他のタイプのオブジェクトを使用することもできる。
【００７９】
各オブジェクト１３０３，１３０７は、共有構成要素１３０９と通信する。これは本発明の一部の実施形態に従ってＣＯＭ技術を使用して実装することもできる。起動中、各オブジェクト１３０３，１３０７は、共有構成要素１３０９をインスタンス化する。例えば、オブジェクト１３０３、オブジェクト１３０７、および共有構成要素１３０９がＣＯＭ技術を使用して実装されたとき、オブジェクト１３０３，１３０７は、「ＣｏＣｒｅａｔｅ  Ｉｎｓｔａｎｃｅ」操作を行い、共有構成要素１３０９をインスタンス化することができる。共有構成要素１３０９は複数のオブジェクト間で共有することができるので、共有構成要素１３０９がすでに実装されている場合は、それに応答して既存の共有構成要素１３０９への参照がオブジェクトに提供される。または、共有構成要素１３０９がすでに存在していない場合、共有構成要素１３０９が作成される。図１３に示す関係では、共有構成要素１３０９のインタフェースに対してメソッド（または関数）の呼出１３１１を行うことによって、各オブジェクト１３０３，１３０７は、共有構成要素１３０９と対話する。次に、共有構成要素１３０９は、イベント１３１３をオブジェクト１３０３，１３０７に戻す。
【００８０】
図１３に示す関係によってオブジェクト１３０３，１３０７は、共有構成要素１３０９と直接通信できるようになるが、場合によってはこの特定の構成によってエラーがもたらされることがある。例えば、オブジェクト１３０３またはオブジェクト１３０７から共有構成要素１３０９への各呼出は同期であり、従ってコントロールが呼出側オブジェクト１３０３またはオブジェクト１３０７に戻される前に完了していなければならない。従って、オブジェクトからの呼出に対応する任意のイベントを共有構成要素１３０９により設定して、コントロールが呼出側オブジェクト１３０３またはオブジェクト１３０７に戻される前にその呼出の完了を確認する必要がある。従って、共有構成要素１３０９がイベントを実行した場合、そのイベントの受信側オブジェクトの処理の遅延によって、共有構成要素１３０９がまったく応答しなくなる可能性がある。例えば、アプリケーション１３０５は、共有構成要素１３０９からイベントを受け取るインタフェースを使用して、メッセージボックスを表示することができる。ユーザがメッセージボックスを消すまで、共有構成要素１３０９は、イベントへの応答が戻るのを待つ間、使用不可である。従って、データ入力パネルは、ユーザがメッセージボックスを消すまで使用することができないことになる。
【００８１】
また、この種のクロスプロセス（cross-process）呼出（両方向に進む）を行うことによって、再入可能な関数の呼出を引き起こし、その結果、予測できない振る舞いがもたらされるおそれがある。例えば、オブジェクト１３０３またはオブジェクト１３０７が共有構成要素１３０９に対してメソッドを呼び出すとき、共有構成要素１３０９は、それに応答してメソッドを実行して、共有構成要素１３０９がそれ自体外部のプロセス外（out-of-process）オブジェクトへの呼出を行うようになる。従って、ＣＯＭ技術を使用して共有構成要素１３０９が実装された場合、標準のＡｄｄＲｅｆメソッド、Ｒｅｌｅａｓｅメソッド、またはＱｕｅｒｙＩｎｔｅｒｆａｃｅメソッド、または外部ソフトウェアプロセスによって実施される他の任意のメソッドへの呼出を行うことができる。共有構成要素１３０９が外部ソフトウェアプロセスに対するメソッドへのこうした呼出を行っている間、オブジェクト１３０３および１３０７の一方など異なるオブジェクトにより、共有構成要素１３０９への他の呼出を行うことができる小さい時間枠が存在する。この「再入」の結果として、共有構成要素１３０９への呼出の順序は、適切には同期されないことがある。従って、共有構成要素１３０９に入ってくる呼出は、共有構成要素１３０９に入ってくる他の呼出によって割り込まれることがある。この再入によって、割り込まれる前に呼出が適切に完了しないとき、状態の問題がもたらされることがある。さらに、イベントは、呼出が処理される速度に影響を与えるランダムな環境要因によって予測できない順序で受信される可能性があるので、共有構成要素１３０９によって実行されたイベントは、決定的ではない。
【００８２】
従って、本発明の様々な実施形態として、図１４および図１５に示す構成の例を使用する。図１４に示すように、オブジェクト１３０３，１３０７は、呼出を直接共有構成要素１３０９に送信しない。代わりに各オブジェクト１３０３，１３０７は、対応するプロキシまたは「スタビー（stubby）」構成要素１４０１に呼出を送信する。例えば、オブジェクト１３０３Ａは、プロキシ構成要素１４０１Ａに呼出を送信し、オブジェクト１３０３Ｂは、プロキシ構成要素１４０１Ｂに呼出を送信する。同様に、オブジェクト１３０３Ｃは、プロキシ構成要素１４０１Ｃに対して呼出を行い、オブジェクト１３０７は、プロキシ構成要素１４０１Ｄに対して呼出を行う。
【００８３】
この構成を使用する本発明の様々な実施形態では、オブジェクト１３０３，１３０７は、もはや共有構成要素１３０９を直接インスタンス化しない。代わりに、オブジェクト１３０３またはオブジェクト１３０７は、単一のプロキシ構成要素１４０１をインスタンス化することができ、プロキシ構成要素１４０１は、それを呼び出すオブジェクト１３０３またはオブジェクト１３０７の専用となる。作成された最初のプロキシ構成要素１４０１は、次に共有構成要素１３０９が存在するかどうかを判断し、すでに存在していない場合は共有構成要素１３０９をインスタンス化することができる。同様に、破棄すべき最後のプロキシ構成要素１４０１は、共有構成要素１３０９が存在しなくなる前にそれを解放することができる。最初に作成されたプロキシ構成要素１４０１と最後に破棄されるプロキシ構成要素１４０１との間にインスタンス化されたプロキシ構成要素１４０１は、単に、以前作成された共有構成要素１３０９を発見し、使用するだけである。本発明の様々な実施形態によれば、プロキシ構成要素１４０１は、単一のＣＯＭオブジェクトなど、単一のオブジェクトでよい。図１４に示すように、プロキシ構成要素１４０１は、アプリケーション１３０１，１３０５、および共有構成要素１３０９のプロセスの間の複数プロセス境界の反対側のオブジェクト１３０３および１３０７への１対１のマッピングを有する。より具体的には、図１４では、プロセス境界を破線で表しており、オブジェクト１３０３，１３０７とプロキシ構成要素１４０１の間の１対１マッピング、およびプロキシ構成要素１４０１と共有構成要素１３０９の間の多対１マッピングは、一点鎖線で表している。
【００８４】
図１５は、オブジェクトおよび共有構成要素をより詳しく示している。この図からわかるように、オブジェクト１３０３のそれぞれは、アプリケーション１３０１によって維持されるメッセージキューからメッセージを受信するメッセージの宛先１５０１を含む。同様に、各オブジェクト１３０７は、アプリケーション１３０５によって維持されるメッセージキューからメッセージを受信するメッセージの宛先１５０３を含む。メッセージの宛先１５０１および１５０３のそれぞれは、例えば、Microsoft WINDOWS（登録商標）ブランドのオペレーティングシステムを使用して実施される隠しウィンドウ表示ユーザインタフェース（hidden windowed user interface）、または他のタイプのユーザインタフェースでよい。より具体的には、Microsoft WINDOWS（登録商標）ブランドのオペレーティングシステムを使用して実施されるウィンドウ表示ユーザインタフェース（および他のタイプのユーザインタフェース）は、ユーザインタフェースをホストしているアプリケーションによって維持されるメッセージキューからメッセージを受信するためのメッセージアドレスを提供する。ホストしているアプリケーションがこれらのアドレスを使用して、例えば入力データ（キーボードからの文字データやポインティング装置からの位置データなど）を適切なユーザインタフェースに送信する。従って、隠しウィンドウ表示ユーザインタフェースのメッセージアドレスを、メッセージの宛先１５０１として使用することができる。しかし、本発明の代替実施形態では、アプリケーションのメッセージキューからメッセージを受信する他の技術も使用できることを理解されたい。
【００８５】
同様に、共有構成要素１３０９もメッセージの宛先１５０５を含む。メッセージの宛先１５０５は、例えば、共有構成要素１３０９に関連付けられているデータ入力パネルユーザインタフェースによって提供することができる。本発明の一部の実施形態では、メッセージの宛先１５０５は、共有構成要素１３０９自体によって維持されているメッセージキューからメッセージを受信することができ、しかし、本発明の他の実施形態では、メッセージの宛先は、他のリソースによって維持されているメッセージキューからメッセージを受信することができる。以下でさらに詳しく説明するように、メッセージの宛先１５０５を使用して、アプリケーションによって使用されるメソッドの呼出が確実に同期して振る舞うようにすることができる。つまり、メッセージの宛先１５０５を使用して、応答が呼出元に戻される前、または処理が別のメソッドの呼出に取りかかる前に各メソッドの呼出が確実に完了するようにすることができる。
【００８６】
オブジェクト１３０３またはオブジェクト１３０５、例えばオブジェクト１３０３Ｃは、メソッドの呼出を共有構成要素１３０９に対して行うべきであると判断すると、メソッドの呼出の状態の追跡に使用できるイベントを定義することができる。例えば、オブジェクト１３０３ＣがMicrosoft WINDOWS（登録商標）ブランドのオペレーティングシステム環境で動作している場合、オブジェクト１３０３Ｃは、上述したようにＷｉｎ３２イベントを作成することができる。次にオブジェクト１３０３Ｃは、その対応するプロキシ構成要素１４０１Ｃから所望のメソッドを要求する。プロキシ構成要素１４０１Ｃに呼出を行う際、オブジェクト１３０３Ｃは、作成されたイベントのハンドル（または他の識別する参照）を、メソッドの呼出に適切な他の任意のパラメータとともにプロキシ構成要素１４０１Ｃに渡す。また、オブジェクト１３０３Ｃは、そのメッセージの宛先１５０１Ｃを識別するハンドル（または他の識別する参照）を共有構成要素１３０９に渡す。
【００８７】
メソッドの呼出の受信に応答して、プロキシ構成要素１４０１Ｃは、メッセージの呼出を中継するメッセージを共有構成要素１３０９のメッセージの宛先１５０３に書き込む。また、イベントハンドルを複写して、そのメソッドの呼出に対応するイベントに対する制御を共有構成要素１３０９に与えるために、イベントハンドル（またはその複写）を共有構成要素１３０９に渡す。メソッドの呼出の実行に必要なすべてのパラメータは、一緒にパックされて、イベントハンドルおよび呼出メッセージとともに、パラメータとして共有構成要素１３０９に送信できるようにする。有利なことに、この構成によって複数のプロキシ構成要素１４０１は、対応するオブジェクト１３０３，１３０７からメッセージの呼出が受信されるどんな順序でも、メソッドの呼出を要求するメッセージを共有構成要素１３０９のメッセージの宛先１５０３に書き込むことができる。このメッセージキューを使用して、共有構成要素１３０９は、オブジェクト１３０３，１３０７から受信される順序で呼出を処理することができる。さらに、プロキシ構成要素１４０１に渡される任意のインタフェースを、メソッドを呼び出すメッセージが共有構成要素１３０９のインタフェース１５０５のメッセージキューに書き込まれた後でのみ、共有構成要素１３０９によって使用することができる。従って、共有構成要素１３０９は、メッセージがメッセージキューに書き込まれる前はメッセージの呼出に「気づか」ず、それによって、再入が回避され、共有構成要素１３０９が適切なデータを使用して確実にメソッドの呼出を実行するようになる。メソッドを要求するメッセージがインタフェース１５０５に書き込まれると、プロキシ構成要素１４０１は、呼出側オブジェクト１３０３または１３０７に実行を戻す。
【００８８】
プロキシ構成要素１４０１からの実行コントロールの受信に応答して、オブジェクト１３０３またはオブジェクト１３０７は、呼び出されたメソッドが完了するのを待つ。例えば、オブジェクト１３０３またはオブジェクト１３０７がＣＯＭオブジェクトの場合、ＣｏＷａｉｔＦｏｒＥｖｅｎｔを発行して、別の関数を続ける前に定義されたイベントが共有構成要素１３０９によって戻される（または「設定される」）のを待つことができる。このプロセスは、所望のメソッドを同期して実行しなければならないときに使用できることに注意されたい。例えば、オブジェクト１３０３またはオブジェクト１３０７が単に情報の目的のために出来事を共有構成要素１３０９に通知するだけの場合、イベントの作成、およびその後のイベントが設定されることを待つことは省くことができる。
【００８９】
共有構成要素１３０９は、メッセージの宛先１５０５に送信されるメッセージを順番に処理し、各メソッドをメッセージキュー内の要求の順序で実行する。例えば、共有構成要素１３０９がＣＯＭ技術を使用して実装されている場合、メッセージは、ＧｅｔＭｅｓｓａｇｅ操作を使用してメッセージキューから抽出することができる。従って、この例では、共有構成要素１３０９は、プロキシ構成要素１４０１Ｃによって書き込まれたメッセージに到達したとき、要求されたアクションを実行する。また、該当する場合、要求されたアクションを実行した後、共有構成要素１３０９は、対応する通知メッセージを、実行されたメソッドの結果とともにオブジェクト１３０３Ｃのメッセージの宛先１５０１Ｃに書き込む。例えば、共有構成要素１３０９は、ＣＯＭ技術を使用して実装される場合、ＰｏｓｔＭｅｓｓａｇｅプロセスを使用してメッセージの宛先１５０１Ｃに通知メッセージを書き込む。様々な技術を使用してメッセージをメッセージの宛先１５０１，１５０３に書き込むことができることを理解されたい。例えば、Microsoft WINDOWS（登録商標）ブランドのオペレーティングシステムＷＩＮ３２メッセージング技術を使用した場合、ＡＴＯＭを使用して、標準のＷＰＡＲＡＭパラメータおよびＬＰＡＲＡＭパラメータで渡すことができないデータをコード化して、ＣＯＭオブジェクトのクロスプロセスの性質によって作成されるマーシャルデータに関する問題を避けることができる。メソッド結果をオブジェクト１３０３またはオブジェクト１３０７に直接提供するのではなく、通知メッセージをメッセージの宛先１５０１（またはメッセージの宛先１５０３）に書き込むことによって、再入状況が回避され、シングルトンによってオブジェクト１３０３またはオブジェクト１３０７に送信されるイベントの順序が確実にオブジェクト１３０３またはオブジェクト１３０７によってなされたメソッドの呼出の順序に対応するようになる。
【００９０】
さらに、共有構成要素１３０９は、実行されたメソッドに対応するイベントを、要求されたメソッドが完了したことを示すように設定する。共有構成要素１３０９は、（以前通過されたイベントハンドルによって与えられた）イベントを設定するとき、イベントを定義したオブジェクト１３０３またはオブジェクト１３０７を解放し、それによってオブジェクト１３０３またはオブジェクト１３０７が、メソッドを呼び出したところから処理を再開することができる。例えば、オブジェクト１３０３またはオブジェクト１３０７は、メソッドの呼出から戻される情報を期待する場合、メソッドの呼出に対応するイベントが設定されていることを検出した後、期待された情報があるかどうかについてメッセージキューをチェックする。
【００９１】
本発明の様々な実施形態では、オブジェクト１３０３またはオブジェクト１３０７がイベントを作成するのを省くことができることに注意されたい。例えば、一部のタイプのメソッドの呼出では、オブジェクト１３０３またはオブジェクト１３０７は、応答を期待することなく、単に共有構成要素１３０９に情報を書き込みたいだけの場合がある。さらに、本発明の一部の実施形態では、オブジェクト１３０３またはオブジェクト１３０７は、メッセージをメッセージの宛先１５０５に書き込むことなく共有構成要素１３０９にメッセージの呼出を行うことができる。例えば、本発明の一部の実施形態によって、オブジェクト１３０３またはオブジェクト１３０７がデータ入力パネルの状態について（例えば、データ入力パネルがビジーかどうかについての問合せなど）共有構成要素１３０９に尋ねることができる。このタイプのメソッドの呼出は迅速に処理され、それによって再入力の機会が低減され、有用となるように呼出側オブジェクト１３０３または１３０７によってすぐに返事が受信されなければならないので、この種の呼出を、対応するメッセージを共有構成要素１３０９のメッセージの宛先１５０５に書き込むことなく、共有構成要素１３０９に直接渡すことができる。
【００９２】
（結論）
本発明は、本発明を実行するのに現時点で好ましい様式を含む特定の例に関連して説明してきたが、上述したシステムおよび技術の変形および置換が多数あることを当業者であれば理解できよう。例えばデータ入力グラフィカルユーザインタフェースは、上述の本発明の様々な実施形態によるユーティリティオブジェクトを介して個々のソフトウェアアプリケーションによって制御できるが、本発明の代替実施形態では、データ入力パネルの特徴を他のソース、例えばシステム全体にわたる挿入ポイントの位置などによって決定することができる。
【００９３】
従って、本発明の意図および範囲は、大筋で添付の特許請求の範囲に記載のものと解釈されるべきである。
【図面の簡単な説明】
【００９４】
【図１】本発明の実施形態にかかる動作環境を示す概略図である。
【図２Ａ】本発明の様々な実施形態とともに使用できるアプリケーションユーザインタフェースのエディットコントロールウィンドウを示す図である。
【図２Ｂ】エディットコントロールへのテキストの挿入を示す図である。
【図２Ｃ】エディットコントロールへのテキストの挿入を示す図である。
【図２Ｄ】エディットコントロールへのテキストの挿入を示す図である。
【図３】本発明の様々な実施形態にかかるデータ入力パネルを示す図である。
【図４】本発明の実施形態にかかるエディットコントロールウィンドウに対するデータ入力パネルの代替の配置を示す図である。
【図５】本発明の実施形態にかかるエディットコントロールウィンドウに対するデータ入力パネルの代替の配置を示す図である。
【図６】本発明の実施形態にかかるエディットコントロールウィンドウに対するデータ入力パネルの代替の配置を示す図である。
【図７】アジア言語の書き込み面を備えるデータ入力パネルを示す図である。
【図８】補助数字キーパッドを備えるデータ入力パネルを示す図である。
【図９】補助記号キーパッドを備えるデータ入力パネルを示す図である。
【図１０】反対向きのテキスト入力パネルを示す図である。
【図１１Ａ】本発明の様々な実施形態にかかるパネルタイプ値を処理する方法を示す図である。
【図１１Ｂ】本発明の様々な実施形態にかかるパネルタイプ値を処理する方法を示す図である。
【図１２】本発明の様々な実施形態にかかる制御に関連付けられている異なるユーティリティオブジェクト間での共有構成要素の共有を示す図である。
【図１３】異なるユーティリティオブジェクトがどのように単一の共有構成要素を使用するかの一例を示す図である。
【図１４】異なるユーティリティオブジェクトがどのように単一の共有構成要素を使用するかの別の例を示す図である。
【図１５】異なるユーティリティオブジェクトがどのように単一の共有構成要素を使用するかの別の例を示す図である。
【符号の説明】
【００９５】
１００  コンピュータ
１０１  キーボード
１０２  ポインティング装置
１０６  シリアルポートインタフェース
１０７  モニタ
１０８  ビデオアダプタ
１０９  リモートコンピュータ
１１０  処理ユニット
１１１  メモリ記憶装置
１１２  ローカルエリアネットワーク（ＬＡＮ）
１１３  ワイドエリアネットワーク（ＷＡＮ）
１１４  アダプタ
１１５  モデム
１２０  システムメモリ
１３０  システムバス
１４０  読取り専用メモリ（ＲＯＭ）
１５０  ランダムアクセスメモリ（ＲＡＭ）
１６０  基本入出力システム（ＢＩＯＳ）
１６５  ペンデジタイザ
１６６  付属ペンまたはスタイラス
１７０  ハードディスクドライブ
１８０  磁気ディスクドライブ
１９０  取外し可能磁気ディスク
１９１  光ディスクドライブ
１９２  ハードディスクドライブインタフェース
１９３  磁気ディスクドライブインタフェース
１９４  光ディスクドライブインタフェース
１９５  オペレーティングシステム
１９６  アプリケーションプログラム
１９７  プログラムモジュール
１９８  プログラムデータ
２０１、３０３  境界
２０３、２０５、２０７  エディットコントロール
２０９、２１１、２１３  タイトル
２１５  挿入ポイント
２１７  電子インク
２１９  認識されたテキスト
３０１、７０１  データ入力パネル
３０５  書き込み面
３０７  送信ボタン
３０９  コントロールボタン
３１１、３１３  補助インタフェースボタン
３１５  クローズボタン
３１７、３１９  面選択ボタン
７０３  書き込みエリア
８０１  補助キーボード
９０１  補助記号キーボード
１２０１、１２１５  アプリケーション
１２０３、１２０５、１２０７、１２１７、１２１９  コントロール
１２０９、１２１１、１２１３、１２２１  ユーティリティオブジェクト
１２２３、１３０９  共有構成要素
１３０１、１３０５  ソフトウェアアプリケーション
１３０３、１３０３Ａ、１３０３Ｂ、１３０３Ｃ、１３０７  オブジェクト
１３１１  メソッドの呼出
１３１３  イベント
１４０１、１４０１Ａ、１４０１Ｂ、１４０１Ｃ、１４０１Ｄ  プロキシ構成要素
１５０１、１５０３、１５０５  メッセージの宛先
【図１】
2004234647.tif 000003
【図２Ａ】
2004234647.tif 000004
【図２Ｂ】
2004234647.tif 000005
【図２Ｃ】
2004234647.tif 000006
【図２Ｄ】
2004234647.tif 000007
【図３】
2004234647.tif 000008
【図４】
2004234647.tif 000009
【図５】
2004234647.tif 000010
【図６】
2004234647.tif 000011
【図７】
2004234647.tif 000012
【図８】
2004234647.tif 000013
【図９】
2004234647.tif 000014
【図１０】
2004234647.tif 000015
【図１１Ａ】
2004234647.tif 000016
【図１１Ｂ】
2004234647.tif 000017
【図１２】
2004234647.tif 000018
【図１３】
2004234647.tif 000019
【図１４】
2004234647.tif 000020
【図１５】
2004234647.tif 000021