Seite 1 von 1

[gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes auslesen

Verfasst: Do 18. Feb 2021, 02:02
von nitja
… funktioniert in einer WRITER-Tabelle recht einfach, aber
- während die CALC-Tabelle in Sekundenbruchteilen auf dem Schirm ist,
- braucht das Textdokument Minuten zum Aufbau, bis überhaupt der Maus-Cursor erscheint.

Mein sheet(0).drawPage hat derzeit testweise einen count von 18. (18 Bilder in 18 Zellen, die ich über den Index der Drawpage richtig identifizieren kann. Soll letztlich auch ~100 werden können.)
Wie aber kriege ich raus, welches gerade angeklickt wurde? "currentSelection" bringt nix Verwertbares.

Ginge auch umgekehrt: Wenn ich die Zelle (statt des Bildes in der Zelle) anklicke, wie kriege ich dann raus, welches Drawpage-Objekt in der Zelle ist (seinen Anker in der Zelle hat)?

Re: CALC - bei Klick auf ein (verlinktes) Bild in einer Zelle die Adresse der Zelle und den URL des Bildes auslesen …

Verfasst: Do 18. Feb 2021, 23:29
von nitja
Mit der Selektion des/eines Bildes komme ich nicht recht weiter.
Und das ist wohl wenn, dann nur wenigen hier gelungen, die hier zur Zeit nicht aktiv sind.

Ich werde statt des Bildes einen zugeordneten Text zum Auslöser für das Makro machen.
Da funktioniert currentSelection, so dass ich auch (über den Zellennamen) zum URL des zu verarbeitenden Bildes komme:
thisComponent.sheets(i).drawPage(j).graphicURL.originURL
von dem Bild, bei dem
thisComponent.sheets(i).drawPage(j).anchor.absoluteName
dem auslösenden Zellnamen entspricht.

i ist hier immer 0 und ob ich mir die Schleife über j durch die Anordnung der Bilder (bzw. deren drawPage-Objekten) sparen sollte oder muss, werde ich nach Laufzeittests entscheiden.

Also: "im Prinzip" per "work around" gelöst

Re: ["im Prinzip" per "work around" gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes ausle

Verfasst: Fr 19. Feb 2021, 17:11
von craig
Hallo nitja,

meinst Du so etwas:

Code: Alles auswählen

REM  *****  BASIC  *****

Sub Main
Dim oDoc as Object
Dim oSheet as Object

Dim oCC as Object

Dim oShape as Object

Dim oCell as Object
Dim oCellAdress as Object
Dim sCellAbsoulteName as String

	oDoc=ThisComponent
		oSheet=oDoc.Sheets().getByIndex(0)
			oCC=oDoc.CurrentController
xray oCC
			oShape=oCC.Selection.getByIndex(0)
xray oShape
				sShapeName=oShape.Name
					oCellAdress=oCC.Selection.getByIndex(0).Anchor.getCellAddress
						sCellAbsoulteName=oCC.Selection.getByIndex(0).Anchor.AbsoluteName
xray sShapeName
xray oCellAdress
xray sCellAbsoulteName	

End Sub

Re: ["im Prinzip" per "work around" gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes ausle

Verfasst: Fr 19. Feb 2021, 17:21
von nitja
craig hat geschrieben:
Fr 19. Feb 2021, 17:11
… meinst Du so etwas …
Vielleicht. Muss ich mir erst formulieren, dann testen. Anschließend stelle ich hier das Ergebnis rein.
An und für sich funktioniert das "work around" in meinem speziellen Fall schon ganz gut, aber die Auswahl per Bild ist und bleibt grundsätzlich sehr interessant.

Re: ["im Prinzip" per "work around" gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes ausle

Verfasst: Fr 19. Feb 2021, 18:02
von mikele
Hallo,
ich hatte mal etwas gesehen und nun wieder entdeckt.
Excel hat netterweise eine Funktion/Methode namens "Caller" die den Namen des aufrufenden Objekts/Ereignisses (oder so ähnlich) liefert.
Obwohl LO Basic so etwas nicht implementiert hat, funktioniert es trotzdem, wenn der VBA-Support aktiviert ist.
Probiere mal:

Code: Alles auswählen

REM  *****  BASIC  *****

Option VBASupport 1

Sub Main
	
	oEv=Application.Caller
	msgbox oEv
	odoc=Thiscomponent
	otab=odoc.currentcontroller.activesheet
	odr=otab.drawpage
	for i=0 to odr.count-1
		msgbox odr.getbyindex(i).anchor.absoluteName
	next
	
End Sub

Re: ["im Prinzip" per "work around" gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes ausle

Verfasst: Fr 19. Feb 2021, 18:14
von nitja
mikele hat geschrieben:
Fr 19. Feb 2021, 18:02
… Excel hat netterweise eine Funktion/Methode namens "Caller" die den Namen des aufrufenden Objekts/Ereignisses (oder so ähnlich) liefert. …
Meine LO-Projekte sollen ohne irgendwas von WinzigWeich funktionieren.
Außerdem scheint der "Caller" in Deinem Code nutzlos, …
mikele hat geschrieben:
Fr 19. Feb 2021, 18:02

Code: Alles auswählen

 …
	odr=otab.drawpage
	for i=0 to odr.count-1
		msgbox odr.getbyindex(i).anchor.absoluteName
	next
End Sub
… wird hier nirgends verwendet, so dass die Schleife, die ich vermeiden kann, keinen Rückschluss auf das angeklickte Bild zulässt.

Re: ["im Prinzip" per "work around" gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes ausle

Verfasst: Fr 19. Feb 2021, 19:59
von mikele
Hallo,
da war ich etwas zu fix.
So sollte es natürlich sein:

Code: Alles auswählen

REM  *****  BASIC  *****

Option VBASupport 1

Sub Main
	
	oEv=Application.Caller
	odoc=Thiscomponent
	otab=odoc.currentcontroller.activesheet
	odr=otab.drawpage
	for i=0 to odr.count-1
		if odr.getbyindex(i).Name=oEv then
			msgbox odr.getbyindex(i).anchor.absoluteName
		end if
	next
	
End Sub
VBA selbst wird dabei nicht genutzt. Alternativ könnte man
1) einen Listener auf das Bild setzen, der bei Klick entsprechend reagiert
2) das Tabellenereignis Doppelklick oder Rechtsklick nutzen

Re: ["im Prinzip" per "work around" gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes ausle

Verfasst: Fr 19. Feb 2021, 21:47
von nitja
hi mikele,
yesss, jetzt ist's klarer
und ja, Dein Vorschlag 2) ist wie ich's derzeit mache (mit der Möglichkeit, durch direkte Adressierung die Schleife zu sparen).
Werde auf jeden Fall noch craigs Version (angepasst) testen.

Re: ["im Prinzip" per "work around" gelöst] CALC: bei Klick auf Bild in einer Zelle deren Adresse & URL des Bildes ausle

Verfasst: Mo 22. Feb 2021, 11:26
von nitja
@ craig & mikele
Alle Vorschläge funktionieren! 👍
Die einfachste Formulierung ist m. E.:

Code: Alles auswählen

dim oSel as object
oSel = oDoc.currentController.selection(0)
Mir war nicht klar, wie ich mit der Selection-Collection umgehen muss, dass bei einer einfachen Auswahl, das einzige, "0te" Element die Info liefert, die ich suchte.
Mittlerweile ist's noch einfacher: Wenn die Zelle die das Bild enthält, gesperrt aber auswählbar ist, liefert mir oSel direkt die Info zur Zelle und darüber (wo es gebraucht wird) den URL des Bildes.