Top > OOobbs2 > 92
  • The added line is THIS COLOR.
  • The deleted line is THIS COLOR.
  • Go to OOobbs2/92.

** [[OOobbs2/92]] [#i1b12544]
-''サマリ'': キーボードからの入力を無効にしたい
-''環境'': Calc
-''状態'': 未解決
-''投稿者'': [[たま]]
-''投稿日'': 2008-02-06 (水) 23:06:57

*** 質問 [#d00683e4]
日付フィールドの値をセルに書き込むマクロを作成し、テキストが変更された時に実行されるようにしています
日付フィールドをキーボードから編集するとエラーになってしまいます(ありえない日付を入力したばあい)
ドロップダウンのカレンダーのみを有効にし、キーボードからの編集を無効にすることは出来ないでしょうか?
ご存知の方 よろしくお願いいたします
*** 回答 [#i5ead3ee]
- [[KeyHandler>OOoBasic/Generic/InputInterception]] を利用するとキー操作を無効化できます。 

日付フィールドの「フォーカスを得たとき」および「フォーカスを失ったとき」のイベントにマクロを割り当てます。

FocusGained をフォーカスを得たときに、FocusLost をフォーカスを失ったときに割り当てます。

 Global oKeyHandler As Object
 
 
 Sub FocusGained
   If IsNull(oKeyHandler) Then
   oKeyHandler = CreateUnoListener( _
      "KeyHandler_","com.sun.star.awt.XKeyHandler")
   End If
   GetController.addKeyHandler(oKeyHandler)
 End Sub
 
 
 Sub FoculLost
   GetController.removeKeyHandler(oKeyHandler)
 End Sub
 
 
 Function GetController()
   GetController = ThisComponent.getCurrentController()
 End Function
 
 
 Function KeyHandler_keyPressed( oEv )
   KeyHandler_keyPressed = True
 End Function
 Function KeyHandler_keyReleased( oEv )
   KeyHandler_keyReleased = False
 End Function
 Sub KeyHandler_disposing( oEv )
 End Sub

日付フィールドがフォーカスを得たとき、キーハンドラを作成してハンドラをドキュメントのコントローラに割り当てます。そして、フォーカスを失ったときにキーハンドラの割り当てを解除します。

キーハンドラはキーが押されたときの操作を次のハンドラに送らないように返り値を True にします。

上記のように設定すればフィールド上でのキー操作が一切無効になり、ドロップダウンボタンもしくはスピンボタンでの操作のみしかできなくなります。

-- [[はにゃ?]] &new{2008-02-13 (水) 23:59:03};

#comment
*** 感想,コメント,メモ [#sefa76e4]

#comment

Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes