Hallo Pit,
tja, das mit dem Kommentar (Notiz) ist meinerseits wohl dumm gelaufen. Hatte wohl in meinem Tool vergessen gehabt das rauszunehmen. Aber nun gut, der Problemverursacher ist ja jetzt eindeutig identifiziert.
Das Problem mit dem Löschen hattest Du hier doch schon mal:
Abstürze beim Löschen von Objekten auf einer Drawpage
Bevor ich es vergesse:
Arbeitest Du mit einem Inspektionstool wie XRAY oder MRI?
Wenn nein, dann wirds aller höchste Eisenbahn für dich das zu ändern.
Sie zu benennen oder durchzuzählen und einige stehenzulassen, scheint nicht zu funktionieren.
Das geht schon, man muss sich dafür aber mit MRI oder XRAY befassen um den Weg zu erfahren.
Und dann weiß ich auch immer noch nicht, wie man rausbekommt um welches Objekt es ich handelt, wenn es zwar da ist, man es mit "mystery=opage.getByIndex(0)" auch ansprechen kann, aber keine Ahnung hat (wie in diesem Fall) um was es ich handelt.
Kein Scherz, wenn das Kind keinen Namen hat, dann kann man es nicht ansprechen.
Dein "mystery" sagt nur das da ein Objekt ist, mehr aber auch nicht. Um was für ein Objekt es sich dabei handelt ist extrem schwer herauszufinden, wenn man wissen will ob es ein Button oder eine Notiz ist. Das ist aber in deiner Datei auch gar nicht nötig.
Im Grundprinzip bist Du ja eigentlich schon auf dem richtigen Weg gewesen. Jedoch ohne dementsprechende Vorarbeit und Code Erweiterung gehts nicht.
Als erstes musst Du beim erstellen einer Grafik ihr einen Namen vergeben. Und erst dann die Grafik erzeugen. Also anstatt nur (als Beispiels)
Code: Alles auswählen
With oWinkel
.CircleStartAngle=(0)*100
.CircleEndAngle=(aZ/aN*360)*100
.FillStyle=com.sun.star.drawing.FillStyle.SOLID
.FillColor=255
end with
oPage.add(oWinkel)
das ganze um eine Zeile erweitern, und zwar so.
Code: Alles auswählen
With oWinkel
.CircleStartAngle=(0)*100
.CircleEndAngle=(aZ/aN*360)*100
.FillStyle=com.sun.star.drawing.FillStyle.SOLID
.FillColor=255
.Name = "Winkel_No1"
end with
oPage.add(oWinkel)
Jetzt hat das Kind einen Namen, und nun kann es auch persönlich mit Namen angesprochen werden.
Dieser Name muss aber so lange wie die dementsprechende Sub, beziehungsweise Rechenaufgabe (oder was auch immer) bearbeitet wird gespeichert werden.
Um etwas genauer zu sein.
Sub Aufruf, einen Namen einer Variablen zuweisen, Aufgabe starten und wenn gelöst (fertig) die Variable auf "" leer setzen. Nicht das die Variable in einer anderen Aufgabe mit dem gleichen Namen einen falschen Zusammenhang für dich erzeugt. Wäre doch Plöte wenn es um Rechtecke geht, aber die Grafik Winkel heißt. Na Du verstehst schon.
Aber wie kann man denn jetzt das dementsprechende Objekt mit Namen ansprechen, wirst Du dich jetzt fragen?
Nun, eines von den zuvor genannten Tools (z.B. MRI) wird dir bei richtiger Handhabung sagen, das man den Namen auch auslesen kann.
Und das baust Du in eine Schleife ein, die daraufhin überprüft ob der zu vergleichende Name mit dem gefundenen Namen übereinstimmt. Und wenn ja, dann wird die dementsprechende Grafik wie gehabt gelöscht.
Deine mehrfach gepostete *sub ZeichnungLoeschen* würde dann wie folgt aussehen.
Code: Alles auswählen
sub ZeichnungLoeschen
oPage=ThisComponent.drawpages(0)
for ip = 0 to oPage.count
oGrafik=opage.getbyindex(ip)
if oGrafik.getName() = "Pfeile" then
oPage.remove(oGrafik)
exit for
end if
next ip
end sub
Diese habe ich hier unter AOO 4.1.5 erfolgreich getestet.
Hier noch ein paar Infos dazu.
- Die Variable 'seite' konnte ich für meine Testdatei nicht gebrauchen, deshalb durch einen festen Wert ersetzt.
- Deine 'Do..Loop' mit 'opage.getbyindex(oPage.count-1)' musste rausgeschmissen werden. Der Grund dafür war folgender.
Aufm Tabellenblatt war eine Linie mit Pfeilen die auch den Namen "Pfeile" trägt (per Makro erstellt), und ferner ein gezeichnetes Rechteck ohne Name (von Hand gezeichnet). Und bei Ausführung des Test-Codes mit 'Do..Loop....' fand Calc kein Ende. Das Makro ging in eine Art Dauerschleife. Ich musste in der Basic-IDE den Stop-Knopf drücken. Und erst als ich das Makro wie zu sehen abänderte, wurde wie gewünscht die Linie gelöscht, und das Namenlose Rechteck blieb stehen.
Merksatz:
Jede Grafik die das Makro erstellt bekommt vom Makro auch einen Namen, dann ist das ansprechen kein Problem mehr.
Ich hoffe Du weisst jetzt mehr, und hoffentlich kannst Du das jetzt auch alles sicher unterbringen.
Und nein! Ich habe das nicht ausm Ärmel geschüttelt, sondern mir selber mühsam erarbeitet.
Gud Lack
Gruß
balu