Top > OOoBasic > Dialog > Example22

キーハンドラ Edit

ダイアログ上でキーハンドラを利用したいときには toolkit に追加したキーハンドラで全てのキー操作をトラップします。特定のダイアログ以外での操作までトラップされます。

ダイアログにテキストコントロールとボタンがある状態で Tab キー操作をトラップしています。

さらに複数行のテキストコントロールのフォーカス判定などを加えなければうまくいきません。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
Dim bActivated As Boolean
 
 
sub dlg_keyhandler
  GlobalScope.DialogLibraries.loadLibrary("Standard")
  dlg = CreateUnoDialog(GlobalScope.DialogLibraries.Standard.D1)
  oToolkit = dlg.getPeer().getToolkit()
  
  ' all key operations of application are trapped
  oKeyHandler = CreateUnoListener("DlgKeyHandler_", "com.sun.star.awt.XKeyHandler")
  oToolkit.addKeyHandler(oKeyHandler)
  
  ' detect dialog de-/activation
  oWindowListener = CreateUnoListener("DlgTopWindow_", "com.sun.star.awt.XTopWindowListener")
  dlg.addTopWindowListener(oWindowListener)
  
  bActivated = False
  dlg.execute()
  dlg.dispose()
  oToolkit.removeKeyHandler(oKeyHandler)
end sub
 
 
Sub DlgTopWindow_windowOpened(ev)
End Sub
Sub DlgTopWindow_windowClosing(ev)
End Sub
Sub DlgTopWindow_windowClosed(ev)
End Sub
Sub DlgTopWindow_windowMinimized(ev)
End Sub
Sub DlgTopWindow_windowNormalized(ev)
End Sub
Sub DlgTopWindow_windowActivated(ev)
  bActivated = True
End Sub
Sub DlgTopWindow_windowDeactivated(ev)
  bActivated = False
End Sub
Sub DlgTopWindow_disposing(ev)
End Sub
 
 
Function DlgKeyHandler_keyPressed(ev)
  If bActivated and ev.KeyCode = com.sun.star.awt.Key.TAB Then
    'printf("tab key trapped.")
    DlgKeyHandler_keyPressed = True
    Exit Function
  End If
End Function
Function DlgKeyHandler_keyReleased(ev)
  DlgKeyHandler_keyReleased = True
End Function
Function DlgKeyHandler_disposing(ev)
End Function

新しく css.awt.Toolkit サービスのインスタンスを作成してダイアログを作成しても効果ありません。

MsgBox で Enter キーを無効に Edit

Sub MsgBoxTest()
 oKeyHandler = CreateUnoListener("XKeyHandler_", "com.sun.star.awt.XKeyHandler")
 oToolkit = StarDesktop.getActiveFrame().getContainerWindow().getToolkit()
 oToolkit.addKeyHandler(oKeyHandler)
 
 MsgBox "Choose Yes or No.", 4
 
 oToolkit.removeKeyHandler(oKeyHandler)
End Sub


Function XKeyHandler_keyPressed(ev)
 XKeyHandler_keyPressed = (ev.KeyCode = com.sun.star.awt.Key.RETURN)
End Function
Function XKeyHandler_keyReleased(ev)
 XKeyHandler_keyReleased = True
End Function
Function XKeyHandler_disposing(ev)
End Function

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