Selektierten Text im Textfeld einer Dialogbox erkennen

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

Moderator: Moderatoren

keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

Selektierten Text im Textfeld einer Dialogbox erkennen

Beitrag von keyboard-billy »

Hallo Leutz,

ich habe eine Dialogbox mit einem Textfeld erstellt.

Ich starte meine Dialogbox mit folgendem Code:

Code: Alles auswählen

Option Explicit

Dim oDialog as Object                                                          'globale Definition des Dialoges
Dim oControlModel as Object
Dim oControlView as Object

REM Dialogbox öffnen und Text im Textfeld ausgeben
Sub execDlg_PDANotice
  Dim oBib as Object
  Dim oDlg as Object
  Dim oListener As Object

  REM zuerst muss die Dialogbibliothek (hier im Dokument eingebunden!) geladen werden
  DialogLibraries.LoadLibrary("Standard")
  oBib = DialogLibraries.getByName( "Standard" )
  oDlg = oBib.getByName( "Dlg_PDANotice" )
  oDialog = CreateUnoDialog( oDlg )

  REM MRI - UNO Object Inspection Tool (Python)
  Dim oMRI As Object
  Globalscope.BasicLibraries.LoadLibrary( "MRILib" )
  oMRI = CreateUnoService( "mytools.Mri" )

  oControlModel = oDialog.getControl( "TextField1" ).Model
  oControlView = oDialog.getControl( "TextField1" ).View

  oControlModel.Text = "Blaufaselblubb"                                    'in Textfeld schreiben
 
  oMRI.inspect ( oControlView )

  oDialog.execute()                                                                   'Dialog öffnen
End Sub
Nun möchte ich automatisch ermitteln, wenn Text ausgewählt wurde.

Wenn ich mir mit dem Inspector (MRI) das die View oControlView ansehe bekomme ich folgende Listener:

Code: Alles auswählen

(Listeners)
com.sun.star.awt.XFocusListener
com.sun.star.awt.XKeyListener
com.sun.star.awt.XMouseListener
com.sun.star.awt.XMouseMotionListener
com.sun.star.awt.XPaintListener
com.sun.star.awt.XTextListener
com.sun.star.awt.XWindowListener
com.sun.star.lang.XEventListener
com.sun.star.util.XModeChangeApproveListener
com.sun.star.util.XModeChangeListener
Leider stellt keiner der o.a. Listener eine Methode zur Überwachung der Selektierung zur Verfügung. Die View hat eine Property Selection (Struct). Aber ich habe noch nicht rausgefunden, welcher Listener das auswerten könnte....

Wenn ich mit dem Inspector das Model oControlModel betrachte, erhalte ich folgende Listener:

Code: Alles auswählen

(Listeners)
com.sun.star.beans.XPropertiesChangeListener
com.sun.star.beans.XPropertyChangeListener
com.sun.star.beans.XVetoableChangeListener
com.sun.star.lang.XEventListener
Dummerweise (und natürlich konsequent logisch!) hat das Model natürlich nicht die Property Selection - jedoch den Listener
com.sun.star.beans.XPropertiesChangeListener der die Properties eines Objektes auf Veränderung prüfen könnte.

Die Eigenschaftsbox im Dialogeditor bietet (natürlich!) auch kein Event an, welches das prüft.
Wie kann ich auf eine Selektierung des Textes triggern (listen...), wenn ich z.B. Text mit der Maus auswähle?

Über Vorschläg zur Vorgehensweise würde ich mich sehr freuen.

Btw.: Ich werwende OOO 2.4.2 unter XP/SP2

Danke und Grüße,
Billy
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Selektierten Text im Textfeld einer Dialogbox erkennen

Beitrag von turtle47 »

Hallo Billy,
Die Eigenschaftsbox im Dialogeditor bietet (natürlich!) auch kein Event an, welches das prüft.
Wieso nicht?
Du kannst dem Textfeld doch bei Ereignissen > Eigenschaften > "Maustaste losgelassen" ein Makro zuweisen.

Siehe Beipieldatei.

Viel Erfolg.

Jürgen
Dateianhänge
SelektierterText.ods
(10.04 KiB) 63-mal heruntergeladen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

[Gelöst] Selektierten Text im Textfeld einer Dialogbox erken

Beitrag von keyboard-billy »

@turtle47

Hallo Jürgen,

Du hast vollkommen Recht! Ich hatte natürlich meinen Denkansatz immer in Richtung "selektieren Text" - quasi immer den Fokus auf die Property "SelectedText" gelenkt :mrgreen: . (... zugegeben, es ist mein erster Dialog und mir fehlt's da völlig an Erfahrung)

Das Natürlich ein Ereignis eintritt, wenn der Text selektiert wird (... irgendwann muss die Maustaste wieder losgelassen werden ...) ist natürlich klar :idea: ; aber auf diese "Banalität" wäre ich nie und nimmer mehr gekommen :oops: .

Ich hab nach Deiner Anregung den Denk ansatz weiter gesponnen: "Was passiert, wenn ich den Text nicht mit der Maus, sonder mit der Tastatur markiert habe?"
Logische Konsequenz: Ich muss natürlich eine Taste loslassen! Und da gibt's natürlich auch einen Listener im Eigenschaftsfenster der Dialogbox: "Taste losgelassen".

Diesem Ereignis ordne ich das gleiche Makro zu, wie schon bei "Maustaste losgelassen". Und schon funzt das hervorragend :!: .

Danke Jürgen, Dein Vorschlag war einfach genial - um nicht zu sagen genial einfach. :D :D :D

P.S.: ich trau's mich fast nicht sagen, aber Dein Makro hat eine Fehlermeldung ausgegeben. Ich hab's ein bisschen modifiziert, indem ich alle Variablen durchgängig deklariert habe und die Variablen oDialog1 und oMyTextfield öffentlich gemacht habe :wink: - jetz läuft's einwandfrei.

Grüsse,
Billy
Dateianhänge
SelektierterText_Billy.ods
(10.33 KiB) 58-mal heruntergeladen
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Selektierten Text im Textfeld einer Dialogbox erkennen

Beitrag von turtle47 »

Hi Billy,
keyboard-billy hat geschrieben: P.S.: ich trau's mich fast nicht sagen, aber Dein Makro hat eine Fehlermeldung ausgegeben.
Warum, ich bin doch auch nicht vollkommen, obwohl das Makro bei mir gestern keine Fehlermeldung gebracht hat.
Ich hatte es vor dem Einstellen hier im Forum natürlich auch getestet.

Ich habe es jetzt selber mal runtergeladen und natürlich hast Du Recht, es kommt zu einem Error. Seltsam :?:
Aber die Hauptsache ist, dass es jetzt funktioniert und Du glücklich bist. :lol:

Schöne Grüsse.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

Re: Selektierten Text im Textfeld einer Dialogbox erkennen

Beitrag von keyboard-billy »

@turtle47

Hallo Jürgen,
Ich habe es jetzt selber mal runtergeladen und natürlich hast Du Recht, es kommt zu einem Error. Seltsam
natürlich gar nicht seltsam, weil Du in Deiner ersten Prozedur Dialog_starten die Variable myTextfield durch die Verwendung (... Du deklarierst Deine Variablen leider nicht, sondern verwendest sie undeklariert in der Befehlszeile) belegst, und deren Inhalt jedoch nicht an die 2. Prozedur MarkText weiter gibst :shock: . Mit der Variable oDialog1 ist das gleiche Spiel:

Code: Alles auswählen

'Global oDialog1 as Object

Sub Dialog_starten
	DialogLibraries.loadLibrary("Standard") 
	oForm = DialogLibraries.Standard.Dialog1
	oDialog1 = CreateUnoDialog(oForm)                '...hier belegst Du die Variable oDialog1
	myTextfield = oDialog1.GetControl("TextField1")  '...hier belegst Du die Variable myTextfield
	myTextfield.text = "Blaufaselblubb"
	oDialog1.execute
end sub

Sub MarkText
myTextfield= oDialog1.GetControl("TextField1")     '...oDialog1 und myTextfield sind hier nicht bekannt
selText= myTextfield.SelectedText  
msgbox selText
oDialog1.endexecute                                '...oDialog1 ist hier immer noch nicht bekannt
End Sub
Der Error "Objektvariable nicht belegt" folgt daher unweigerlich :!: .

Wenn Du kein Freund von Pflichtdeklarationen (= Option Explicit) bist, dann musst Du es zumindest so lösen:

Code: Alles auswählen

REM Variablen oDialog1 und myTextfield öffentlich deklarieren
Dim oDialog1 as Object
Dim myTextfield As Object

Sub Dialog_starten
  DialogLibraries.loadLibrary("Standard") 
  oForm = DialogLibraries.Standard.Dialog1
  oDialog1 = CreateUnoDialog(oForm)
  myTextfield = oDialog1.GetControl("TextField1")
  myTextfield.text = "Blaufaselblubb"
  oDialog1.execute
end sub

Sub MarkText
  selText= myTextfield.SelectedText  
  msgbox selText
  oDialog1.endexecute
End Sub
So gibt's jedenfalls keinen Error mehr :wink:

Gruß,
Billy
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Selektierten Text im Textfeld einer Dialogbox erkennen

Beitrag von turtle47 »

Hallo Billy,

zugegeben ich bin manchmal etwas träge mit der Deklaration von Variablen.
Aber wie kommt es dann, dass die Datei gestern Abend funktioniert hat und jetzt nicht mehr :?:

Weil ich erwähnte es schon:
turtle47 hat geschrieben:obwohl das Makro bei mir gestern keine Fehlermeldung gebracht hat.
Ich hatte es vor dem Einstellen hier im Forum natürlich auch getestet.
und deshalb:
turtle47 hat geschrieben:Seltsam
Ich gelobe Besserung mit den Deklarationen. :D

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
keyboard-billy
***
Beiträge: 53
Registriert: Mo, 27.11.2006 15:17
Wohnort: Nürnberg
Kontaktdaten:

Re: Selektierten Text im Textfeld einer Dialogbox erkennen

Beitrag von keyboard-billy »

@turtle47
Aber wie kommt es dann, dass die Datei gestern Abend funktioniert hat und jetzt nicht mehr
... na weil Du getsern das Makro unter M$-Offffff...... laufen hast lassen : :lol: :lol: :lol:

Im Ernst: Keine Ahnung! An und für sich hätte es so nicht laufen dürfen - seltsam :o

Gruß,
Billy
... im Prinzip ist alles einfach. Vorausgesetzt man weiss, wie's geht!
Antworten