BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Tastatur - Abfrage, wie?

Alles zur Programmierung im LibreOffice.
Antworten
K-LOFF
Beiträge: 101
Registriert: Di 17. Mai 2011, 15:38
Wohnort: NDS

Tastatur - Abfrage, wie?

Beitrag von K-LOFF » Di 9. Jun 2020, 17:45

moin,

ich möchte bei einem Textfeld eines Dialogs, die Tasten abfragen.
Bei 'Return', 'Enter' und 'Esc' soll in eine andere Sub verzweigt werden.

Wie kann ich den ASCII des letzen Tastendrucks auslesen, oder gibt es was besseres?

Ich lese den Inhalt des Textfeldes in ein String ein, sehe aber kein 'Return', 'Enter' und 'Esc'!
gruss

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Tastatur - Abfrage, wie?

Beitrag von craig » Mi 10. Jun 2020, 00:31

Hallo,

ich habe hier mal was gebastelt:

Code: Alles auswählen

Option Explicit
REM ***********************************************************************************
REM Dieses Makro zeichnet einen dynamischen Dialog ohne Dialog-Designer.
REM Auf dem Dialog wird eine Editbox platziert.
REM Bei Drücken eine der in der Editbox angezeigten Tasten:
REM 			Drücke: ESC | END | F2 | A
REM Wird eine MsgBox aufgerufen.
REM ***********************************************************************************
Dim oDlgModel as Object
Dim oDlg as Object
Dim oEditModel1 as Object
Dim oEdit1 as Object
Dim oEditModel2 as Object
Dim oEdit2 as Object
Public oKeyListener as Object

Sub DynamicDialog
	oDlgModel=createUnoService("com.sun.star.awt.UnoControlDialogModel")
	With oDlgModel
		.Title="Tasten-Checker"
		.Width=180
		.Height=110
		.BackgroundColor=RGB(140,140,140)
	End With
	
' Was ist XRAY?
' https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial#X-Ray_tool
'xray oDlgModel
	oDlg=createUnoService("com.sun.star.awt.UnoControlDialog")
	oDlg.setModel(oDlgModel)
	
	oEditModel1=oDlgModel.createInstance("com.sun.star.awt.UnoControlEditModel")
	With oEditModel1
		.Name = "txtEdit1"
		.PositionX = 10
		.PositionY = 20
		.Width = 150
		.Height = 15
		.TabIndex = 0
		.BackgroundColor=RGB(200,200,200)
		.Text="Drücke: ESC | END | F2 | A"
		.TextColor=RGB(255,0,0)
	End With

	oEditModel2=oDlgModel.createInstance("com.sun.star.awt.UnoControlEditModel")
	With oEditModel2
		.Name = "txtEdit2"
		.PositionX = 10
		.PositionY = 40
		.Width = 150
		.Height = 60
		.TabIndex = 0
		.BackgroundColor=RGB(220,220,220)
		.Multiline=True
		.Text="Hier reagiert der Listener nicht!" & chr(10) &_
				"Kein Listener = Keine Msgbox!" & chr(10) &_
				"ESC = Dialog wird beendet" & chr(10) &_
				"F2 = keine Reaktion" & chr(10) &_
				"END = Cursor springt in der Box an das Ende der Zeile" & chr(10) &_
				"a = schreibt ein a in die Box"
		.TextColor=RGB(0,0,255)
	End With

'xray oEditModel2
	' EditBoxen anzeigen
	oDlgModel.insertByName("txtEdit1",oEditModel1)
	oDlgModel.insertByName("txtEdit2",oEditModel2)
	
	' Broadcaster-Service laden
	oKeyListener=CreateUnoListener("KeyEvent_","com.sun.star.awt.XKeyListener")
'xray oKeyListener	
	' Objektzeiger auf EditBox1 setzen
	oEdit1=oDlg.getControl("txtEdit1")
	' Listner auf EditBox1 setzen
	oEdit1.addKeyListener(oKeyListener)

	oDlg.setVisible(True)
	oDlg.Execute()

End Sub

REM Taste drücken ? KeyPressed
Sub KeyEvent_KeyPressed(oKeyEvent)
REM constants group Key:
REM https://www.openoffice.org/api/docs/common/ref/com/sun/star/awt/Key.html
REM und hier:
REM https://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1awt_1_1Key.html
	Select Case oKeyEvent.KeyCode
		Case com.sun.star.awt.Key.ESCAPE
			Msgbox "ESC" & chr(10) &_
					"Key-Konstante = " & oKeyEvent.KeyCode
		Case com.sun.star.awt.Key.A
			Msgbox "A" & chr(10) &_
					"Key-Konstante = " & oKeyEvent.KeyCode
		Case com.sun.star.awt.Key.END
			Msgbox "END" & chr(10) &_
					"Key-Konstante = " & oKeyEvent.KeyCode
		Case com.sun.star.awt.Key.F2
			Msgbox "F2" & chr(10) &_
					"Key-Konstante = " & oKeyEvent.KeyCode
	End Select
		oDlg.EndExecute()
End Sub


Sub KeyEvent_KeyReleased(oKeyEvent)

End Sub

Sub KeyEvent_disposing(oKeyEvent)
' dieser Dummy ist UNBEDINGT erforderlich, damit der Listener entladen wird.
' siehe hier: https://www.openoffice.org/api/docs/common/ref/com/sun/star/lang/XComponent.html#dispose
End Sub
Start-Routine ist:

Code: Alles auswählen

Sub DynamicDialog
Ich war etwas zu faul alles durchgängig zu kommentieren. ;)
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

K-LOFF
Beiträge: 101
Registriert: Di 17. Mai 2011, 15:38
Wohnort: NDS

Re: Tastatur - Abfrage, wie?

Beitrag von K-LOFF » Mi 10. Jun 2020, 18:01

@ craig: Danke Dir,
das ist schon mal was. Muß es nur bei mir reinfrickeln.

Ich versuche es so: 'Kode = oKeyEvent.KeyCode' , dann werte ich 'Kode' aus
Es ist alles andere als ASCII-Code. Aber die Links von Dir haben schon mal die Zahlen schon mal gezeigt.
Was mich aber stört ist, daß die 'ESC-Taste' ohne die Abfrage alles abbricht und den Dialog schließt.

Wo findet man denn sowas? Habe vorher versucht was zu finden, wie man den KeyCode ausließt, habe aber ichts gefunden.
Ich kann auch kein english.
gruss

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: Tastatur - Abfrage, wie?

Beitrag von craig » Mi 10. Jun 2020, 21:56

Hallo K-LOFF,
hatte eben was fertig geschrieben: Ein unachtsamer Klick und alles war weg :(
Nun, auf‘s Neue.

Kein englisch? Oh, je.

Es gibt Hilfmittel:
Der Google-Übersetzer, ist nicht immer korrekt, aber hilfreich.

Office Extensions. Diese Erweiterungen übersetzen ganze Writer-Dokumente.
Der Nachteil ist, dass auch Code-Passagen übersetzt werden und Beispielcodes nicht mehr zu gebrauchen sind.
Ausserdem kann man bei längeren Texten mindestens eine Tasse Kaffee oder Tee trinken ;)
  1. PageTranslate → LibreOffice-Plugin zum Übersetzen von Dokumenten, das die Formatierung beibehalten soll.
  2. Anaphraseus
Im zuvor geposteten Code, habe ich in einem der Kommentare den Link zum Code-Inspektionstool XRAY hinterlegt. Ein unbedingtes MUSS und große Hilfe bei der Programmierung.
Es handelt sich hierbei um ein deutschsprachiges Writer-Dokument, welches nach einem Klick auf den Button „Installieren“, XRAY installiert. Es ist gleichzeitig die Doku zu diesem Tool.

Andrew Pitonyak's OpenOffice Macro Information
Ebenfalls ein MUSS ist Andrew‘s Werk: „OpenOffice.org Macros Explained“
Welches auf derselben Seite in einer deutschen Übersetzung von Volker Lenhardt herunterladbar ist.
OOME_3_0_deutsch.pdf
Gibt es als Writer-File und als PDF-File.

Hiernoch ein Buch von Oracle, ist zwar schon ein wenig betagt, aber hilfreich:
StarOffice TM 7 Office Suite – Basic Programmierhandbuch

Dannenhöfer‘s Seite kennst Du schon.

Im englischen AOO-Forum gibt es auch jede Menge Informationen. Oben rechts befindet sich ein Suchfeld (Search). Tippe dort einen Suchbegriff ein und Dir wird hoffentlich brauchbares angezeigt. Übersetzung sollte nun kein Problem mehr sein ;)

Und dann geht es noch so:
Suchmaschine öffnen und einen der folgenden Suchbegriffe eingeben:
    • Listener site:de.openoffice.info
    • Listener site:openoffice-forum.de
    • Banane site:libreoffice-forum.de
    • Key Code site:forum.openoffice.org
    • KeyCode site:forum.openoffice.org
    • Key Handler site:forum.openoffice.org
    • Keyhandler site:forum.openoffice.org
    • Openoffice +Key +Handler +Listener
    • und sonstige vielfältige Suchbegriffskombinationen
Sonst fällt mir im Augenblick nichts mehr ein.
------------------------
K-LOFF hat geschrieben:Es ist alles andere als ASCII-Code. Aber die Links von Dir haben schon mal die Zahlen schon mal gezeigt.
Lese hierzu OOME...pdf, Kapitel "7.1. ASCII- und Unicode-Werte"
und z.B. Liste der Unicodeblöcke
K-LOFF hat geschrieben:Was mich aber stört ist, daß die 'ESC-Taste' ohne die Abfrage alles abbricht und den Dialog schließt.
Das ist SInn und Zweck einer ESCAPE-Sequence.
Siehe im selben Kapitel
ESC Escape = Fluchtsymbol – Die Esc-Taste auf der Tastatur

Was bedeutet ESCAPE wörtlich? → Siehe Google-Übersetzer.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

Wanderer
Beiträge: 895
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: Tastatur - Abfrage, wie?

Beitrag von Wanderer » Do 11. Jun 2020, 08:05

Es ist alles andere als ASCII-Code. Aber die Links von Dir haben schon mal die Zahlen schon mal gezeigt.
Hier geht es entsprechend Deiner Frage um Keycodes. Die Zuordnung von Zeichen erfolgt später.
Oben hattest Du Return und Enter genannt, wobei erstere die Taste im Buchstabenblock, letztere die im Ziffernblock sein kann.
Die Tasten kann man unterscheiden, beiden wird aber normalerweise dasselbe Zeichen als Ergebnis zugeordnet, wobei über die Verschiedenen Betriebssysteme CR, lf und CR+LF vorkommen und - wie Du schon gemerkt hast - das eigentliche Zeichen oft nicht im String steht.

Mit ASCII kommst Du bei einem Programm, das mit Unicode arbeitet auch nicht wirklich weit.

Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten