aktion nach "enter" in einem textfeld (dialog)

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

Moderator: Moderatoren

schosch
*
Beiträge: 12
Registriert: Sa, 21.08.2004 20:22

aktion nach "enter" in einem textfeld (dialog)

Beitrag von schosch »

Hallo,

was ich suche: wie kann ich den Wert auslesen den die Eingabetaste in einem Textfeld hat?


Kann man diese Frage überhaupt verstehen? In ein Textfeld soll ein Wort eingegeben werden und nach drücken der Eingabetaste soll das Wort in eine Tabelle oder sonstwohin geschrieben werden. Ich stelle mir also vor dem Ereignis "Text modifiziert" ein Makro zuzuweisen, welches nach einer Prüfung des Wertes des letzten Zeichens nur dann weiter läuft, wenn der Wert der Eingabetaste erkannt wird.

Sicher könnte man die Eingabe auch mit einem extra Button beenden, aber ich halte das nicht für besonders intuitiv. Wie dem auch sei, falls mir jemand einen Hinweis geben kann wäre ich mal wieder sehr dankbar....
schöne Grüße
Georg

ps noch was anderes: kann man makros auch ausführen ohne openoffice geöffnet zu haben??
ck
Beiträge: 6
Registriert: Mo, 07.02.2005 16:56
Wohnort: Tambach-Dietharz

Beitrag von ck »

Hallo Georg,

wenn ich Dich richtig verstanden habe möchtest Du die Eingaben in einem Textfeld im Dialog auswerten !?

Warum verwendest Du da nicht einfach das Ereignis "Taste losgelassen" des Textfeldes und verknüpfst das Ganze mit einer entsprechenden Routine ? Darin merkst Du Dir einfach jedesmal den Inhalt des Textfeldes. Wenn sich dieser zum vorherigen Aufruf nicht geändert hat, wurde eine Steuertaste gedrückt, sehr wahrscheinlich Enter oder eine Pfeiltaste.

Vielleicht hilft Dir das ja weiter.
Viele Grüße aus dem Thüringer Wald,

Carsten
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hallo Georg,
ps noch was anderes: kann man makros auch ausführen ohne openoffice geöffnet zu haben??
Zumindest darauf mal eine kurze Antwort: Jein. Je nach Version . Ab 2.0 kannst du Makros ausführen, ohne dass eine sichtbare Komponente von OOo ausgeführt wird. Allerdings wird immer zumindest der "Stardesktop" geladen, das Grundobjekt, das aber dann nicht mehr unbedingt eine sichtabre Komponente haben muss. In Version 1.1 muss meines Wissens immer eine sichtbare Komponente noch da sein, sonst läuft der Rest nicht.

Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
Vanished
**
Beiträge: 35
Registriert: Do, 23.12.2004 12:38

Beitrag von Vanished »

ck hat geschrieben:Hallo Georg,

wenn ich Dich richtig verstanden habe möchtest Du die Eingaben in einem Textfeld im Dialog auswerten !?

Warum verwendest Du da nicht einfach das Ereignis "Taste losgelassen" des Textfeldes und verknüpfst das Ganze mit einer entsprechenden Routine ? Darin merkst Du Dir einfach jedesmal den Inhalt des Textfeldes. Wenn sich dieser zum vorherigen Aufruf nicht geändert hat, wurde eine Steuertaste gedrückt, sehr wahrscheinlich Enter oder eine Pfeiltaste.
So trivial ist sein Problem leider nicht, das habe ich festgestellt, als ich mich mit etwas Ähnlichem beschäftigt habe.
Zum einen würde Deine Methode bei jedem Tastenanschlag im entsprechenden Textfeld reagieren, also auch dann, wenn der Text eingetragen wird, zum anderen ist es zumindest mir nicht gelungen, innerhalb eines Dialoges die Entertaste (Chr(13)) auf einfachem Weg auszuwerten. Seither vertrete ich die Auffassung, dass in einem laufenden Dialog seitens OO die Entertaste überhaupt nicht beachtet wird (Ausnahme: das aktuelle Control ist ein CommandButton).

Es geht aber dennoch. Notwendig dazu ist allerdings ein KeyListener, der auf das jeweilige Control (Textfeld, ComboBox o.ä.) registriert wird. Den vollständigen Code für einen Dialog mit 17 Controls gibt es hier.

Verkürzt für ein Textfeld:

Code: Alles auswählen

Sub RegisterKeyListener 
  MeinTextfeld=MeinDialog.getControl("MeinTextfeld")
  oKeyListener = createUnoListener("oKey_", "com.sun.star.awt.XKeyListener") 
  MeinTextfeld.addKeyListener(oKeyListener) 
End Sub 

Sub UnregisterKeyListener 
  MeinTextfeld=MeinDialog.getControl("MeinTextfeld")
  MeinTextfeld.removeKeyListener(oKeyListener) 
End Sub 

Function oKey_KeyPressed(oEvt) As Boolean 
  select case oEvt.KeyChar 
    case chr(13) 
    
       'Hier kann man jetzt mit dem Textfeld machen, was man möchte
       'Z.B. den Wert des Textfeldes in eine Zelle schreiben

    case else 
       oKey_KeyPressed = False 
  end select 
End Function 

Function oKey_KeyReleased(oEvt) As Boolean 
  oKey_KeyReleased = False 
End Function 

Sub oKey_disposing(oEvt) 
  'Muß immer vorhanden sein, auch wenn keine weitere Funktion auszulösen ist.
End Sub
Das Sub RegisterKeyListener sollte beim Start des Dialoges mitgeladen werden, das Sub UnregisterKeyListener beim Schliessen.

Viele Grüße,
Vanished
Antworten