Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

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

Moderator: Moderatoren

der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

Beitrag von der.milco »

Hallo zusammen,

ich suche nach einem Code, um in einem Dialog per Checkbox ein TextFeld zu aktivieren und auch gleichzeitig die Cursormarke reinzusetzen, um direkt losschreiben zu können.
Ich habe im Handbuch von OpenOffice nur die Methode "getFocus" gefunden. Finde aber keine Möglichkeit diese anzuwenden (jedenfalls nicht ohne Fehlermeldung!)

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

Re: Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

Beitrag von komma4 »

der.milco hat geschrieben:Jemand ne Idee??
"Im Prinzip, Ja: RTFM"
Hole Dir XRay zum Untersuchen Deiner Objekte.

Lese den mitgelieferten Basic-Code: Bibliothek: FormWizard, Modul: Layouter

Code: Alles auswählen

If Not IsMissing(FocusControlName) Then
		DlgFormDB.GetControl(FocusControlName).SetFocus()
	End If	
Nehme BTL2 zum leichteren Lesen.

Etwas Recherche (hier oder über Tante Google) beantwortet solchen Standardfragen auch.


Viel Erfolg noch!
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)
der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Re: Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

Beitrag von der.milco »

Super, das funktioniert! :)


Hast du jetzt vielleicht noch ne Idee zum Markieren von Text, wenn schon etwas in der Textbox steht, sodass ich den Text direkt überschreiben kann??
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

Beitrag von komma4 »

der.milco hat geschrieben:Hast du jetzt vielleicht noch ne Idee
Ja.
Nehme -wie oben angegeben- XRay und Du siehst, dass DlgFormDB.GetControl(FocusControlName) auch eine .setSelectedText()-Methode hat.
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)
der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Re: Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

Beitrag von der.milco »

Klappt NICHT!

Mit der .setSelectedText()-Methode bekomm ich ne Fehlermeldung: BASIC-Laufzeitfehler. Eigenschaft oder Methode nicht gefunden.

Habe jetzt das XrayTool installiert. Dort habe ich diese Methode aber auch nicht gefunden. Lediglich GET statt SET finde ich - die funktioniert aber auch nicht.
Wenn ich das probiere, wählt das Makro die Auswahl ab!

Zur Kontrolle mal mein Code:

Code: Alles auswählen

Sub CursorDialogStarten
	DialogLibraries.LoadLibrary("Standard")
	Dlg = CreateUnoDialog(DialogLibraries.Standard.Cursor)
	dlg.execute()
End Sub


Sub TextMarkieren
    If Not IsMissing("TextField1") Then
    	Dlg.GetControl("TextField1").getSelectedText()
    End If
End Sub
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

Beitrag von komma4 »

Sorry, Fehler von mir.
Du hast heraus gefunden, dass es die Methode nicht gibt.

Mein XRay sagte mir auf

Code: Alles auswählen

oTextfeld  = oDialog.getControl( "TextField1" )
xray oTextfeld
setSelection ( aSelection as struct )


Die Suche im engl. Forum nach setSelection ergab als einer der Treffer dieses Posting von DannyB, Ausschnitt:

Code: Alles auswählen

'[...]
   ' Now change the selection to select the words "an example".
   oControl.setSelection( MakeSelection( 5, 15 ) )
End Sub



Function MakeSelection( ByVal nMin As Long, ByVal nMax As Long ) As com.sun.star.awt.Selection
   oSelection = createUnoStruct( "com.sun.star.awt.Selection" )
   With oSelection
      .Min = nMin
      .Max = nMax
   End With
   MakeSelection = oSelection
End Function
Kommst Du damit zurecht?
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)
der.milco
***
Beiträge: 51
Registriert: Mo, 07.11.2005 16:44

Re: Focus (Cursor-Marke) in Textfeld von Dialogen setzen?

Beitrag von der.milco »

JEPP!
Zwar etwas umständlicher als ich mir das vorgestellt habe, aber egal: Hauptsache es klappt!
Genau so wollte ich es haben.

Danke @ komma4


ergänzender HINWEIS:
Der o.g. Code markiert den Text "nicht sichtbar"!
Wenn man dem Code nach Aufruf der Funktion MakeSelection noch die Zeile

Code: Alles auswählen

oDlg.GetControl("TextField1").SetFocus()
hinzufügt, wird die Markierung sichtbar und der Cursor blinkt am Ende der Markierung.
Antworten