Dialog Event Listener Beispiel

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Dialog Event Listener Beispiel

Beitrag von komma4 »

Dieses Beispiel beschreibt den Einsatz eines Lauschers ("Listener") auf ein bestimmtes Ereignis ("Event") in einem Dialog.
siehe: http://de.wikipedia.org/wiki/Ereignis_(Programmierung)

Wichtig beim Einsatz von Listenern ist, dass jede dieser Zuordnungen auch wieder entfernt wird.


Hier: wie einem Eingabefeld eines Dialoges ein FocusListener zugeordnet wird.
Ein FocusListener wird ausgelöst, wenn das Kontrollelement den Focus erhält ("Cursor kommt ins Feld": focusGained ), oder verliert ("Sprung ins nächste Feld": focusLost ).


Als erstes wird ein Objekt vom "Lauscher" erzeugt:
Syntax: Objekt = createUnoListener( prefix, interfaces )

Code: Alles auswählen

oLauscheFocus = _
 createUnoListener( _
 "TextFeld_" , _
 "com.sun.star.awt.XFocusListener" _
)
Nun dieses Objekt einem Kontrollelement zuordnen:

Code: Alles auswählen

oDialog.getControl( "TextField1").addFocusListener( oLauscheFocus )
Bei einem Focuswechsel werden die folgenden Unterroutinen selbständig aktiviert (aufgerufen).
Die Namen der Unterroutinen setzen sich zusammen aus dem oben vergebenen Prefix und dem Namen der Ereignisse:

Code: Alles auswählen

' =====
' zugeordnetes Kontrollelement wurde verlassen
Sub TextFeld_focusLost( oLauscheFocus )

' Beispiele für Aktionen

' welches Kontrollelement wurde verlassen
' wie im Editor als "Name" sichtbar
 dlg_FeldName = _
 oLauscheFocus.Source.Model.Name

' ermitteln des Textes des Kontrollelements
dlg_FeldInhalt = _
 oDialog.getControl( dlg_FeldName ).getText()
End Sub 


' =====
' zugeordnetes Kontrollelement wurde betreten
Sub TextFeld_focusGained( oLauscheFocus )
End Sub

Nach Ende des Dialogs die Lauscher unbedingt entfernen:

Code: Alles auswählen

oDialog.getControl( "TextField1").removeFocusListener( oLauscheFocus )
Hinweis:
werden in die Unterroutinen Anweisungen eingebaut, die Anzeigen auf dem Bildschirm hervorrufen (PRINT, MSGBOX oder ähnliche Befehle), so wird die Aktion u.U. ausgelöst, da sich ja der Focus ändert. So kann schnell eine Endlosschleife auftreten.

Viel Spass mit OOoBasic!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)