Seite 1 von 1

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

Verfasst: So, 16.11.2008 19:30
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??

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

Verfasst: So, 16.11.2008 21:55
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!

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

Verfasst: Di, 18.11.2008 20:11
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??

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

Verfasst: Di, 18.11.2008 23:06
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.

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

Verfasst: Mi, 19.11.2008 19:15
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

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

Verfasst: Do, 20.11.2008 00:47
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?

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

Verfasst: Di, 25.11.2008 10:31
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.