Name des auslösenden Elementes ermitteln [gelöst]

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Name des auslösenden Elementes ermitteln [gelöst]

Beitrag von clag »

Moin Kenner und Könner,

in einer Calc-Tabelle sind mehrere Schaltflächen platziert, die alle das selbe Makro ausführen sollen,
ist es möglich innerhalb dieses aufgerufenen Basic Code zu ermitteln welche der Schaltflächen (also Name oder Index)
das Makro ausgelöst hat, so dass zB eine MsgBox ausgibt "Button X wurde gedrückt" oder so?

schon mal Danke für's lesen
Zuletzt geändert von clag am Fr, 07.01.2011 11:08, insgesamt 2-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Name des auslösenden Elementes ermitteln

Beitrag von clag »

Hallo Stephan,

Danke für den Hinweis der Zusammenhang ist schon richtig :lol:

Bei der von dir genannten Möglichkeit müssten ja schon alle "in Case Varianten" im Markro Code bekannt sein bzw nachgetragen werden bei einer Erweiterung.

Ich hatte allerdings gehofft man kann irgendwie den Namen der auslösenden Schaltfläche direkt ermitteln, denn dann könnte man das Makro recht einfach halten.
Man könnte den Schaltflächennamen nämlich gleich als "Parameterträger missbrauchen", anstelle der üblichen Namen wie "Schaltfläche 1" zB "C1" oder anstelle des Namen "Schaltfläche 5" zB "F3".
Macht man nun den ermittelten Schaltflächennamen zu einer Variablen für die Ziel-Adresse, wäre ein recht einfaches Makro möglich was beliebig viele Buttons und Ziele bedienen kann ohne geändert werden zu müssen.

Das war meine Idee hinter der Frage, siehst du da einen Weg das so zu realisieren?
Zuletzt geändert von clag am Fr, 07.01.2011 10:08, insgesamt 2-mal geändert.
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
GrobMakrobiker
**
Beiträge: 39
Registriert: Mo, 09.02.2009 20:18

Re: Name des auslösenden Elementes ermitteln

Beitrag von GrobMakrobiker »

Hallo claq,

ich habs nicht ganz verstanden, was du vorhast, aber probiers doch mal so (von komma4):
"Weise das folgende Makro dem Listbox-Ereignis: Modifiziert zu, dann sagt Dir das Nachrichtenfenster, welche Listbox geklickt wurde

Code: Alles auswählen

 Sub de40587( oEvent )

    print oEvent.Source.Model.Name

    End Sub
"

siehe viewtopic.php?f=18&t=40587&start=0
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Name des auslösenden Elementes ermitteln

Beitrag von clag »

Hallo GrobMakrobiker,

ja super..... genau das war das gesuchte/ erhoffte Stück Code :D
die konkrete Anwendung findest du unter diesem verlinktem Thema

hier der Code

Code: Alles auswählen

Sub universal_plus ( oEvent )
	myDoc = thisComponent
	dim targetcell as string
	targetcell = oEvent.Source.Model.Name
	mySheet = myDoc.Sheets().getByName("Tabelle1")
	mycell=mysheet.getCellRangeByName(targetcell) 
	mycell.value = mycell.value + 1
End Sub
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Name des auslösenden Elementes ermitteln [gelöst]

Beitrag von Stephan »

ja super..... genau das war das gesuchte/ erhoffte Stück Code
Komisch, denn dieser Code stand ja bereits in meinem Post auf den ich Dich verwiesen hatte:
viewtopic.php?f=2&t=45882&p=166236#p166236
auf den Du jedoch mit der Aussage reagiertest:
Ich hatte allerdings gehofft man kann irgendwie den Namen der auslösenden Schaltfläche direkt ermitteln



Gruß
Stephan
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Name des auslösenden Elementes ermitteln [gelöst]

Beitrag von clag »

Hallo Stephan,

aus deiner Antwort konnte ich leider nicht ersehen wie man den Namen der auslösenden Schaltfläche als String ermitteln kann.
Und du bist auch nicht weiter darauf eingegangen. Da ich aber annehme, dass du dich mit OOo Basic Makroprogrammierung auskennst,
bedeutet das für mich automatisch, du kannst mir keine direkte Lösung zu meiner Frage aufzeigen, oder es geht nicht.
Sonst hättest du doch bestimmt eine genauso treffende Antwort wie GrobMakrobiker gegeben.

Logischerweise war ich dann umso mehr über die Antwort vom GrobMakrobiker erfreut,
die direkt meine Frage gezielt mit 5 Worten beantwortet hat.

also nix für ungut
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Name des auslösenden Elementes ermitteln [gelöst]

Beitrag von Stephan »

aus deiner Antwort konnte ich leider nicht ersehen wie man den Namen der auslösenden Schaltfläche als String ermitteln kann.
Das ist schlecht und das hätte ich, in Kenntnis dessen was Du augenscheinlich weißt, niemals für möglich gehalten.
Sonst hättest du doch bestimmt eine genauso treffende Antwort wie GrobMakrobiker gegeben.
Nein, ich hielt das garnicht für nötig, da ich nicht annehmen konnte das Du, da Du inzwischen etliche komplexe Probleme selbst gelöst hast nicht solche Sprachgundlagen kennst.

Grundlage ist hier die Sprache StarBasic selbst und diese findest Du komplett in der OOo-Hilfe unter Makros und Programmierung-Befehle-Alphabetische Liste der Funktionen, Ausdrücke und Operatoren.

ES ist nicht nötig das alles im Detail zu wissen, aber Du solltest im Überblick wissen was es gibt, sonst kann man nicht sinnvoll programmieren, denn es geht hier um notwendige Werkzeuge und die muß man irgendwie kennen, denn das ist nicht intuitiv zu schlussfolgern.
Es ging doch hier insgesamt nur darum Select-Case zu kennen und das ist ein Grundkonstrukt wie eben Print oder For-Next oder MsgBox oder ... man muß solche Dinge wissen.

Und um es nochmal ganz klar zu sagen:
es geht hier überhaupt nicht um Expertenwissen sondern um notwendiges Wissen um ZUsammenhänge, worauf Dich viele schon hingewiesen haben mit Ratschlägen wie Du solche Allgemein-Dinge erkennst.
Ich persönlich verstehe auch nicht wie man sonst programmieren kann, denn wenn man nicht einen hinreichenden Überblick im Groben hat muß einem doch alles immer wieder völlig verschieden vorkommen.

Die zwei Ausdrücke um die es hier geht (Print und Select Case) sind etwa so verschiedenen wie im normalen Leben ein Auto und ein Motorrad, nur so wie ein Auto und ein Motorrad als eine Gemeinsamkeit Räder haben so ist die Gemeinsamkeit von Print und SElect Case das sie im Konstrukt einen Variablenwert enthalten und Beides muß man irgendwie wissen.
(DEtails muß man hingegen weder beim Auto, noch Motorrad, noch bei SElect Case oder Print wissen, denn die kann man nachschlagen oder lernt sie automatisch wenn man die dinge benutzt)



Gruß
Stephan


Zur ERläuterung:

Worum ging es im Konkreten?
Darum zu wissen das Codeteile in denen eine Entscheidung erfolgt (also z.B. For-Next, While-Wend oder Select-Case) zwangsläufig IMMER einen (Variablen)Wert enthalten der geprüft wird (hier war das eben der gesuchte Namne des Steuerelements) und dann kann man anschließend nötigenfalls nachsehen woi dieser Variablenwert steckt, hier im Konkreten eben indem man sich die Hilfeseite zu Select-Case durchliest.
Praktisch ist es dann auch so wenn man das ein paar Mal gemacht hat prägt es sich automatisch ein und man muß dann die Details auch nicht mehr nachlesen weil man sie kennt.

Die Äquivalenz zu dem Ausdruck von GrobMakrobiker ist also das dort, allgemein gesprochen, ein (Variablen)Wert ausgegeben wird und in meinem Beispiel ein (Variablen)Wert abgefragt wird - und man muß eben die Sprache insoweit kennnen das man diesen Zusammenhang erkennt, also erkennt das in beiden Ausdrücken der gewünschte (Variablen)Wert vorkommt.
Alles Andere kann man dann auch nachschlagen, hier im Konkreten kann man also nachschlagen das bei Select Case der gewünschte Wert immer in der ersten Zeile des Select-Case-Ausdrucks steht.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Name des auslösenden Elementes ermitteln [gelöst]

Beitrag von clag »

Hallo Stephan,

ob es wohle einmal zwei aufeinander bezogene Beträge von uns gibt in denen es nicht zu Missverständnissen bzw Fehlinterpretationen des Geschriebenen kommt?
Da seh ich schwarz :lol:
Dir sollte aber schon klar sein das es Menschen gibt die ganz unterschiedliche Lernmethoden haben, von daher solltest du nicht unbedingt das was bei dir zum Lernerfolg führt als allgemeingültige Methode betrachten. Du kannst davon ausgehen, wir beide ticken ganz sicher sehr unterschiedlich. Und meine Fragen sind von mir schon so formuliert wie es mir maximal hilft, wenn sie denn so konkret wie gestellt auch beantwortet werden.
Naja vielleicht klappt es ja noch irgendwann einmal.......
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Antworten