Seite 1 von 1
BASIC aufrufendes Button Object erhalten?
Verfasst: Sa 1. Feb 2014, 10:10
von loco
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
Ich muss nun für jeden Button ein Makro zuweisen um diese aufzurufen, z.B.
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
Re: BASIC aufrufendes Button Object erhalten?
Verfasst: Sa 1. Feb 2014, 11:37
von gogo
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)"
Re: BASIC aufrufendes Button Object erhalten?
Verfasst: Sa 1. Feb 2014, 12:30
von karolus
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
Re: BASIC aufrufendes Button Object erhalten?
Verfasst: Sa 1. Feb 2014, 17:46
von loco
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?
Re: BASIC aufrufendes Button Object erhalten?
Verfasst: Sa 1. Feb 2014, 17:53
von loco
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.
Re: BASIC aufrufendes Button Object erhalten?
Verfasst: Sa 1. Feb 2014, 18:30
von karolus
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
Re: BASIC aufrufendes Button Object erhalten?
Verfasst: Sa 1. Feb 2014, 20:15
von loco
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!!
Re: BASIC aufrufendes Button Object erhalten?
Verfasst: So 2. Feb 2014, 03:07
von gogo
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
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.