Seite 1 von 1

[Gelöst] Parameter via Button an Sub übergeben

Verfasst: Mo 15. Sep 2014, 17:43
von Burning
Liebes Forum!

Wenn ich Dokumenten (Calc, Base) Formularelemte hinzufüge, dann kann ich über deren Eventhandler Subs starten. Soweit so einfach. Nur manchmal möchte ich nicht die 100ste Variante einer Prozedur anlegen, sondern der Prozedur beim Start einfach einen Parameter übergeben und das kriege ich nicht hin.

Beispiel:
"Button 1" ruft die Prozedur "KomplexeOperation" auf. "KomplexeOperation" schreibt ihr Ergebnis in Zelle A1. "Button 2" ruft die Prozedur "KomplexeOperationZwei" auf. Die macht genau das gleiche wie "KomplexeOperation" schreibt aber ihr Ergebnis in Zelle C3. Warum (zur Hölle :evil: ) kann ich, wenn ich die Eventhandler zuordne nicht einen Parameter mitgeben? Also im Prinzip "Standard.Module1.KomplexeOperation("0,0")" für "Button 1" und "Standard.Module1.KomplexeOperation("2,2")" für "Button 2". Stattdessen geht nur "Standard.Module1.KomplexeOperation (document, Basic)" und "Standard.Module1.KomplexeOperationZwei (document, Basic)". Bin ich zu blöd?

Ich hoffe man konnte verstehen, was ich machen will, vielen Dank für Eure Mühe,

Herzlicher Gruß

Oliver

Re: Parameter via Button an Sub übergeben

Verfasst: Mo 15. Sep 2014, 18:05
von karolus
Hallo

Jede Sub|Prozedur die über einen Button aufgerufen wird, bekommt das "aufrufende Event" als Argument mitgeliefert.

Code: Alles auswählen

sub blah( event )
buttonobject = event.Source.Model
'mach was in Abhängigkeit vom buttonobject'
end sub
siehe dazu http://www.libreoffice-forum.de/viewtop ... 876#p30235

Karolus

Re: Parameter via Button an Sub übergeben

Verfasst: Mo 15. Sep 2014, 18:16
von Burning
Hallo karolus!

Vielen Dank für die schnelle Antwort!
karolus hat geschrieben:Jede Sub|Prozedur die über einen Button aufgerufen wird, bekommt das "aufrufende Event" als Argument mitgeliefert.
Das war mir bekannt und nutze ich in Base oft, um Zugriff auf das aufrufende Formular zu bekommen. Aber wie könnte ich das ausnutzen, um einen Parameter (im konkreten Fall die Koordinaten einer Tabellenzelle) zu übergeben?
karolus hat geschrieben: siehe dazu http://www.libreoffice-forum.de/viewtop ... 876#p30235
Den Zusammenhang zwischen diesem Thema (Sortieraufgabe, bei der die Zugriffsparameter als globale Variablen (quasi Umgebungsvariablen) definiert sind) und meinem Problem, bei dem sich quasi je nach Button die Umgebungsvariablen ändern, den habe ich noch nicht verstanden.

Herzlicher Gruß

Oliver

Re: Parameter via Button an Sub übergeben

Verfasst: Mo 15. Sep 2014, 18:38
von F3K Total
Hi,
Ich empfehle Dir die Verwendung eines Introspection-Tools wie MRI oder Xray
Damit kannst Du alle OOo-Dokumente hinsichtlich ihres Aufbaues durchleuchten. z.B. mit

Code: Alles auswählen

    sub blah( event )
    buttonobject = event.Source.Model
    'mach was in Abhängigkeit vom buttonobject'
    xray buttonobject
    end sub
erscheinen dir die Eigenschaften des Makro-auslösenden-Buttons.
Da findest du z.B. unter .label die Beschriftung oder unter .tag die Zusatzinformation des Button. Beide kannst du auf dem Reiter Allgemein der Kontrollfeldeigenschaften eingeben. z.B Zusatzinformation C3
Dann:

Code: Alles auswählen

    sub blah( event )
    osheet = Thiscomponent.Sheets.getbyname("Tabelle1")
    buttonobject = event.Source.Model
    sCellname = buttonobject.tag'Zusatzinformation auslesen
    oCell = osheet.getcellrangebyname(sCellname)
    '...komplexe Operation bringt die Zahl "Schreibrein"
    oCell.value = Schreibrein
    end sub
So wird das Ergebnis in die Zelle geschrieben (hier z.B. C3), die du dem Button per Zusatzinformation mitgegeben hast.
Es ist zu beachten, dass die Zusatzinformation ein String ist, willst Du Zahlen auslesen, müssen sie im Makro auf das richtige Format gebracht werden.
HTH R

Re: Parameter via Button an Sub übergeben

Verfasst: Mo 15. Sep 2014, 18:48
von karolus
Hallo
Den Zusammenhang zwischen diesem Thema (Sortieraufgabe, bei der die Zugriffsparameter als globale Variablen (quasi Umgebungsvariablen) definiert sind) und meinem Problem, bei dem sich quasi je nach Button die Umgebungsvariablen ändern, den habe ich noch nicht verstanden.
Die Variablen sind definiert in der Funktion, welche Variable benutzt wird als Sortierschlüssel wird aber gesteuert über den Namen des Optionsbuttons.

Du könntest beispielsweise verschiedene Parameter als Text im Feld →Allgemein→Zusatzinformation des Buttons eintragen, und in einer Prozedur auswerten.

Re: Parameter via Button an Sub übergeben

Verfasst: Mo 15. Sep 2014, 18:50
von Burning
Wow, vielen Dank für Mühe! :D

Ich hab's verstanden.

Wie kann man das Thema als gelöst markieren?

Re: Parameter via Button an Sub übergeben

Verfasst: Mo 15. Sep 2014, 18:54
von F3K Total
Du editierst deinen ersten Beitrag, und schreibst z.B. [gelöst] vor die Überschrift.