StarOffice 8 Programmierhandbuch für BASIC
  Искать только в названиях книг
Просмотреть эту книгу в:
Загрузить это руководство в формате PDF (1551 КБ)

Kapitel 8 Zeichnungen und Präsentationen

Dieses Kapitel gibt eine Einführung in die makrogesteuerte Erstellung und Bearbeitung von Zeichnungen. Im ersten Abschnitt wird der Aufbau von Zeichnungen, einschließlich der darin enthaltenen grundlegenden Elemente, beschrieben. Im zweiten Abschnitt werden komplexere Bearbeitungsfunktionen wie das Gruppieren, Drehen und Skalieren von Objekten behandelt.

Informationen zum Erstellen, Öffnen und Speichern von Zeichnungen finden Sie in Kapitel 5, Arbeiten mit StarOffice-Dokumenten.

Der Aufbau von Zeichnungen

In StarOffice ist die Seitenanzahl, über die ein Zeichnungsdokument verfügen kann, unbegrenzt. Sie können dabei jede Seite individuell entwerfen. Auch die Anzahl von Zeichnungselementen, die einer Seite hinzugefügt werden können, ist unbegrenzt.

Dieser Eindruck wird durch das Vorhandensein von Ebenen (Layer) unwesentlich kompliziert. Standardmäßig enthält jedes Zeichnungsdokument die Ebenen Layout, Steuerelemente (Controls) und Maßlinien (Dimension Lines), wobei alle Zeichnungselemente der Ebene Layout hinzugefügt werden. Es besteht auch die Möglichkeit, neue Ebenen hinzuzufügen. Weitere Informationen zu Zeichnungsebenen finden Sie im "StarOffice Developer's Guide".

Seiten

Die Seiten eines Zeichnungsdokuments sind über die Liste DrawPages verfügbar. Auf einzelne Seiten können Sie wahlweise über ihre Nummer oder ihren Namen zugreifen. Enthält ein Dokument eine Seite und heißt diese Slide 1, so sind die folgenden Beispiele identisch.

Beispiel 1:

Dim Doc As Object
Dim Page As Object

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Beispiel 2:

Dim Doc As Object
Dim Page As Object

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages.getByName("Slide 1")

In Beispiel 1 wird die Seite über ihre Nummer adressiert (die Zählung beginnt hier mit 0). Im zweiten Beispiel erfolgt der Zugriff über den Namen mit der Methode getByName.

Dim sUrl As String, sFilter As String
Dim sOptions As String
Dim oSheets As Object, oSheet As Object

   oSheets = oDocument.Sheets

   If oSheets.hasByName("Link") Then
      oSheet = oSheets.getByName("Link")
   Else
      oSheet = oDocument.createInstance("com.sun.star.sheet.Spreadsheet")
      oSheets.insertByName("Link", oSheet)
      oSheet.IsVisible = False
   End If

Der vorangehende Aufruf gibt ein Seitenobjekt zurück, das den Dienst com.sun.star.drawing.DrawPage unterstützt. Der Dienst erkennt folgende Eigenschaften:

  • BorderLeft (Long): linker Seitenrand in 100stel Millimeter.

  • BorderRight (Long): rechter Seitenrand in 100stel Millimeter.

  • BorderTop (Long): oberer Seitenrand in 100stel Millimeter.

  • BorderBottom (Long): unterer Seitenrand in 100stel Millimeter.

  • Width (Long): Seitenbreite in 100stel Millimeter.

  • Height (Long): Seitenhöhe in 100stel Millimeter.

  • Number (Short): Nummer der Seite (Nummerierung beginnt bei 1); schreibgeschützt (nur Lesen).

  • Orientation (Enum): Seitenausrichtung (gemäß der Aufzählung com.sun.star.view.PaperOrientation).

Werden diese Einstellungen geändert, so wirkt sich dies auf alle Seiten des Dokuments aus.

Das folgende Beispiel setzt die Seitengröße des gerade geöffneten Zeichnungsdokuments auf 20 x 20 cm bei einem Seitenrand von jeweils 0,5 cm:

Dim Doc As Object
Dim Page As Object

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Page.BorderLeft = 500
Page.BorderRight = 500
Page.BorderTop = 500
Page.BorderBottom = 500

Page.Width = 20000
Page.Height = 20000

Elementare Eigenschaften von Zeichnungsobjekten

Zu den Zeichnungsobjekte gehören Formen (Rechtecke, Kreise usw.), Linien und Textobjekte. All diese Objekte besitzen eine Reihe gemeinsamer Eigenschaften und unterstützen den Dienst com.sun.star.drawing.Shape. Dieser Dienst definiert die Eigenschaften Size und Position für ein Zeichnungsobjekt.

StarOffice Basic bietet außerdem zahlreiche andere Dienste, mit denen solche Eigenschaften geändert werden können, beispielsweise Formatierung oder Anwenden von Füllungen. Welche Formatierungsoptionen zur Verfügung stehen, hängt vom Typ des Zeichnungsobjekts ab.

Im folgenden Beispiel wird ein Rechteck erstellt und in ein Zeichnungsobjekt eingefügt:

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

Page.add(RectangleShape)

Das Beispiel ermittelt über den Aufruf StarDesktop.CurrentComponent das aktuell geöffnete Dokument. Das so bestimmte Dokumentobjekt gibt über den Aufruf drawPages(0) die erste Seite der Zeichnung zurück.

Im Anschluss daran werden die Strukturen Point und Size mit dem Ursprungspunkt (linke obere Ecke) und der Größe des Zeichnungsobjekts initialisiert. Die Längen werden dabei in 100stel Millimeter angegeben.

Der Programmcode erstellt dann mit dem Aufruf Doc.createInstance das Rechteck-Zeichnungsobjekt, wie es vom Dienst com.sun.star.drawing.RectangleShape festgelegt ist. Schließlich wird das Zeichnungsobjekt einer Seite mit einem Aufruf Page.add zugewiesen.

Fülleigenschaften

In diesem Abschnitt werden vier Dienste beschrieben, wobei der Beispielprogrammcode jedes Mal ein Rechteck-Element (RectangleShape) verwendet, das mehrere Formatierungsarten in sich vereint. Fülleigenschaften sind in dem Dienst com.sun.star.drawing.FillProperties zusammengefasst.

StarOffice erkennt vier Hauptarten der Formatierung eines Füllbereichs. Die einfachste Variante stellt eine einfarbige Füllung dar. Die Möglichkeiten zur Definition von Farbverläufen und Schraffuren ermöglichen Ihnen die Erzeugung zusätzlicher Farben. Schließlich besteht als vierte Variante die Möglichkeit, bereits vorhandene Grafiken in den Füllbereich hinein zu projizieren.

Der Füllmodus eines Zeichnungsobjekts wird über die Eigenschaft FillStyle definiert. Die zugelassenen Werte sind in com.sun.star.drawing.FillStyle definiert.

Einfarbige Füllungen

Die Haupteigenschaft für einfarbige Füllungen lautet

  • FillColor (Long): Füllfarbe des Bereichs.

Um den Füllmodus zu verwenden, muss die Eigenschaft FillStyle dem Füllmodus SOLID zugewiesen werden.

Das folgende Beispiel erzeugt ein Rechteck und füllt es mit Rot (RGB-Wert 255, 0, 0):

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
RectangleShape.FillColor = RGB(255,0,0)

Page.add(RectangleShape)

Farbverläufe

Wenn die Eigenschaft FillStyle auf GRADIENT gesetzt wird, kann auf jeden Füllbereich eines StarOffice-Dokuments ein Farbverlauf angewendet werden.

Wenn ein vordefinierter Farbverlauf angewendet werden soll, kann der verknüpfte Name der Eigenschaft FillTransparenceGradientName zugewiesen werden. Um einen eigenen Farbverlauf zu definieren, müssen Sie eine com.sun.star.awt.Gradient-Struktur vervollständigen, um die Eigenschaft FillGradient zuzuweisen. Diese Eigenschaft stellt folgende Optionen bereit:

  • Style (Enum): Verlaufsart, beispielsweise linear oder radial (Standardwerte gemäß com.sun.star.awt.GradientStyle).

  • StartColor (Long): Anfangsfarbe des Farbverlaufs.

  • EndColor (Long): Endfarbe des Farbverlaufs.

  • Angle (Short): Winkel des Farbverlaufs in 10tel Grad.

  • XOffset (Short): X-Koordinate, bei der der Farbverlauf beginnt, angegeben in 100stel Millimeter.

  • YOffset (Short): Y-Koordinate, bei der der Farbverlauf beginnt, angegeben in 100stel Millimeter.

  • StartIntensity (Short): Intensität von StartColor als Prozentsatz (in StarOffice Basic können auch Werte angegeben werden, die größer als 100 Prozent sind).

  • EndIntensity (Short): Intensität von EndColor als Prozentsatz (in StarOffice Basic können auch Werte angegeben werden, die größer als 100 Prozent sind).

  • StepCount (Short): Anzahl der Farbabstufungen, die StarOffice für den Farbverlauf berechnen soll.

Das folgende Beispiel demonstriert den Einsatz von Farbverläufen unter Zuhilfenahme der Struktur com.sun.star.awt.Gradient:

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim Gradient As New com.sun.star.awt.Gradient 

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point
Gradient.Style = com.sun.star.awt.GradientStyle.LINEAR
Gradient.StartColor = RGB(255,0,0)
Gradient.EndColor = RGB(0,255,0)
Gradient.StartIntensity = 150   
Gradient.EndIntensity = 150
Gradient.Angle = 450
Gradient.StepCount = 100

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.GRADIENT
RectangleShape.FillGradient = Gradient

Page.add(RectangleShape)

In diesem Beispiel wird ein linearer Farbverlauf erstellt (Style = LINEAR). Der Farbverlauf beginnt mit Rot (StartColor) in der linken oberen Ecke und verläuft in einem Winkel von 45° (Angle) nach Grün (EndColor) in der rechten unteren Ecke. Die Farbintensität der Start- und Endfarben beträgt jeweils 150 Prozent (StartIntensity und EndIntensity), was dazu führt, dass die Farben heller erscheinen, als die in den Eigenschaften StartColor und EndColor angegebenen Werte. Die Darstellung des Farbverlaufs erfolgt über 100 abgestufte Einzelfarben (StepCount).

Schraffuren

Um eine Schraffurfüllung zu erzeugen, muss die Eigenschaft FillStyle auf HATCH gesetzt werden. Der Programmcode zur Definition der Schraffur ähnelt stark dem für Farbverläufe. Wieder wird eine Hilfsstruktur, hier com.sun.star.drawing.Hatch, verwendet, um das Aussehen der Schraffuren zu definieren. Die Struktur für Schraffuren verfügt über folgende Eigenschaften:

  • Style (Enum): Art der Schraffur: einfach, kariert oder kariert mit Diagonalen (Standardwerte gemäß com.sun.star.awt.HatchStyle).

  • Color (Long): Farbe der Linien.

  • Distance (Long): Abstand zwischen den Linien in 100stel Millimeter.

  • Angle (Short): Winkel der Schraffur in 10tel Grad.

Das folgende Beispiel demonstriert den Einsatz einer Schraffurstruktur (Hatch):

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim Hatch As New com.sun.star.drawing.Hatch

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.HATCH

Hatch.Style = com.sun.star.drawing.HatchStyle.SINGLE
Hatch.Color = RGB(64,64,64)
Hatch.Distance = 20
Hatch.Angle = 450

RectangleShape.FillHatch = Hatch

Page.add(RectangleShape)

Dieser Code erzeugt eine einfache Schraffur (HatchStyle = SINGLE), deren Linien um 45° gedreht sind (Angle). Die Linien sind dunkelgrau (Color) mit einem Abstand (Distance) von 0,2 mm.

Bitmaps

Um eine Bitmap-Projektion als Füllung zu verwenden, muss die Eigenschaft FillStyle auf BITMAP gesetzt werden. Wenn die Bitmap in StarOffice bereits zur Verfügung steht, genügt es, deren Namen in der Eigenschaft FillBitMapName einzugeben und die gewünschte Darstellungsart (einfach, gekachelt oder gestreckt) in der Eigenschaft FillBitmapMode festzulegen (Standardwerte gemäß com.sun.star.drawing.BitmapMode).

Wenn eine externe Bitmap-Datei verwendet werden soll, können Sie den URL in der Eigenschaft FillBitmapURL angeben.

Das folgende Beispiel erzeugt ein Rechteck, dessen Fläche mit der in StarOffice verfügbaren Bitmap "Sky" gekachelt gefüllt wird.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.BITMAP
RectangleShape.FillBitmapName = "Sky"
RectangleShape.FillBitmapMode = com.sun.star.drawing.BitmapMode.REPEAT

Page.add(RectangleShape)

Transparenz

Sie können die Transparenz jeder angewendeten Füllung anpassen. Die einfachste Methode zum Ändern der Transparenz eines Zeichnungselements besteht in der Verwendung der Eigenschaft FillTransparence.

Das folgende Beispiel erzeugt ein rotes Rechteck mit einer Transparenz von 50 Prozent.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.FillStyle = com.sun.star.drawing.FillStyle.SOLID
RectangleShape.FillTransparence = 50
RectangleShape.FillColor = RGB(255,0,0)

Page.add(RectangleShape)

Um die Füllung vollständig transparent zu machen, wird die Eigenschaft FillTransparence auf 100 gesetzt.

Über die Eigenschaft FillTransparence hinaus bietet der Dienst com.sun.star.drawing.FillProperties außerdem die Eigenschaft FillTransparenceGradient. Sie wird zum Definieren eines Farbverlaufs verwendet, der die Transparenz eines Füllbereichs festlegt.

Linieneigenschaften

Alle Zeichnungsobjekte, die über eine Umrandungslinie verfügen können, unterstützen den Dienst com.sun.star.drawing.LineStyle. Einige der von diesem Dienst bereitgestellten Eigenschaften sind:

  • LineStyle (Enum): Linienart (Standardwerte gemäß com.sun.star.drawing.LineStyle).

  • LineColor (Long): Linienfarbe.

  • LineTransparence (Short): Linientransparenz.

  • LineWidth (Long): Linienstärke in 100stel Millimeter.

  • LineJoint (Enum): Übergänge an Verbindungspunkten (Standardwerte gemäß com.sun.star.drawing.LineJoint).

Das folgende Beispiel erzeugt ein Rechteck mit einer durchgezogenen Umrandung (LineStyle = SOLID), die eine Stärke (LineWidth) von 5 mm aufweist und zu 50 Prozent transparent ist. Der rechte und linke Rand der Linie sind bis zu ihren Schnittpunkten mit der jeweils anderen Linie durchgeführt (LineJoint = MITER), so dass ein rechter Winkel gebildet wird.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.LineColor = RGB(128,128,128)
RectangleShape.LineTransparence = 50
RectangleShape.LineWidth = 500
RectangleShape.LineJoint = com.sun.star.drawing.LineJoint.MITER   

RectangleShape.LineStyle = com.sun.star.drawing.LineStyle.SOLID

Page.add(RectangleShape)

Neben den aufgeführten Eigenschaften bietet der Dienst com.sun.star.drawing.LineStyle Möglichkeiten zum Zeichnen gepunkteter und gestrichelter Linien. Weitere Informationen finden Sie in der StarOffice API-Referenz.

Texteigenschaften (Zeichnungsobjekte)

Mit den Diensten com.sun.star.style.CharacterProperties und com.sun.star.style.ParagraphProperties kann Text in Zeichnungsobjekten formatiert werden. Diese Dienste wirken sich auf einzelne Zeichen und Absätze aus und werden detailliert in Kapitel 6 (Textdokumente) beschrieben.

Im folgenden Beispiel wird Text in ein Rechteck eingefügt und die Schriftart mit dem Dienst com.sun.star.style.CharacterProperties formatiert.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000
Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

Page.add(RectangleShape)

RectangleShape.String = "This is a test"
RectangleShape.CharWeight = com.sun.star.awt.FontWeight.BOLD
RectangleShape.CharFontName = "Arial"

Dieser Code verwendet die String-Eigenschaft des Rechtecks, um den Text einzufügen, und die Eigenschaften CharWeight und CharFontName des Dienstes com.sun.star.style.CharacterProperties, um die Textschriftart zu formatieren.

Der Text kann erst nach dem Hinzufügen des Zeichnungsobjekts zu der Zeichenseite eingefügt werden. Zum Positionieren und Formatieren von Text in Zeichnungsobjekten können Sie auch den Dienst com.sun.star.drawing.Text verwenden. Im Folgenden werden einige der wichtigsten Eigenschaften dieses Dienstes aufgeführt:

  • TextAutoGrowHeight (Boolean): passt die Höhe des Zeichnungselements an den enthaltenen Text an.

  • TextAutoGrowWidth (Boolean): passt die Breite des Zeichnungselements an den enthaltenen Text an.

  • TextHorizontalAdjust (Enum): horizontale Position des Texts im Zeichnungsobjekt (Standardwerte gemäß com.sun.star.drawing.TextHorizontalAdjust).

  • TextVerticalAdjust (Enum): vertikale Position des Texts im Zeichnungsobjekt (Standardwerte gemäß com.sun.star.drawing.TextVerticalAdjust).

  • TextLeftDistance (Long): linker Abstand zwischen Zeichnungselement und Text in 100stel Millimeter.

  • TextRightDistance (Long): rechter Abstand zwischen Zeichnungselement und Text in 100stel Millimeter.

  • TextUpperDistance (Long): oberer Abstand zwischen Zeichnungselement und Text in 100stel Millimeter.

  • TextLowerDistance (Long): unterer Abstand zwischen Zeichnungselement und Text in 100stel Millimeter.

Das folgende Beispiel demonstriert den Einsatz der genannten Eigenschaften.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

Page.add(RectangleShape)

RectangleShape.String = "Dies ist ein Test"   ' Darf erst nach Page.add erfolgen!

RectangleShape.TextVerticalAdjust = com.sun.star.drawing.TextVerticalAdjust.TOP
RectangleShape.TextHorizontalAdjust = com.sun.star.drawing.TextHorizontalAdjust.LEFT

RectangleShape.TextLeftDistance = 300
RectangleShape.TextRightDistance = 300
RectangleShape.TextUpperDistance = 300
RectangleShape.TextLowerDistance = 300

Dieser Code fügt ein Zeichnungselement in eine Seite ein und fügt dann in der linken oberen Ecke des Zeichnungsobjekts über die Eigenschaften TextVerticalAdjust und TextHorizontalAdjust Text hinzu. Der Mindestabstand zwischen Text und Rand des Zeichnungsobjekts ist auf 3 mm festgelegt.

Schatteneigenschaften

Den meisten Zeichnungsobjekten kann mit dem Dienst com.sun.star.drawing.ShadowProperties ein Schatten hinzugefügt werden. Die Eigenschaften des Dienstes sind:

  • Shadow (Boolean): aktiviert den Schatten.

  • ShadowColor (Long): Schattenfarbe.

  • ShadowTransparence (Short): Transparenz des Schattens.

  • ShadowXDistance (Long): vertikaler Abstand des Schattens vom Zeichnungsobjekt in 100stel Millimeter.

  • ShadowYDistance (Long): horizontaler Abstand des Schattens vom Zeichnungsobjekt in 100stel Millimeter.

Das folgende Beispiel erzeugt ein Rechteck mit einem Schatten, der vertikal und horizontal um 2 mm gegenüber dem Rechteck versetzt ist. Der Schatten wird dunkelgrau und mit 50 Prozent Transparenz angezeigt.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.Shadow = True
RectangleShape.ShadowColor = RGB(192,192,192)
RectangleShape.ShadowTransparence = 50
RectangleShape.ShadowXDistance = 200 
RectangleShape.ShadowYDistance = 200

Page.add(RectangleShape)

Verschiedene Zeichnungsobjekte im Überblick

Rechtecke

Rechteck-Objekte (com.sun.star.drawing.RectangleShape) unterstützen folgende Dienste zur Formatierung von Objekten:

  • Flächeneigenschaften: com.sun.star.drawing.FillProperties

  • Linieneigenschaften: com.sun.star.drawing.LineProperties

  • Texteigenschaften: com.sun.star.drawing.Text (mit com.sun.star.style.CharacterProperties und com.sun.star.style.ParagraphProperties)

  • Schatteneigenschaften: com.sun.star.drawing.ShadowProperties

  • CornerRadius (Long): Radius zum Abrunden von Ecken in 100stel Millimeter.

Kreise und Ellipsen

Für Kreise und Ellipsen ist der Dienst com.sun.star.drawing.EllipseShape verantwortlich, der wiederum folgende Dienste unterstützt:

  • Flächeneigenschaften: com.sun.star.drawing.FillProperties

  • Linieneigenschaften: com.sun.star.drawing.LineProperties

  • Texteigenschaften: com.sun.star.drawing.Text (mit com.sun.star.style.CharacterProperties und com.sun.star.style.ParagraphProperties)

  • Schatteneigenschaften: com.sun.star.drawing.ShadowProperties

Zusätzlich zu diesen Diensten stellen Kreise und Ellipsen auch diese Eigenschaften bereit:

  • CircleKind (Enum): Art des Kreises oder der Ellipse (Standardwerte gemäß com.sun.star.drawing.CircleKind).

  • CircleStartAngle (Long): Startwinkel in 10tel Grad (nur bei Kreis- bzw. Ellipsensegmenten).

  • CircleEndAngle (Long): Endwinkel in 10tel Grad (nur bei Kreis- bzw. Ellipsensegmenten).

Die Eigenschaft CircleKind bestimmt, ob ein Objekt ein vollständiger Kreis, ein Kreissegment oder ein Kreisabschnitt ist. Folgende Werte stehen zur Verfügung:

  • com.sun.star.drawing.CircleKind.FULL: vollständiger Kreis bzw. vollständige Ellipse.

  • com.sun.star.drawing.CircleKind.CUT: Kreisabschnitt (Teilkreis, dessen Schnittstellen direkt miteinander verbunden sind).

  • com.sun.star.drawing.CircleKind.SECTION: Kreissegment.

  • com.sun.star.drawing.CircleKind.ARC: Winkel (ohne Kreislinie).

Das folgende Beispiel erzeugt ein Kreissegment mit einem Winkel von 70° (ergibt sich aus der Differenz zwischen dem Startwinkel von 20° und dem Endwinkel von 90°).

Dim Doc As Object
Dim Page As Object
Dim EllipseShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

EllipseShape = Doc.createInstance("com.sun.star.drawing.EllipseShape")
EllipseShape.Size = Size
EllipseShape.Position = Point

EllipseShape.CircleStartAngle = 2000
EllipseShape.CircleEndAngle = 9000
EllipseShape.CircleKind =  com.sun.star.drawing.CircleKind.SECTION

Page.add(EllipseShape)

Linien

Für Linienobjekte hält StarOffice den Dienst com.sun.star.drawing.LineShape bereit. Linienobjekte unterstützen alle allgemeinen Formatierungsdienste, mit Ausnahme des Dienstes für Flächen. Im Folgenden finden Sie alle Eigenschaften, die mit dem Dienst LineShape verknüpft sind:

  • Linieneigenschaften: com.sun.star.drawing.LineProperties

  • Texteigenschaften: com.sun.star.drawing.Text (mit com.sun.star.style.CharacterProperties und com.sun.star.style.ParagraphProperties)

  • Schatteneigenschaften: com.sun.star.drawing.ShadowProperties

Das folgende Beispiel erzeugt und formatiert eine Linie unter Zuhilfenahme der genannten Eigenschaften. Der Anfangspunkt der Linie ist in der Location-Eigenschaft angegeben, während die in der Size-Eigenschaft enthaltenen Koordinaten den Endpunkt der Linie angeben.

Dim Doc As Object
Dim Page As Object
Dim LineShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

LineShape = Doc.createInstance("com.sun.star.drawing.LineShape")
LineShape.Size = Size
LineShape.Position = Point

Page.add(LineShape)

Vielecke (Polypolygone)

StarOffice unterstützt auch komplexe polygonale Formen durch den Dienst com.sun.star.drawing.PolyPolygonShape. Streng genommen handelt es sich bei einem PolyPolygon nicht einmal um ein einfaches Vieleck, sondern um ein mehrfaches Vieleck. So lassen sich mehrere unabhängige Listen mit Eckpunkten angeben, die zu einem Gesamtobjekt zusammengefasst werden können.

Analog zu den Rechtecken stehen auch für Vielecke alle Formatierungseigenschaften von Zeichnungsobjekten zur Verfügung:

  • Flächeneigenschaften: com.sun.star.drawing.FillProperties

  • Linieneigenschaften: com.sun.star.drawing.LineProperties

  • Texteigenschaften: com.sun.star.drawing.Text (mit com.sun.star.style.CharacterProperties und com.sun.star.style.ParagraphProperties)

  • Schatteneigenschaften: com.sun.star.drawing.ShadowProperties

Der Dienst PolyPolygonShape verfügt auch über eine Eigenschaft, mit der Sie die Koordinaten eines Polygons definieren können:

  • PolyPolygon (Array): Feld mit den Koordinaten des Polygons (Doppel-Array mit Punkten vom Typ com.sun.star.awt.Point).

Das folgende Beispiel zeigt, wie sich mit Hilfe des Dienstes PolyPolygonShape ein Dreieck definieren lässt.

Dim Doc As Object
Dim Page As Object
Dim PolyPolygonShape As Object
Dim PolyPolygon As Variant
Dim Coordinates(2) As New com.sun.star.awt.Point

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")
Page.add(PolyPolygonShape)   ' Page.add muss vor dem Setzen der Koordinaten erfolgen

Coordinates(0).x = 1000
Coordinates(1).x = 7500
Coordinates(2).x = 10000
Coordinates(0).y = 1000
Coordinates(1).y = 7500
Coordinates(2).y = 5000

PolyPolygonShape.PolyPolygon = Array(Coordinates())

Da die Punkte eines Polygons als Absolutwerte definiert sind, müssen Sie die Größe oder die Startposition eines Polygons nicht angeben. Stattdessen müssen Sie einen Array dieser Punkte erstellen, diesen Array in einen zweiten Array integrieren (mit Hilfe des Aufrufs Array(Coordinates())()) und diesen Array dann dem Polygon zuweisen. Bevor der entsprechend Aufruf erfolgen kann, muss das Polygon in das Dokument eingefügt werden.

Der Doppel-Array in der Definition ermöglicht Ihnen die Erstellung komplexer Formen durch das Zusammenführen mehrerer Polygone. So können Sie beispielsweise ein Rechteck erstellen und dann ein weiteres darin einfügen, um in dem Originalrechteck ein Loch zu erzeugen:

Dim Doc As Object
Dim Page As Object
Dim PolyPolygonShape As Object
Dim PolyPolygon As Variant
Dim Square1(3) As New com.sun.star.awt.Point
Dim Square2(3) As New com.sun.star.awt.Point
Dim Square3(3) As New com.sun.star.awt.Point

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

PolyPolygonShape = Doc.createInstance("com.sun.star.drawing.PolyPolygonShape")

Page.add(PolyPolygonShape)   ' Page.add muss vor dem Setzen der Koordinaten erfolgen

Square1(0).x = 5000
Square1(1).x = 10000
Square1(2).x = 10000
Square1(3).x = 5000
Square1(0).y = 5000
Square1(1).y = 5000
Square1(2).y = 10000
Square1(3).y = 10000

Square2(0).x = 6500
Square2(1).x = 8500
Square2(2).x = 8500
Square2(3).x = 6500
Square2(0).y = 6500
Square2(1).y = 6500
Square2(2).y = 8500
Square2(3).y = 8500

Square3(0).x = 6500
Square3(1).x = 8500
Square3(2).x = 8500
Square3(3).x = 6500
Square3(0).y = 9000
Square3(1).y = 9000
Square3(2).y = 9500
Square3(3).y = 9500

PolyPolygonShape.PolyPolygon = Array(Square1(), Square2(), Square3())

Im Hinblick darauf, welche Bereiche gefüllt und welche Löcher sind, wendet StarOffice eine einfache Regel an: Der Rand der äußersten Form ist immer die äußere Umrandung des PolyPolygons. Die nächste innen liegende Linie stellt die innere Umrandung der Form dar und markiert somit den Übergang zum ersten Loch. Folgt daraufhin eine weitere Linie nach innen, so markiert diese wiederum den Übergang zu einem gefüllten Bereich.

Grafiken

Das letzte der hier vorgestellten Zeichnungselemente sind Grafik-Objekte auf der Grundlage des Dienstes com.sun.star.drawing.GraphicObjectShape. Der Dienst kann auf alle Grafiken innerhalb von StarOffice angewendet werden, deren Aussehen mit einer ganzen Reihe von Eigenschaften angepasst werden kann.

Grafikobjekte unterstützen zwei der allgemeinen Formatierungseigenschaften:

  • Texteigenschaften: com.sun.star.drawing.Text (mit com.sun.star.style.CharacterProperties und com.sun.star.style.ParagraphProperties)

  • Schatteneigenschaften: com.sun.star.drawing.ShadowProperties

Zusätzliche von Grafikobjekten unterstützte Eigenschaften sind:

  • GraphicURL (String): URL der Grafik.

  • AdjustLuminance (Short): Leuchtkraft der Farben in Prozent (auch negative Werte zugelassen).

  • AdjustContrast (Short): Kontrast in Prozent (auch negative Werte zugelassen).

  • AdjustRed (Short): Rotanteil in Prozent (auch negative Werte zugelassen).

  • AdjustGreen (Short): Grünanteil in Prozent (auch negative Werte zugelassen).

  • AdjustBlue (Short): Blauanteil in Prozent (auch negative Werte zugelassen).

  • Gamma (Short): Gamma-Wert einer Grafik.

  • Transparency (Short): Transparenz einer Grafik in Prozent.

  • GraphicColorMode (Enum): Farbmodus, z. B. Standard, Graustufen, Schwarzweiß (Standardwert gemäß com.sun.star.drawing.ColorMode).

Das folgende Beispiel zeigt, wie eine Seite in ein Grafikobjekt eingefügt wird. Dim Doc As Object

Dim Page As Object
Dim GraphicObjectShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000         ' Angaben; unerheblich, da spätere 
                       ' Koordinaten verbindlich sind
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

GraphicObjectShape = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")

GraphicObjectShape.Size = Size
GraphicObjectShape.Position = Point

GraphicObjectShape.GraphicURL = "file:///c:/test.jpg"
GraphicObjectShape.AdjustBlue = -50
GraphicObjectShape.AdjustGreen = 5
GraphicObjectShape.AdjustBlue = 10
GraphicObjectShape.AdjustContrast = 20
GraphicObjectShape.AdjustLuminance = 50
GraphicObjectShape.Transparency = 40
GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD

Page.add(GraphicObjectShape)

Dieser Code fügt die Grafik test.jpg ein und passt ihr Aussehen über die Adjust-Eigenschaften an. In diesem Beispiel wird die Grafik mit 40% Transparenz und ohne zusätzliche Farbumwandlungen dargestellt (GraphicColorMode = STANDARD).

Bearbeiten von Zeichnungsobjekten

Gruppieren von Objekten

In vielen Situationen ist es hilfreich, mehrere einzelne Zeichnungsobjekte zu einem großen Einzelobjekt zusammenzufassen.

Im folgenden Beispiel werden zwei Zeichnungsobjekte zusammengefasst:

Dim Doc As Object
Dim Page As Object
Dim Square As Object
Dim Circle As Object
Dim Shapes As Object
Dim Group As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
Dim NewPos As New com.sun.star.awt.Point
Dim Height As Long
Dim Width As Long

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
Point.x = 3000
Point.y = 3000
Size.Width = 3000
Size.Height = 3000
' Rechteckiges Zeichnungselement Square erstellen
Square = Doc.createInstance("com.sun.star.drawing.RectangleShape")
Square.Size = Size
Square.Position = Point
Square.FillColor = RGB(255,128,128) 
Page.add(Square)
' Kreisförmiges Zeichnungselement Circle erstellen
Circle = Doc.createInstance("com.sun.star.drawing.EllipseShape")
Circle.Size = Size
Circle.Position = Point
Circle.FillColor = RGB(255,128,128)
Circle.FillColor = RGB(0,255,0)
Page.add(Circle)
' Zeichnungselemente Square und Circlezusammenfassen
Shapes = createUnoService("com.sun.star.drawing.ShapeCollection")
Shapes.add(Square)
Shapes.add(Circle)
Group = Page.group(Shapes)
' Zusammengefasste Zeichnungselemente zentrieren
Height = Page.Height
Width = Page.Width
NewPos.X = Width / 2
NewPos.Y = Height / 2
Height = Group.Size.Height
Width = Group.Size.Width
NewPos.X = NewPos.X - Width / 2
NewPos.Y = NewPos.Y - Height / 2
Group.Position = NewPos

Dieser Code erstellt ein Rechteck und einen Kreis und fügt beide in eine Seite ein. Danach wird ein Objekt erstellt, das den Dienst com.sun.star.drawing.ShapeCollection unterstützt und die Add-Methode verwendet, um das Rechteck und den Kreis diesem Objekt hinzuzufügen. Die ShapeCollection wird der Seite mit der Group-Methode hinzugefügt und gibt das eigentliche Group-Objekt zurück, das wie ein einzelnes Shape bearbeitet werden kann.

Wenn die einzelnen Objekte einer Gruppe formatiert werden sollen, wenden Sie die Formatierung vor dem Hinzufügen zur Gruppe an. Objekte, die sich in der Gruppe befinden, können nicht mehr geändert werden.

Drehen und Scheren von Zeichnungsobjekten

Alle in den vorangehenden Abschnitten beschriebenen Zeichnungsobjekte können mit dem Dienst com.sun.star.drawing.RotationDescriptor auch gedreht und geschert werden.

Der Dienst stellt folgende Eigenschaften zur Verfügung:

  • RotateAngle (Long): Drehwinkel in 100stel Grad.

  • ShearAngle (Long): Scherwinkel in 100stel Grad.

Das folgende Beispiel erstellt ein Rechteck und dreht es über die Eigenschaft RotateAngle um 30°.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.RotateAngle = 3000

Page.add(RectangleShape)

Das nächste Beispiel erstellt dasselbe Rechteck wie in dem vorherigen Beispiel, schert es aber stattdessen über die Eigenschaft ShearAngle um 30°.

Dim Doc As Object
Dim Page As Object
Dim RectangleShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size

Point.x = 1000
Point.y = 1000
Size.Width = 10000
Size.Height = 10000

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)
RectangleShape = Doc.createInstance("com.sun.star.drawing.RectangleShape")
RectangleShape.Size = Size
RectangleShape.Position = Point

RectangleShape.ShearAngle = 3000

Page.add(RectangleShape)

Suchen und Ersetzen

Zeichnungsdokumente bieten ähnlich wie Textdokumente eine Funktion zum Suchen und Ersetzen. Diese Funktion ist der in Textdokumenten verwendeten sehr ähnlich. Eine Beschreibung finden Sie in Kapitel 6, Textdokumente. In Zeichnungsobjekten werden die Deskriptor-Objekte zum Suchen und Ersetzen jedoch nicht direkt über das Dokumentobjekt, sondern über die verknüpfte Zeichenebene erzeugt. Das folgende Beispiel verdeutlicht einen Ersetzungsvorgang innerhalb einer Zeichnung:

Dim Doc As Object
Dim Page As Object
Dim ReplaceDescriptor As Object
Dim I As Integer

Doc = StarDesktop.CurrentComponent
Page = Doc.drawPages(0)

ReplaceDescriptor = Page.createReplaceDescriptor()
ReplaceDescriptor.SearchString = "is"
ReplaceDescriptor.ReplaceString = "was"

For I = 0 to Doc.drawPages.Count - 1
   Page = Doc.drawPages(I)
   Page.ReplaceAll(ReplaceDescriptor) 
Next I

Dieser Code erzeugt zuerst über die erste DrawPage des Dokuments einen ReplaceDescriptor und wendet diesen anschließend in einer Schleife auf alle in dem Zeichnungsdokument enthaltenen Seiten an.

Präsentationen

StarOffice-Präsentationen basieren auf Zeichnungsdokumenten. Jede Seite einer Präsentation ist eine Folie. Der Zugriff auf Folien erfolgt wie bei einer Standardzeichnung über die Liste DrawPages des Dokumentobjekts. Der für Präsentationsdokumente zuständige Dienst com.sun.star.presentation.PresentationDocument stellt dazu auch den vollständigen Dienst com.sun.star.drawing.DrawingDocument zur Verfügung.

Arbeiten mit Präsentationen

Über die Zeichnungsfunktionen der Eigenschaft Presentation hinaus verfügt das Präsentationsdokument über ein Präsentationsobjekt, das Zugriff auf die Haupteigenschaften und Steuerungsmechanismen für Präsentationen gewährt. Dieses Objekt bietet beispielsweise eine Methode start, die zum Starten von Präsentationen dient.

Dim Doc As Object
Dim Presentation As Object
   
Doc = StarDesktop.CurrentComponent
Presentation = Doc.Presentation
Presentation.start()

Der Beispielcode erstellt ein Doc-Objekt, das auf das aktuelle Präsentationsdokument verweist, und ermittelt das verknüpfte Präsentationsobjekt. Mit der Methode start() des Objekts wird das Beispiel anschließend gestartet und die Bildschirmpräsentation vorgeführt.

Das Präsentationsobjekt hält folgende Methoden bereit:

  • start: startet die Präsentation.

  • end: beendet die Präsentation.

  • rehearseTimings: startet die Präsentation vom Anfang und ermittelt ihre Laufzeit.

Darüber hinaus stehen folgende Eigenschaften zur Verfügung:

  • AllowAnimations (Boolean): führt Animationen in der Präsentation aus.

  • CustomShow (String): gestattet die Angabe des Namens der Präsentation, so dass der Name innerhalb der Präsentation referenziert werden kann.

  • FirstPage (String): Name der Folie, mit der die Präsentation beginnen soll.

  • IsAlwaysOnTop (Boolean): zeigt das Präsentationsfenster immer als oberstes Fenster am Bildschirm an.

  • IsAutomatic (Boolean): führt die Präsentation automatisch vor.

  • IsEndless (Boolean): startet die Präsentation nach deren Ende wieder von vorne.

  • IsFullScreen (Boolean): startet die Präsentation automatisch im Vollbildmodus.

  • IsMouseVisible (Boolean): zeigt den Mauszeiger während der Präsentation an.

  • Pause (long): der Zeitraum, für den am Ende der Präsentation ein leerer Bildschirm angezeigt wird.

  • StartWithNavigator (Boolean): zeigt bei Beginn der Präsentation das Navigatorfenster an.

  • UsePn (Boolean): zeigt den Mauszeiger während der Präsentation als Stift an.