Seite 1 von 1
Rahmen und Beschriftung zu Grafik-Object finden
Verfasst: Fr 5. Sep 2014, 12:23
von lessger
Ich versuche in LO Basic zu einem Grafik-Object die Beschriftung zu finden. Ein Grafik-Objectmit Beschriftung befindet sich ja in einem beides umgebenden Textrahmen. Der Code soll aber auch für Grafik-Objects funktionieren, die keinen Rahmen haben. Dann soll eben keine Beschriftung gefunden werden.
Meine Grafiken finde ich so:
Code: Alles auswählen
oDoc = StarDesktop.CurrentComponent
oGraphic = oDoc.getGraphicObjects.getbyIndex(i)
führt mich dann zu einem übergeordneten Object, aber wie finde ich jetzt raus, daß dies ein Rahmen ist?
Es gibt da zwar die Property
aber das führt zu einem Laufzeitfehler, wenn das Bild nicht innerhalb eines Frames ist. In MRI sehe ich, daß TextFrame dann void ist. Aber kann ich das in Basic ohne Fehler ermitteln?
Danke und Gruß
Gerhard
Re: Rahmen und Beschriftung zu Grafik-Object finden
Verfasst: Fr 5. Sep 2014, 14:21
von karolus
Hallo
Code: Alles auswählen
def main():
doc = desktop.CurrentComponent
grafics = doc.GraphicObjects
for pic in iterate(grafics):
print(pic.Anchor.Text.String)
def iterate(enumerable_be):
enumerable = enumerable_be.createEnumeration()
while enumerable.hasMoreElements():
yield enumerable.nextElement()
Wenn das Bild keine Beschriftung hat, ist der String leer ""
Karolus
Re: Rahmen und Beschriftung zu Grafik-Object finden
Verfasst: Fr 5. Sep 2014, 16:35
von lessger
Vielen Dank, Karolus,
funktioniert aber bei mir nicht ganz.
Wenn es ein Bild mit Beschriftung ist, bekomme ich so die Beschriftung (das ist gut). Wenn es aber ein Bild ist, das direkt an einem Absatz verankert ist (ohne Rahmen), dann bekomme ich den Text des Absatzes. Den kann ich aber nicht gebrauchen und auch nicht unterscheiden.
Hast Du noch eine Idee?
Grüße
Gerhard
Re: Rahmen und Beschriftung zu Grafik-Object finden
Verfasst: Fr 5. Sep 2014, 17:28
von karolus
Hallo
Puh - irgendwie finde ich keine wirklich eindeutigen Unterscheidungsmerkmale, evtl. per
.Anchor.ParaStyleName Ein Bild mit Beschriftung bekommt im Normalfall die Absatzvorlage Illustration aber in der Praxis kann der Beschriftung auch irgendeine andere Absatzvorlage zugewiesen werden --
Karolus
Re: Rahmen und Beschriftung zu Grafik-Object finden
Verfasst: Fr 5. Sep 2014, 17:38
von lessger
Hatte auch schon überlegt, den Style abzufragen, ist aber eben nicht zuverlässig.
Als Unterscheidung hatte ich zunächst getAnchor.TextFrame herangezogen. Laut MRI ist das void, wenn kein Frame um die Grafik ist. Andernfalls bringt es einen zum umgebenden Rahmen.
Das Problem ist aber, daß der Zugriff getAnchor.Textframe im ersten Falle zu einem Laufzeitfehler ("Objektvariable nicht belegt") führt. Zur Not könnte ich das ja mit On Error abfangen, aber das mache ich ungern, weil es so unspezifisch ist.
Gibt es irgendeinen Weg, zu prüfen ob ein bestimmtes Property existiert, ohne einen Laufzeitfehler auszulösen? Es müßte aber in Basic sein. Das ganze ist ein existierendes, großes Programm, das ich nicht komplett umschreiben kann.
Grüße
Gerhard
Re: Rahmen und Beschriftung zu Grafik-Object finden
Verfasst: Fr 5. Sep 2014, 17:55
von karolus
Hallo
Ja dann nimm doch .Anchor.Textframe zur Identifizierung.
Code: Alles auswählen
def main():
doc = desktop.CurrentComponent
grafics = doc.GraphicObjects
for pic in iterate(grafics):
if pic.Anchor.TextFrame:
print(pic.Anchor.Text.String)
in Basic müsste das eine der folgenden sein:
oder
Karolus
Re: Rahmen und Beschriftung zu Grafik-Object finden
Verfasst: So 7. Sep 2014, 09:42
von lessger
Danke Karolus,
funktioniert.
Grüße
Gerhard