RETURN im textfield mit Zeichen (#) automatisch ersetzen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: RETURN im textfield mit Zeichen (#) automatisch ersetzen

Re: RETURN im textfield mit Zeichen (#) automatisch ersetzen

von keyboard-billy » Mi, 24.02.2010 13:20

@DPunch:
Versteh mich nicht falsch, das war überhaupt nicht böse gemeint.
...nein, nein -mach Dir keine Sorgen- hab ich auch nicht so verstanden.
Ich habe da nur in meiner Source so'ne Zeile mit getModel() und irgenwie hing mir das noch im Gedächtnis rum, sodass ich der irrigen Annahme unterlegen war, dass turtle47 dass in seinem Code geschrieben hätte...

Vielleicht sind das schon erste Anzeichen meiner pre-seniler Demenz :shock: .... ??? : :lol: :lol: :lol: :lol:
... dass es eigentlich nicht viel Sinn macht
.... ähem: wie wahr - wie wahr... :D

Greezt,
Billy

Re: RETURN im textfield mit Zeichen (#) automatisch ersetzen

von DPunch » Mi, 24.02.2010 12:48

Versteh mich nicht falsch, das war überhaupt nicht böse gemeint.

Ich dachte nur, wenn Du schon irgendwie das Bedürfnis hast, diese Sache extra zu erwähnen, dann würdest Du vielleicht auch gerne wissen, dass es eigentlich nicht viel Sinn macht. ;)

Re: RETURN im textfield mit Zeichen (#) automatisch ersetzen

von keyboard-billy » Mi, 24.02.2010 09:25

@DPunch:
:oops: ähem.... ich hab' da eine andere Baustelle versehentlch damit rein gebracht....
.... jetzt wo ich darauf hingewiesen wurde, ist mir das erst aufgefallen.... :oops:
im Übrigen nicht des Dialogs, sondern des Steuerelements), bzw den Verbund aus Controller und View, das dem View zugehörige Model müsste man hingegen explizit ansprechen.
... klar, hast Du natürlich vollkommen Recht.

Nix für ungut :roll: ...

Greetz,
Billy

Re: Gelöst: RETURN im textfield mit Zeichen (#) automatisch erse

von DPunch » Di, 23.02.2010 11:47

keyboard-billy hat geschrieben:Ich greife übrigens nicht auf das Model, sondern immer auf die View des Dialogs zu. Die View ist ja ohnehin das Abbild des Models und die sich darin befindlichen Controls können ohne weiteres verändert bzw. ausgelesen werden.
Abgesehen davon, dass ich nicht weiss, warum Du das extra erwähnst, kriegt man mit getControl in Dialogen doch sowieso immer den View (im Übrigen nicht des Dialogs, sondern des Steuerelements), bzw den Verbund aus Controller und View, das dem View zugehörige Model müsste man hingegen explizit ansprechen. :-|

Gelöst: RETURN im textfield mit Zeichen (#) automatisch erse

von keyboard-billy » Mo, 22.02.2010 21:27

@turtle47
Hallo Jürgen,
herzliches Dankeschön für Deinen schnellen Lösungsvorschlag :mrgreen: .
Ich habe den Listener rausgeworfen und Deinen Code(ansatz) implementiert. Jetzt klappt das ganz prima.

Hier mein Code:

Code: Alles auswählen

Sub checkNoticeIfModified( oCntrl As Object)
  Dim aText() As String
  Dim iArrCnt2 As Integer
  Dim lCursorPos As Long
  Dim oTextfield As Object
  Dim oSelection As New com.sun.star.awt.Selection

  If ( oCntrl.KeyCode = com.sun.star.awt.Key.RETURN ) Then
    oTextfield = oDialog.GetControl( "TextField1" ).View
    lCursorPos =  oTextfield.Selection.Max
    aText = Split( oTextfield.Text, sLF)

    For iArrCnt2 = LBound( aText ) to UBound( aText )
      If aText( iArrCnt2 ) = "" Then
        aText( iArrCnt2 ) ="# "            'hier wird eine leere, neu eigefügte Zeile mit der Zeichenkette "# " begonnen.
      End If
    Next iArrCnt2

    oTextfield.Text = Join( aText , sLF )
    REM Der Cursor wird direkt hinter der zuletzt eingefügten Zeichenkette positioniert:
    oSelection.Min = lCursorPos + 2
    oSelection.Max = oSelection.Min
    oTextfield.setSelection( oSelection )
  End If
End Sub
Übrigens:
Allein die Structure com.sun.star.awt.Selection (oSelection) mit den beiden Werten zu belegen reicht nicht aus. Man muss die neu belegte Structure mit setSelection() dem Control-Objekt ( oTextfield ) zuweisen.
Ich greife übrigens nicht auf das Model, sondern immer auf die View des Dialogs zu. Die View ist ja ohnehin das Abbild des Models und die sich darin befindlichen Controls können ohne weiteres verändert bzw. ausgelesen werden.

Schöne Grüße,
Billy

Re: RETURN im textfield mit Zeichen (#) automatisch ersetzen

von turtle47 » Sa, 20.02.2010 21:36

Hi Billy,

die aktuelle Position des Cursors bekommst Du mit:

Code: Alles auswählen

	myTextfield = oDialog1.GetControl("TextField1")
	Dim oSelection As New com.sun.star.awt.Selection
	Pos_Cursor =  myTextfield.Selection.max
	msgbox Pos_Cursor
Setzen kannst Du den Cursor mit:

Code: Alles auswählen

	myTextfield = oDialog1.GetControl("TextField1")
	Dim oSelection As New com.sun.star.awt.Selection
	myTextfield.setfocus
	oSelection.Min = Pos_Cursor
	oSelection.Max = Pos_Cursor
keyboard-billy hat geschrieben: Das loslassen der Taste habe ich mittels eines Listeners ganz gut hinbekommen.
Warum machst Du das mit einem Listener? Es geht auch so, mit dem Ereignis des Textfields "Taste gedrückt" :

Code: Alles auswählen

sub get_enter_Control(Cntrl)
  dim thisCntrl
  dim modelCntrl
  thisCntrl = cntrl.source
  modelCntrl = thisCntrl.getmodel()
  if (cntrl.KeyCode = com.sun.star.awt.Key.RETURN) then
    msgbox "Key ""Enter"" is pressed"
  end if
end sub
Jürgen

RETURN im textfield mit Zeichen (#) automatisch ersetzen

von keyboard-billy » Sa, 20.02.2010 19:36

Hallo,

ich habe mir eine Dialogbox erstellt in der sich u.a. ein textfield befindet. Der Inhalt des texfields wird von einer Datenbank gelesen und eingetragen.
Nun möchte ich Zeilen mittels der RETURN-Taste einfügen, die automatisch nach dem Loslassen der Returntaste mit einem Zeichen (in dem Fall #) beginnen.

Das loslassen der Taste habe ich mittels eines Listeners ganz gut hinbekommen. Welche Taste gedrück wurde kann ich auch ermitteln.

Nun soll aber die Zeile automatisch mit # beginnen und nicht mit CRLF bzw. LF. Irgendwie habe ich keine Lösung gefunden innerhalb des textfields die Cursor bzw. die Zeilenposition zu ermitteln, womit man einen Pointer im textfield auf die entsprechnede Zeile/Position verweisen könnte.

Ich greife übrigens auf die controls in der View zu.

Einen Auzug des Codes habe ich hier:

Code: Alles auswählen

REM Die folgende Sub wird vom Listener com.sun.star.lang.XKeyListener aufgerufen

Sub KEY_keyReleased( oKeyListener ) As Boolean
  Dim sControlName as String
  Dim oControlView as Object
  Dim aText(), sText As String
  Dim iArrCnt2 As Integer
  
  If oKeyListener.KeyCode = com.sun.star.awt.Key.RETURN Then
    sControlName = oKeyListener.Source.Model.Name
    oControlView = oDialog.getControl( sControlName )
    aText = Split( oControlView.Text, sLF)
    For iArrCnt2 = LBound( aText ) to UBound( aText )
      If aText( iArrCnt2 ) = "" Then
        aText( iArrCnt2 ) ="#"
      End If
    Next iArrCnt2
    oControlView.Text = Join( aText , sLF )
  End If
End Sub
Das ganze funktioniert zwar mit dem Ersetzen, jedoch wird der Cursor nach jeder Eingabe von RETURN wieder am vor Beginn des Textes im textfield der geöffneten Dialogbox positioniert.

Wie kann ich den Cursor im textfield dazu zwingen zur letzten Position (direkt nach der Eingabe) zurückzukehren?

Danke & Greetz,
Billy

Nach oben