von Vanished » Mi, 09.02.2005 08:44
ck hat geschrieben:Hallo Georg,
wenn ich Dich richtig verstanden habe möchtest Du die Eingaben in einem Textfeld im Dialog auswerten !?
Warum verwendest Du da nicht einfach das Ereignis "Taste losgelassen" des Textfeldes und verknüpfst das Ganze mit einer entsprechenden Routine ? Darin merkst Du Dir einfach jedesmal den Inhalt des Textfeldes. Wenn sich dieser zum vorherigen Aufruf nicht geändert hat, wurde eine Steuertaste gedrückt, sehr wahrscheinlich Enter oder eine Pfeiltaste.
So trivial ist sein Problem leider nicht, das habe ich festgestellt, als ich mich mit etwas Ähnlichem beschäftigt habe.
Zum einen würde Deine Methode bei jedem Tastenanschlag im entsprechenden Textfeld reagieren, also auch dann, wenn der Text eingetragen wird, zum anderen ist es zumindest mir nicht gelungen, innerhalb eines Dialoges die Entertaste (Chr(13)) auf einfachem Weg auszuwerten. Seither vertrete ich die Auffassung, dass in einem laufenden Dialog seitens OO die Entertaste überhaupt nicht beachtet wird (Ausnahme: das aktuelle Control ist ein CommandButton).
Es geht aber dennoch. Notwendig dazu ist allerdings ein KeyListener, der auf das jeweilige Control (Textfeld, ComboBox o.ä.) registriert wird. Den vollständigen Code für einen Dialog mit 17 Controls gibt es
hier.
Verkürzt für ein Textfeld:
Code: Alles auswählen
Sub RegisterKeyListener
MeinTextfeld=MeinDialog.getControl("MeinTextfeld")
oKeyListener = createUnoListener("oKey_", "com.sun.star.awt.XKeyListener")
MeinTextfeld.addKeyListener(oKeyListener)
End Sub
Sub UnregisterKeyListener
MeinTextfeld=MeinDialog.getControl("MeinTextfeld")
MeinTextfeld.removeKeyListener(oKeyListener)
End Sub
Function oKey_KeyPressed(oEvt) As Boolean
select case oEvt.KeyChar
case chr(13)
'Hier kann man jetzt mit dem Textfeld machen, was man möchte
'Z.B. den Wert des Textfeldes in eine Zelle schreiben
case else
oKey_KeyPressed = False
end select
End Function
Function oKey_KeyReleased(oEvt) As Boolean
oKey_KeyReleased = False
End Function
Sub oKey_disposing(oEvt)
'Muß immer vorhanden sein, auch wenn keine weitere Funktion auszulösen ist.
End Sub
Das Sub RegisterKeyListener sollte beim Start des Dialoges mitgeladen werden, das Sub UnregisterKeyListener beim Schliessen.
Viele Grüße,
Vanished
[quote="ck"]Hallo Georg,
wenn ich Dich richtig verstanden habe möchtest Du die Eingaben in einem Textfeld im Dialog auswerten !?
Warum verwendest Du da nicht einfach das Ereignis "Taste losgelassen" des Textfeldes und verknüpfst das Ganze mit einer entsprechenden Routine ? Darin merkst Du Dir einfach jedesmal den Inhalt des Textfeldes. Wenn sich dieser zum vorherigen Aufruf nicht geändert hat, wurde eine Steuertaste gedrückt, sehr wahrscheinlich Enter oder eine Pfeiltaste.
[/quote]
So trivial ist sein Problem leider nicht, das habe ich festgestellt, als ich mich mit etwas Ähnlichem beschäftigt habe.
Zum einen würde Deine Methode bei jedem Tastenanschlag im entsprechenden Textfeld reagieren, also auch dann, wenn der Text eingetragen wird, zum anderen ist es zumindest mir nicht gelungen, innerhalb eines Dialoges die Entertaste (Chr(13)) auf einfachem Weg auszuwerten. Seither vertrete ich die Auffassung, dass in einem laufenden Dialog seitens OO die Entertaste überhaupt nicht beachtet wird (Ausnahme: das aktuelle Control ist ein CommandButton).
Es geht aber dennoch. Notwendig dazu ist allerdings ein KeyListener, der auf das jeweilige Control (Textfeld, ComboBox o.ä.) registriert wird. Den vollständigen Code für einen Dialog mit 17 Controls gibt es [url=http://de.openoffice.info/viewtopic.php?t=2541]hier[/url].
Verkürzt für ein Textfeld:[code]Sub RegisterKeyListener
MeinTextfeld=MeinDialog.getControl("MeinTextfeld")
oKeyListener = createUnoListener("oKey_", "com.sun.star.awt.XKeyListener")
MeinTextfeld.addKeyListener(oKeyListener)
End Sub
Sub UnregisterKeyListener
MeinTextfeld=MeinDialog.getControl("MeinTextfeld")
MeinTextfeld.removeKeyListener(oKeyListener)
End Sub
Function oKey_KeyPressed(oEvt) As Boolean
select case oEvt.KeyChar
case chr(13)
'Hier kann man jetzt mit dem Textfeld machen, was man möchte
'Z.B. den Wert des Textfeldes in eine Zelle schreiben
case else
oKey_KeyPressed = False
end select
End Function
Function oKey_KeyReleased(oEvt) As Boolean
oKey_KeyReleased = False
End Function
Sub oKey_disposing(oEvt)
'Muß immer vorhanden sein, auch wenn keine weitere Funktion auszulösen ist.
End Sub[/code]
Das Sub RegisterKeyListener sollte beim Start des Dialoges mitgeladen werden, das Sub UnregisterKeyListener beim Schliessen.
Viele Grüße,
Vanished