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)

Code: Alles auswählen

oGraphic.getAnchor
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

Code: Alles auswählen

oGraphic.getAnchor.TextFrame
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:

Code: Alles auswählen

if not isEmpty(pic.Anchor.Textframe) then
oder

Code: Alles auswählen

if not isNull(pic.Anchor.Textframe) then
Karolus

Re: Rahmen und Beschriftung zu Grafik-Object finden

Verfasst: So 7. Sep 2014, 09:42
von lessger
Danke Karolus,

Code: Alles auswählen

isEmpty(oAnchor.TextFrame)
funktioniert.

Grüße
Gerhard