per basic-Code gebauter Dialog zum Leben erwecken
Moderator: Moderatoren
per basic-Code gebauter Dialog zum Leben erwecken
Hallo Leute,
brauche nochmals eure Hilfe. Nachdem R F3Total mich vor geraumer Zeit in die Richtung "geschubst" hat, wo ich hin wollte, komme ich jetzt leider nicht weiter.
Habe mir einen Dialog gebastelt, wie gewünscht nur per basic-Code, mit Schaltflächen, Kombinationsfeldern, Markierfeldern und so weiter
(ihr wisst selber was es da so alles gibt). Ich habe aber leider "nur" auf das optische geachtet.
Was mir jetzt nicht klar ist, wie kann ich meine gebauten makros mit den einzelnen Objekten "vertüddeln"????? Ich meine damit
diese Ereignisse Aktion ausführen, Text modifiziert, Status geändert, bei Fokusverlust, Taster gedrückt usw. und dann das entsprechende makro
da einbinden. Denn irgendwie muss ich den Dialog doch zum "leben" erwecken???
Ich habe die Übersetzung von Andrew Pitonyak gelesen, und Dannenhöfer's Website "gefragt", mri und xray (die nicht wirklich meine Freunde sind)
krieg ich mittlerweile zwar zum laufen, aber wenn man nicht genau weiß was man wie sucht, versteh ich da nur Bahnhof.
Wenn mir das jemand anhand eines Beispiels konkret von Anfang an erklären kann wäre das echt super.
Meine Versuche z.B für die Schaltfläche belaufen sich auf xray o_CMD_OK ergab ein leeres xray, wenn ich das "Model" (xray o_CMD_OK_Model) eingab, erschlug mich xray mit den Einstellungen für Größe, Position, Name usw. Wie gehe ich da dann weiter systematisch vor????
Hänge ne abgespeckte Version mal hier dran, vielleicht habt ihr ja sonst noch Verbesserungsvorschläge.
Danke schon mal im Voraus
Gruss Dirk
brauche nochmals eure Hilfe. Nachdem R F3Total mich vor geraumer Zeit in die Richtung "geschubst" hat, wo ich hin wollte, komme ich jetzt leider nicht weiter.
Habe mir einen Dialog gebastelt, wie gewünscht nur per basic-Code, mit Schaltflächen, Kombinationsfeldern, Markierfeldern und so weiter
(ihr wisst selber was es da so alles gibt). Ich habe aber leider "nur" auf das optische geachtet.
Was mir jetzt nicht klar ist, wie kann ich meine gebauten makros mit den einzelnen Objekten "vertüddeln"????? Ich meine damit
diese Ereignisse Aktion ausführen, Text modifiziert, Status geändert, bei Fokusverlust, Taster gedrückt usw. und dann das entsprechende makro
da einbinden. Denn irgendwie muss ich den Dialog doch zum "leben" erwecken???
Ich habe die Übersetzung von Andrew Pitonyak gelesen, und Dannenhöfer's Website "gefragt", mri und xray (die nicht wirklich meine Freunde sind)
krieg ich mittlerweile zwar zum laufen, aber wenn man nicht genau weiß was man wie sucht, versteh ich da nur Bahnhof.
Wenn mir das jemand anhand eines Beispiels konkret von Anfang an erklären kann wäre das echt super.
Meine Versuche z.B für die Schaltfläche belaufen sich auf xray o_CMD_OK ergab ein leeres xray, wenn ich das "Model" (xray o_CMD_OK_Model) eingab, erschlug mich xray mit den Einstellungen für Größe, Position, Name usw. Wie gehe ich da dann weiter systematisch vor????
Hänge ne abgespeckte Version mal hier dran, vielleicht habt ihr ja sonst noch Verbesserungsvorschläge.
Danke schon mal im Voraus
Gruss Dirk
Re: per basic-Code gebauter Dialog zum Leben erwecken
Moin,
habe dem OK-Button einen ActionListener zugefügt, klick mal drauf.
Gruß R
habe dem OK-Button einen ActionListener zugefügt, klick mal drauf.
Code: Alles auswählen
.
.
.
o_DLG.setModel(o_DLG_Model)
oActionListener = createUnoListener("ActionListener_", "com.sun.star.awt.XActionListener")
oControl = o_dlg.getControl("o_cmd_OK")
oControl.addActionListener(oActionListener)
oWindow = CreateUnoService("com.sun.star.awt.Toolkit") ' Mittels des Modells den Dialog anzeigen
o_DLG.createPeer(oWindow, null)
o_DLG.getPeer().setProperty ( "NativeWidgetLook" , b_NativeLook ) ' das ist die Zeile von oben - für farbige Buttons
oTopWindowsListener = CreateUnoListener( "Top_Win_", "com.sun.star.awt.XTopWindowListener" )
o_DLG.addTopWindowListener(oTopWindowsListener)
o_DLG.setVisible(True)
End Sub
Sub ActionListener_actionPerformed(oEv)
Hello_World
end sub
Sub ActionListener_disposing(oEv)
End Sub
Sub Hello_World
msgbox "Hallihallo, da bin ich"
end sub
- Dateianhänge
-
- Calc Dialog nur per Code bauen.ods
- (11.22 KiB) 203-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: per basic-Code gebauter Dialog zum Leben erwecken
Hallo R F3KTotal,
sorry, hatte im ersten Beitrag das K in Deinem Pseudonym unterschlagen - dass war keine Absicht.
Erst einmal vielen Dank, dass Du mir weiter hilfst, habe aber bestimmt noch die ein oder andere Frage dazu.
Ich möchte aber zuerst noch ein wenig probieren, im Moment ist mir z.B. noch unklar wie / wann / worauf dieser ActionListener reagiert.
Kann ich diesen ActionListener auch mit xray oder mri "untersuchen"???? vermute xray oControl??? (noch nicht getestet)
Möchte ja auch z.B. beim Verlassen eines Kombinationsfeldes etwas ausführen lassen, oder bei einem Markierfeld.
Danke schon mal bis hierher, werde mich bestimmt nochmal diesbezüglich melden
Gruss und danke
Dirk
sorry, hatte im ersten Beitrag das K in Deinem Pseudonym unterschlagen - dass war keine Absicht.
Erst einmal vielen Dank, dass Du mir weiter hilfst, habe aber bestimmt noch die ein oder andere Frage dazu.
Ich möchte aber zuerst noch ein wenig probieren, im Moment ist mir z.B. noch unklar wie / wann / worauf dieser ActionListener reagiert.
Kann ich diesen ActionListener auch mit xray oder mri "untersuchen"???? vermute xray oControl??? (noch nicht getestet)
Möchte ja auch z.B. beim Verlassen eines Kombinationsfeldes etwas ausführen lassen, oder bei einem Markierfeld.
Danke schon mal bis hierher, werde mich bestimmt nochmal diesbezüglich melden
Gruss und danke
Dirk
Re: per basic-Code gebauter Dialog zum Leben erwecken
Einige Erklarungen von Stefan findest Du hier:
viewtopic.php?f=18&t=23862#p102135
Der Listener wird einem Element zugewiesen, hier einem Button. Im Prinzip weist Du den Event-Handler von LO an, eine bestimmte Routine von Dir aufzurufen, wenn der Button "gedrückt" wird. (System stellt fest, dass unter dem Klick etwas liegt, dies stellt sich als Object Button heraus, beim Button ist ein Listener hinterlegt, also soll eine Routine Aufgerufen werden, deren Name sich aus dem übergebenen Prefix mit Unterstrich und dem Ereignis, hier ActionPerformed zusammensetzt. Diese Routine(n) findest Du unterhalb im BASIC-Code.)
Wichtig ist vor allem zu merken, dass "ActionListener_" kein magisches Steuerwort ist, sondern von Dir gesetzt wird. F3K hätte auch "Hallihallo_" verwenden konnen, dann aber auch die BASIC-Sub Hallihallo_actionPerformed implementieren müssen.
Jörn
viewtopic.php?f=18&t=23862#p102135
Der Listener wird einem Element zugewiesen, hier einem Button. Im Prinzip weist Du den Event-Handler von LO an, eine bestimmte Routine von Dir aufzurufen, wenn der Button "gedrückt" wird. (System stellt fest, dass unter dem Klick etwas liegt, dies stellt sich als Object Button heraus, beim Button ist ein Listener hinterlegt, also soll eine Routine Aufgerufen werden, deren Name sich aus dem übergebenen Prefix mit Unterstrich und dem Ereignis, hier ActionPerformed zusammensetzt. Diese Routine(n) findest Du unterhalb im BASIC-Code.)
Wichtig ist vor allem zu merken, dass "ActionListener_" kein magisches Steuerwort ist, sondern von Dir gesetzt wird. F3K hätte auch "Hallihallo_" verwenden konnen, dann aber auch die BASIC-Sub Hallihallo_actionPerformed implementieren müssen.
Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
-
- *******
- Beiträge: 1232
- Registriert: So, 14.05.2017 16:11
Re: per basic-Code gebauter Dialog zum Leben erwecken
@DITA,
Gruß
Peter
Es ist ja nicht so, dass Du Deine Beiträge nicht ändern/bearbeiten könntest, wenn Du angemeldet bist.DITA hat geschrieben: Do, 16.06.2022 20:00 sorry, hatte im ersten Beitrag das K in Deinem Pseudonym unterschlagen - dass war keine Absicht.
Gruß
Peter
Win 11 (x64) ▪ LibreOffice 25.2.3.2 (x64) ▪ AOO Portable 4.1.15
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Wurde die Frage zutreffend beantwortet bitte den Betreff der Eingangsfrage mit [GELÖST] ergänzen. Beschreibung
Re: per basic-Code gebauter Dialog zum Leben erwecken
Hallo Dirk,

Anfangs habe ich mich auch gefragt was soll ich damit?
Die Frage wurde mir beantwortet, nachdem ich gelernt hatte die Inspection-Tools in Verbindung mit der jeweiligen API (LibreOffice/ OpenOffice) zu nutzen.
Am schwierigsten war dabei nicht das Verständnis für die Tools, sondern wie ich die API zu lesen und umzusetzen hatte.
Was machen mri und xray?
Sie zeigen Dir eine Benutzeroberfläche deren Inhalte aus der API gespeist werden.
Mehr noch, Sie zeigen an, wie z.B. das Struct SIZE oder POS zu „bilden“ und anzuwenden ist.
Auch die Listenener können inspiziert werden.
Beispiel an Ric’s Action-Listner:
Ein Listener muss zuerst registriert werden, es muss quasi ein Bereich im Arbeitsspeicher für den Listener reserviert werden und der Listener braucht einen Namen und einen Zeiger (Objektvariable).
Im Grunde hat Jörn dies bereist beantwortet.
Name: → ActionListener_
Zeiger auf das Listener_Objekt → oActionListener
Zeiger auf das Control_Objekt → oControl
Nachdem der Listner registriert wurde, kann der Zeiger mittels mri oder xray inspiziert werden:
Mit Klick auf Methoden im xray-Fenster, werden Dir die Methoden angeziegt, welche Du in Deinem Code als Sub-Routine verwenden kannst.
Beispiel anhand des Action-Listner.
Namen der Methoden:
Hier gibt es nur zwei Methoden die für Deinen Code erforderlich sind:
Die einzelnen Felder des Diagramms dieser Seite sind weiterführende Links.
Ein Mouse-Listener.
Registrieren des Listeneners:
Methoden des Listners auslesen:
Namen der Methoden:
Hier findest Du ein Beispielokument zum Mouse-Listener im engliscehn Forum:
Mouse-Listner
Mouse-Events:
https://api.libreoffice.org/docs/idl/re ... Event.html
Welcher Button wurde gedrückt?
https://api.libreoffice.org/docs/idl/re ... utton.html
Damit nun eine Reaktion auf ein Mausereignis erfolgt, bedarf es wiederum einer Sub-Routine.
MouseListener_ = Der Name , welcher dem Listener zugeordnet wurde:
oMouseListener=createUnoListener("MouseListener_","com.sun.star.awt.XmouseListener")
Dann folgt die Methode:
mouseEntered
Zusammengestzt sieht dies so aus:
Jetzt fehlt noch die eigentliche Aktion, welche beim auslösen des Events erfolgen soll:
mri und xray sind genial..., oder? 
Nachtrag:
Man kann auch das Event selbst mittels xray/mri auslesen
In Ric's Beispiel → xray oEv einfügen:
Beim Mouse-Listener würde man als xray-Anwort die Anzahl der Mausklicks auslesen können,
welche Taste (Key-Konstante) gedrückt wurde,usw.
Wetten doch!Dirk hat geschrieben:mri und xray (die nicht wirklich meine Freunde sind)

Anfangs habe ich mich auch gefragt was soll ich damit?
Die Frage wurde mir beantwortet, nachdem ich gelernt hatte die Inspection-Tools in Verbindung mit der jeweiligen API (LibreOffice/ OpenOffice) zu nutzen.
Am schwierigsten war dabei nicht das Verständnis für die Tools, sondern wie ich die API zu lesen und umzusetzen hatte.
Was machen mri und xray?
Sie zeigen Dir eine Benutzeroberfläche deren Inhalte aus der API gespeist werden.
Mehr noch, Sie zeigen an, wie z.B. das Struct SIZE oder POS zu „bilden“ und anzuwenden ist.
Auch die Listenener können inspiziert werden.
Beispiel an Ric’s Action-Listner:
Ein Listener muss zuerst registriert werden, es muss quasi ein Bereich im Arbeitsspeicher für den Listener reserviert werden und der Listener braucht einen Namen und einen Zeiger (Objektvariable).
Im Grunde hat Jörn dies bereist beantwortet.
Name: → ActionListener_
Zeiger auf das Listener_Objekt → oActionListener
Zeiger auf das Control_Objekt → oControl
Code: Alles auswählen
oActionListener = createUnoListener("ActionListener_", "com.sun.star.awt.XactionListener")
Code: Alles auswählen
xray oActionListener
Beispiel anhand des Action-Listner.
Namen der Methoden:
Code: Alles auswählen
acquire
actionPerformed
disposing
queryInterface
- actionPerformed
Ist die Methode, welche das Ereignis (Event) abfängt und bei Klick auf den Button eíne Aktion ausführt. - disposing
Ist UNBEDINGT erforderlich, damit der Listener bei Beendigung des Programms aus dem Arbeitsspeicher entfernt wird, bzw. der reservierte Bereich des Speichers wieder freigegeben wird.
Die einzelnen Felder des Diagramms dieser Seite sind weiterführende Links.
Ein Mouse-Listener.
Registrieren des Listeneners:
Code: Alles auswählen
oMouseListener=createUnoListener("MouseListener_","com.sun.star.awt.XmouseListener")
Methoden des Listners auslesen:
Code: Alles auswählen
xray oMouseListener
Code: Alles auswählen
acquire
disposing
mouseEntered
mouseExited
mousePressed
mouseReleased
queryInterface
release
Mouse-Listner
Mouse-Events:
https://api.libreoffice.org/docs/idl/re ... Event.html
Welcher Button wurde gedrückt?
https://api.libreoffice.org/docs/idl/re ... utton.html
Damit nun eine Reaktion auf ein Mausereignis erfolgt, bedarf es wiederum einer Sub-Routine.
Code: Alles auswählen
Sub MouseListener_mouseEntered
print "Mouse has entered!"
End Sub
oMouseListener=createUnoListener("MouseListener_","com.sun.star.awt.XmouseListener")
Dann folgt die Methode:
mouseEntered
Zusammengestzt sieht dies so aus:
Code: Alles auswählen
Sub MouseListener_mouseEntered
Code: Alles auswählen
print "Mouse has entered!"

Nachtrag:
Man kann auch das Event selbst mittels xray/mri auslesen
In Ric's Beispiel → xray oEv einfügen:
Code: Alles auswählen
Sub ActionListener_actionPerformed(oEv)
xray oEv
Hello_World
end sub
welche Taste (Key-Konstante) gedrückt wurde,usw.
Code: Alles auswählen
Sub MouseListener_mousePressed(oEv)
xray oEv
print "Mouse has mousePressed!"
End Sub
Gruß
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Craig
_____________________________________________________
WIN 10 Pro 64-Bit • LO 7.1.5.2 (x64) • AOO 4.1.8
Re: per basic-Code gebauter Dialog zum Leben erwecken
Hallo Peter,
vielen Dank für Deinen Hinweis, jedoch finde ich es persönlich unhöflich, wenn man jemanden anspricht (dann noch falsch), dieser kompetent antwortet, und man dann erst den Fehler bemerkt - da kann ich mich für meinen Fehler der Nettikette halber kurz mit einem Satz entschuldigen.
Gruss Dirk
vielen Dank für Deinen Hinweis, jedoch finde ich es persönlich unhöflich, wenn man jemanden anspricht (dann noch falsch), dieser kompetent antwortet, und man dann erst den Fehler bemerkt - da kann ich mich für meinen Fehler der Nettikette halber kurz mit einem Satz entschuldigen.
Gruss Dirk
Re: per basic-Code gebauter Dialog zum Leben erwecken
Hallo Jörn (Hiker),
Vielen Dank auch Dir - wenn man (ich) erst einmal den Weg aufgezeigt bekommt, und man sieht das man einen ActionListener braucht - und diesen dann noch "richtig" einbauen muss, ist man schon einen großen Schritt weiter.
Da ich absichtlich ja nur einen abgespeckten Dialog eingestellt hatte, um über den "vorgegebenen" Weg meine anderen Steuerelemente "selbst" zum Leben zu erwecken, ist Dank Deines Beitrages auch weiter fortgeschritten. Im Moment ist mir zwar noch einiges unklar, z.B. wie ich ein Beschriftungsfeld "entere" oder anklicke und somit ein anderes Makro starte, bzw. ein Textfeldinhalt auslese.
Für Deine Tipps (Link und Erklärung mit merke) möchte ich mich nochmals bedanken, werde versuchen das im weiteren Verlauf zu berücksichtigen.
Gruss Dirk
Vielen Dank auch Dir - wenn man (ich) erst einmal den Weg aufgezeigt bekommt, und man sieht das man einen ActionListener braucht - und diesen dann noch "richtig" einbauen muss, ist man schon einen großen Schritt weiter.
Da ich absichtlich ja nur einen abgespeckten Dialog eingestellt hatte, um über den "vorgegebenen" Weg meine anderen Steuerelemente "selbst" zum Leben zu erwecken, ist Dank Deines Beitrages auch weiter fortgeschritten. Im Moment ist mir zwar noch einiges unklar, z.B. wie ich ein Beschriftungsfeld "entere" oder anklicke und somit ein anderes Makro starte, bzw. ein Textfeldinhalt auslese.
Für Deine Tipps (Link und Erklärung mit merke) möchte ich mich nochmals bedanken, werde versuchen das im weiteren Verlauf zu berücksichtigen.
Gruss Dirk
Re: per basic-Code gebauter Dialog zum Leben erwecken
Hallo craig,
.... da hast Du die Wette wohl gewonnen
Wow, in Deiner Antwort steckt verdammt viel ...... Erklärung drin, da muss ich mich erst mal Stück für Stück durch arbeiten.
Vielen Dank erstmal für die Erläuterungen für xray, da ich das so Schritt für Schritt nachvollziehen kann und dann später wohl auch für andere Elemente ähnlich umsetzen kann.
Auch Deine Erklärungen und Links sind einfach super, denke da nur an den MouseListener, den ich ja auf jeden Fall brauche und jetzt sogar mit Möglichkeit das Drumherum mit xray zu untersuchen.
Vielen Dank für die xray- Einführung und die ausführliche Erklärung der Listener. (Brauche wahrscheinlich noch ne ganze Weile bis man (ich) es wirklich verstanden (kapiert)hat.)
Gruss und Danke
Dirk
.... da hast Du die Wette wohl gewonnen
Wow, in Deiner Antwort steckt verdammt viel ...... Erklärung drin, da muss ich mich erst mal Stück für Stück durch arbeiten.
Vielen Dank erstmal für die Erläuterungen für xray, da ich das so Schritt für Schritt nachvollziehen kann und dann später wohl auch für andere Elemente ähnlich umsetzen kann.
Auch Deine Erklärungen und Links sind einfach super, denke da nur an den MouseListener, den ich ja auf jeden Fall brauche und jetzt sogar mit Möglichkeit das Drumherum mit xray zu untersuchen.
Vielen Dank für die xray- Einführung und die ausführliche Erklärung der Listener. (Brauche wahrscheinlich noch ne ganze Weile bis man (ich) es wirklich verstanden (kapiert)hat.)
Gruss und Danke
Dirk