🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

BASIC aufrufendes Button Object erhalten?

Alles zur Programmierung im LibreOffice.
Antworten
loco
Beiträge: 4
Registriert: Sa 1. Feb 2014, 09:31

BASIC aufrufendes Button Object erhalten?

Beitrag von loco » Sa 1. Feb 2014, 10:10

Hallo,

ich habe ein writer dokument. In diesem habe ich mehrere Tabellen und innerhalb jeder Tabelle habe ich einen Button. Alle Buttons tun das gleiche, für jeweils die Tabelle wo sie drin stecken.

D.h. die eigentliche Funktionalität steckt in der Prozedur

Code: Alles auswählen

machEs(tabellenname as String)
Ich muss nun für jeden Button ein Makro zuweisen um diese aufzurufen, z.B.

Code: Alles auswählen

machEs("Tabelle1")
Ist es möglich zur Laufzeit auszulesen welcher Button die Prozedur aufgerufen hat?

Code: Alles auswählen

sub machEsBesser()
  //tabellenname as String  brauch ich nicht mehr
  getCallingButton
  getTableWhereThisButtonIsIn
  ..
  alles was machEs sowieso schon tut
  ..
end sub
Viele Grüße

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: BASIC aufrufendes Button Object erhalten?

Beitrag von gogo » Sa 1. Feb 2014, 11:37

loco hat geschrieben:...

Code: Alles auswählen

sub machEsBesser()
  //tabellenname as String  brauch ich nicht mehr
  getCallingButton
  getTableWhereThisButtonIsIn
  ..
  alles was machEs sowieso schon tut
  ..
end sub
...

Code: Alles auswählen

sub machEsBesser(oEvent)
  //tabellenname as String  brauch ich nicht mehr
  oCallingButton=oEvent.Source.model
  oFormWhereThisButtonIsIn=oEvent.Source.model.parent
  ..
  alles was machEs sowieso schon tut
  ..
end sub
Kontrollelemente wie Buttons, Textfelder etc. befinden sich immer in einem Form-Objekt. "TableWhereThisButtonIsIn" wäre irreführend.
Das oEvent-Objekt wird immer mitübergeben, wenn man einem Kontrollelement ein Makro zuweist. Es ist nicht immer gleich strukturiert, da man ja die Ereignisse unterschiedlich sind (Mouse-Button-Release übergibt beispielsweise auch welche Maustaste es war, und ob andere Tasten gehalten wurde, bzw. die Koordinaten des Mauszeigers ...)

Wenn Du xRay hast, dann probier einfach "xray(oEvent)"
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: BASIC aufrufendes Button Object erhalten?

Beitrag von karolus » Sa 1. Feb 2014, 12:30

Hallo

Ergänzend zu gogo:
schreibe z.B. ins Eigenschaftsfeld Hilfetext den jeweiligen Tabellenamen und greife auf diesen zu per:

Code: Alles auswählen

...
tablename = event.Source.Model.Helptext
table = thisComponent.TextTables.getByName( tablename )
....

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

loco
Beiträge: 4
Registriert: Sa 1. Feb 2014, 09:31

Re: BASIC aufrufendes Button Object erhalten?

Beitrag von loco » Sa 1. Feb 2014, 17:46

Hallo gogo,

danke für die Antwort! so ganz verstanden hab ich das nicht, daher frag ich mal weiter.
gogo hat geschrieben:...

Code: Alles auswählen

sub machEsBesser(oEvent)
  //tabellenname as String  brauch ich nicht mehr
  oCallingButton=oEvent.Source.model
  oFormWhereThisButtonIsIn=oEvent.Source.model.parent
  ..
  alles was machEs sowieso schon tut
  ..
end sub
Klingt gut, aber was übergebe ich den in oEvent an die sub? wo nehme ich den oEvent her?
Dann muss ich ja trotzdem für jeden Button eine Aufrufprozedur schreiben ala

Code: Alles auswählen

sub callfürButton1
  dim oEventButton1
  oEventButton1=erzeuge_irgendwie _oEvent
  machEsBesser(oEventButton1)
end sub
gogo hat geschrieben:Wenn Du xRay hast, dann probier einfach "xray(oEvent)"
wie binde ich xRay ein, damit ich es benutzen kann im Code?
Ansonsten gleiches Problem, wie wird oEvent erzeugt, wo nehm ich das her?

loco
Beiträge: 4
Registriert: Sa 1. Feb 2014, 09:31

Re: BASIC aufrufendes Button Object erhalten?

Beitrag von loco » Sa 1. Feb 2014, 17:53

Hallo Karolus,

das sieht gut aus, allerdings weiß ich nicht wo ich das event hernehme, das muss ich doch über irgendeinen UNO-service oder sonstwas erstmal abrufen. Wo kommt das Object event her?
karolus hat geschrieben:Hallo

Ergänzend zu gogo:
schreibe z.B. ins Eigenschaftsfeld Hilfetext den jeweiligen Tabellenamen und greife auf diesen zu per:

Code: Alles auswählen

...
tablename = event.Source.Model.Helptext
table = thisComponent.TextTables.getByName( tablename )
....

Karolus
Ihr denkt wahrscheinlich "Ach der weiß garnich wie er das event übergibt an mach es".. Ja genau das versteh ich nicht wie ich das machen kann.
Ich hab die Frage wahrscheinlich schlecht formuliert.

Danke für die Antworten auf jeden Fall.

Benutzeravatar
karolus
* LO-Experte *
Beiträge: 2540
Registriert: Fr 10. Dez 2010, 10:01

Re: BASIC aufrufendes Button Object erhalten?

Beitrag von karolus » Sa 1. Feb 2014, 18:30

Hallo
oEvent oder event oder wie auch immer du das Ding nennst -- ist das Ereignis das die sub aufruft und das dieser Sub als Argument mitgegeben wird - du musst es halt nur in der Signatur der Sub als Argument eintragen.
gogo hats dir doch schon gezeigt:
sub irgendeinname( oEvent )
tu was mit oEvent.Source.Model

Karolus
LO7.4.7.5 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.0.3 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)

loco
Beiträge: 4
Registriert: Sa 1. Feb 2014, 09:31

Re: BASIC aufrufendes Button Object erhalten?

Beitrag von loco » Sa 1. Feb 2014, 20:15

karolus hat geschrieben:Hallo
oEvent oder event oder wie auch immer du das Ding nennst -- ist das Ereignis das die sub aufruft und das dieser Sub als Argument mitgegeben wird - du musst es halt nur in der Signatur der Sub als Argument eintragen.
gogo hats dir doch schon gezeigt:
sub irgendeinname( oEvent )
tu was mit oEvent.Source.Model

Karolus

Oh vielen dank, das ist also einfach standard das es mitgegeben wird, ich muss es nur benennen, ziemlich cool!

Danke!!

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: BASIC aufrufendes Button Object erhalten?

Beitrag von gogo » So 2. Feb 2014, 03:07

Oh vielen dank, das ist also einfach standard das es mitgegeben wird, ich muss es nur benennen, ziemlich cool!
- ja, dachte ich auch, als ich das rausgefunden hatte, und es ist wirklich besser als das me! Objekt aus MSAccess (das ich eigentlich verzweifelt gesucht hatte)

XRay: Downloaden, dann: Eigentlich isses ein Writer-Dokument, in dem Du irgendwo den Button "Install XRAY" findest - einfach Klick drauf, und es ist installiert.

Die XRAY-Bibliothek wird aber nicht geladen, wenn Du LO Startest, das musst Du irgendwo im Code einbauen. Ich hab' unter MeineMakros/Standard/Module1 (diese Bibliothek wird immer beim Start geladen) folgendes Makro drin:

Code: Alles auswählen

'**-------------------- versucht XRAY zu laden ---------------------
Sub xr(optional Dingsda)
on error goto XRayNichtDa
	if ismissing(Dingsda) then
		msgbox "Das Dingsda fehlt! Es wird ThisComponent geoeffnet!"
		dingsda = ThisComponent
	end if

	if not globalscope.BasicLibraries.islibraryloaded("XrayTool") then
	   globalscope.BasicLibraries.loadlibrary("XrayTool")
	end if 
	
	xray(Dingsda)

exit sub
XRayNichtDa:
	msgbox "XRAY nicht gefunden!",,"Sub xr(Dingsda)"
End Sub
Dann kannst Du Dir mit

Code: Alles auswählen

xr oEvent
das Ereignis genau ansehen. XRay analysiert aber quasi alles was Du in einem Basic Code so findest - xray(VariableXYZ) Zeigt Datentyp und Inhalt der VariableXYZ, auch Arrays kann man so browsen - und "xray 1" erzählt Dir, dass "1" ein Integer-Wert ist etc.etc.etc.

Code: Alles auswählen

do while true
 msgbox "XRAY-Thumbs UP!"
loop
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten