• 締切済み

Access97のVBAでキーボードを制御する方法は?

フォームなどの入力において、[Insert]キーが押されて、文字入力が上書きになっているかどうかを検出したい。また、VBAで上書きモードに設定したい。 キーボードの[Insert]キーを押すと、ステータスバーの右のほうに「OVR」と表示され、テキストボックスなどへの文字入力が、文字単位で上書きになります。この制御をVBAで行いたいのです。

みんなの回答

  • ARC
  • ベストアンサー率46% (643/1383)
回答No.4

常に上書きにするというのであれば、定型入力プロパティで何とか代用できると思 います。 テキストボックスの定型入力/InputMaskプロパティを CCCCCCCC;;" " (Cをフィールドの最大長だけ並べる)と設定し、 Private Sub テキスト0_GotFocus() Me.テキスト0.SelStart = 0 Me.テキスト0.SelLength = 1 End Sub Private Sub テキスト0_AfterUpdate() If IsNull(Me.テキスト0) = False Then Me.テキスト0 = RTrim$(Me.テキスト0) End If End Sub ってなコードを書いてやれば、ある程度違和感無く使えるんじゃないでしょうか。

すると、全ての回答が全文表示されます。
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.3

この問題について、しばらく時間をかけていろいろ実験してみたんですが、私の技術 の範囲では、満足の行く結果が得られませんでした。少なくとも、Accessのプロパ ティでは現在の上書きモードの状況を取得することはできないようです。(あるいは、 私の探し方が下手糞なだけかも… 求む、情報。) GetKeyState APIや、キーボード 関連のイベントによって、Insertキーが押されたかどうかの情報は取得できても、 現在のAccessの状態までは分かりません。(Accessの上書きモードは、キーボード の状態とは無関係なようです。) 設定の方は、Sendkeys "{INSERT}" で、若干の問題付きで、可能なようです。 (Clickイベント中に記述するには、DoEventsをはさまなくてはいけないなど、多少 の問題はあるようです。) もしよろしければ、現在お悩みの問題を補足のところに具体的にお書きください。 もしかしたら、有効な代替案を提案できるかもしれません。

Toshi-T
質問者

補足

ご回答ありがとうございます。 Windows APIの利用の仕方について、研究し始めたところです。 ホスト系の端末画面と同じ操作感にしたいために、常に文字入力を上書きにしたいのです。SendKeyでは、最初の1回に限り成功します。2回目(あるいは別のフォームを開くとき)は不要なので、今の状態に応じた動作をさせる必要があります。 パンチャーの戸惑いを少しでも軽減するために、努力しています。

すると、全ての回答が全文表示されます。
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.2

訂正です。キーの設定はSetKeyboardStateでした。

すると、全ての回答が全文表示されます。
  • ARC
  • ベストアンサー率46% (643/1383)
回答No.1

A案:定型入力を使用する。"C"か"&"あたりををフィールド長だけ並べればいいで しょう。 B案:APIを使う。GetKeyStateでキーボードの状態を取得、SetKeyStateで設定。 おまけ:Sendkeys "{INSERT}"を試みましたが、どうもうまくいかないようです。 5分ほど実験しただけなので、何とも言えないですが。

すると、全ての回答が全文表示されます。

専門家に質問してみよう