Top > OOobbs2 > 92

OOobbs2/92 Edit

  • サマリ: キーボードからの入力を無効にしたい
  • 環境: Calc
  • 状態: 未解決
  • 投稿者: たま?
  • 投稿日: 2008-02-06 (水) 23:06:57

質問 Edit

日付フィールドの値をセルに書き込むマクロを作成し、テキストが変更された時に実行されるようにしています 日付フィールドをキーボードから編集するとエラーになってしまいます(ありえない日付を入力したばあい) ドロップダウンのカレンダーのみを有効にし、キーボードからの編集を無効にすることは出来ないでしょうか? ご存知の方 よろしくお願いいたします

回答 Edit

  • KeyHandler を利用するとキー操作を無効化できます。

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

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 にします。

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

  • はにゃ?? 2008-02-13 (水) 23:59:03

感想,コメント,メモ Edit



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