Basic macro um ein custom shape einzufügen ?

Hallo,

hat jemand ein Basic Macro Snippet um ein Custom-Shape (z.B. ein Smiley) in eine Seite einzufügen?

Hintergrund: Für einen Unittest müsste ich per Code ein Custom-Shape so einfügen, wie man es mit der Maus macht. Ich habe aber keine Idea wie das gehen kann. Ein Makro könnte mir vielleicht einen Lösungsansatz geben.

Mit freundlichen Grüßen
Regina

Hallo Regina,

ich habe mal folgendes Makro geschrieben.

Es fügt eine Grafik aus der Zwischenablage in ein Writer-Dokument ein.
Die gewünschte Größe wird gesetzt und das Bild/ die Grafik wird
positioniert.

Ab dem Kommentar:
'------------------- Logo zuschneiden

Hallo Regina,

ich habe angenommen, dass du das in Draw machen willst. Writer müsste fast gleich sein.
ich habe das erste Makro aus dem Buch von Marelly & Godard, das fügt eine Ellipse ein, das funktioniert. Ich habe bloß der Einfachheit halber die erste Drawpage angesprochen und nicht eine bestimmte per Namen.
Das zweite Makro habe ich angepasst, indem ich den ShapeType verändert habe. Das läuft durch, man sieht aber nichts. Es fehlen ja ganz offensichtlich noch Angaben, ich nehme an, dass das (vor allem?) CustomShapeGeometry ist. Da habe ich nicht weiter experimentiert, denn ich denke, da weißt du selbst besser Bescheid.

Viele Grüße
Gerhard

Hallo Jürgen,

Hallo Regina,

ich habe mal folgendes Makro geschrieben.

Es fügt eine Grafik aus der Zwischenablage in ein Writer-Dokument ein.
Die gewünschte Größe wird gesetzt und das Bild/ die Grafik wird
positioniert.

Zwischenablage und Gallery nützen mir leider nichts, weil damit ganz andere Code-Abschnitte angesprochen werden. Auch das Erzeugen mit Strg+Click nutzt mir leider nichts.

Ich brauche, dass das Objekt mit der Maus erzeugt wird. Also auf das Icon in der Werkzeugleiste klicken, dann mit der Maus auf die Arbeitsfläche klicken und das Objekt aufziehen. Der Makrorecorder nimmt leider nur den Click in the Werkzeugleiste auf.

Mit freudlichen Grüßen
Regina

Hallo Gerhard,

Hallo Regina,

ich habe angenommen, dass du das in Draw machen willst. Writer müsste fast gleich sein.

Ist in Calc. Aber sobald man auf der drawpage ist, ist kein wesentlicher Unterschied mehr zu Draw.

ich habe das erste Makro aus dem Buch von Marelly & Godard, das fügt eine Ellipse ein, das funktioniert. Ich habe bloß der Einfachheit halber die erste Drawpage angesprochen und nicht eine bestimmte per Namen.

Das Buch habe ich nicht, und leider kann ich auch kein Französisch.
Arbeitet das Makro mit createInstance("com.sun.star.drawing.CustomShape")? Das wäre Erzeugen mit new... im Code, das müsste ich ausprobieren.

Das zweite Makro habe ich angepasst, indem ich den ShapeType verändert habe. Das läuft durch, man sieht aber nichts. Es fehlen ja ganz offensichtlich noch Angaben, ich nehme an, dass das (vor allem?) CustomShapeGeometry ist. Da habe ich nicht weiter experimentiert, denn ich denke, da weißt du selbst besser Bescheid.

Das habe ich inzwischen erfahren. Die Größe muss man von Hand setzen
     Dim size As New com.sun.star.awt.Size
     size.Width = 5000
     size.Height = 5000
     shape.setSize(size)

und man benötigt noch die Eigenschaft "Type"
     Dim args(0) As New com.sun.star.beans.PropertyValue
     args(0).Name = "Type"
     args(0).Value = "smiley"
     shape.setPropertyValue("CustomShapeGeometry", args)

Mit freundlichen Grüßen
Regina

Hallo Regina,

ich sehe erst jetzt mit Schrecken, dass ich die Makros nicht in die Mail kopiert habe (es war sogar schon markiert!). Ich hole das jetzt nach, auch wenn du das selbst gefunden hast.
Das Buch von Marcelly & Godard gibt es leider nicht in Englisch oder gar Deutsch, sie haben keinen Verleger gefunden, obwohl sie einen freiwilligen Übersetzer gehabt hätten.

Sub AjouterEllipse()
Dim monDocument As Object, maPage As Object, maForme As Object
Dim dimensionsForme As New com.sun.star.awt.Size
Dim positionForme As New com.sun.star.awt.Point
monDocument = ThisComponent
maPage = monDocument.DrawPages(0)
maForme = monDocument.createInstance(_
 "com.sun.star.drawing.EllipseShape")
dimensionsForme.Width = 13400 ' 134 mm de large
dimensionsForme.Height = 2530 ' 25,3 mm de haut
positionForme.x = 2500 ' 25 mm à droite du coin de la page
positionForme.y = 5300 ' 53 mm en dessous du coin de la page

maForme.Size = dimensionsForme
maForme.Position = positionForme
maPage.add(maForme)
End Sub

Sub AjouterCustom()
Dim monDocument As Object, maPage As Object, maForme As Object
Dim dimensionsForme As New com.sun.star.awt.Size
Dim positionForme As New com.sun.star.awt.Point
monDocument = ThisComponent
maPage = monDocument.DrawPages(0)
maForme = monDocument.createInstance(_
 "com.sun.star.drawing.CustomShape")
dimensionsForme.Width = 13400 ' 134 mm de large
dimensionsForme.Height = 2530 ' 25,3 mm de haut
positionForme.x = 2500 ' 25 mm à droite du coin de la page
positionForme.y = 5300 ' 53 mm en dessous du coin de la page

maForme.Size = dimensionsForme
maForme.Position = positionForme
maPage.add(maForme)
End Sub

Viele Grüße
Gerhard

Hallo,

in der API habe ich dies gefunden:
https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1drawing_1_1XEnhancedCustomShapeDefaulter.html

Viele Grüße

Jürgen