Hallo Oscar,
fallbezogen muss man für Größenangabe und auch Positionsangabe u.U. ein sogenanntes Struct deklarieren.
Structs werden auch constants groups genannt:
oder auch:
Die Referenzierung mit dem Präfix
a steht hierbei für Structure.
Siehe hier Konventionen...
Wenn die Variable "aGrafikGroesse" mit Xray (siehe weiter unten) untersucht, erkennt man was sich dahinter verbirgt:
oder auch:
Ergänzend diese API-Websites:
constants group POSSIZE
SIZE Struct Reference
Constant Group Reference POSSIZE
Ich weise hier ausdrücklich daraufhin, dass der Name u.U. in Großbuchtsaben geschrieben werden muss
Ich weiß nicht welche Regel hinter der Großschreibung steht, bin aber selbst schon mal daran verzweifelt,
dass ein Code niicht funktioniert, bis ich dann irgendwo im Netz über die Großschreibung gestolpert bin.
Bei Verwendung von SIZE scheint diese Regelung nicht wichtig zu sein, dennoch schreibe ich SIZE groß.
Hier ein Beispielcode, welchen ich für ein Writer-Dokument erstellt habe:
Code: Alles auswählen
REM ***** BASIC *****
'***************************************************************************
' Dieser Code erfasst ein markiertes Bild, schneidet es zu, ändert
' dessen Größe und verschiebt das Bild an seine Zielposition.
'***************************************************************************
Sub PicDaten
Dim oDoc as object
Dim oShape as Object
Dim oPage as Object
Dim oGraphicCrop as Object
Dim oSel as Object
Dim nIndexDraw as Integer
Dim i as Integer
oDoc=ThisComponent
' aktuelle Markierung/ Selektion erfassen
oSel = oDoc.CurrentSelection
' Prüfen ob sich der Inhalt der Selektion ein Grafikobjet ist
' Wenn kein Bild, dann Programm beenden
If oSel.ImplementationName <> "SwXTextGraphicObject" Then
Exit Sub
End If
' xray oSel
' Dem aktuellen Bild einen vorläufigen Namen zuweisen,
' zweck späterer Identifikation
oSel.setName("Post")
oPage = oDoc.drawPage
' xray oPage
' Objektzuweisung für das gewünschtes Bild
for i = 0 to oPage.count
oShape = oPage.getByindex(i)
if oshape.name = "Post" then
nIndexDraw=i
exit for
End if
next i
'xray oShape(nIndexDraw)
'------------------- Daten zuschneiden ------------------------------------------------------
oGraphicCrop = oShape(nIndexDraw).GraphicCrop
' Zuschnitte festlegen
With oGraphicCrop
.Top = 8489
.Bottom = 6200
.Left = 10000
.Right = 2850
End with
'xray oGraphicCrop
' Daten entsprechend der obigen Parameter zuschneiden
oShape(nIndexDraw).GraphicCrop = oGraphicCrop
'--------------------------------------------------------------------------------------------
'------------------- Daten Größe ändern ------------------------------------------------------
Dim nB as Long
Dim nH as Long
' Variablen für die Daten Größe
nB=2.35*1000 ' Höhe Daten 2,35
nH=0.86*1000 ' Breite Daten 0,86
' Größenobjekt erstellen
Dim aGrafikGroesse As new com.sun.star.awt.SIZE
' Größenzuweisung
With aGrafikGroesse
.height = nH
.width = nB
End With
'Größe entsprechend der obigen Parameter zuschneiden und zuweisen
oShape(nIndexDraw).setSize(aGrafikGroesse)
'--------------------------------------------------------------------------------------------
'------------------- Daten an Zielposition verschieben ---------------------------------------
With oShape(nIndexDraw)
.HoriOrientPosition=7600 ' = cm * 1000
.VertOrientPosition=6300-860 ' = cm * 1000 [840 = 0,84cm = relative Höhe des Bildes]
End With
'--------------------------------------------------------------------------------------------
'----------------- Daten einen neuen Bildnamen geben -------------------------------------
' Bildname = Daten & _ & Zufallszahl (Integer aus Datum)
' das heutige Datum erfassen
Dim xD as Date
Dim nZufall as Long
xD=Date
' Zufallszahl berechnen
nZufall = Int((xD * Rnd) -2)
' dem markierten Objekt einen neuen Namen zuweisen.
oShape(nIndexDraw).Name="Daten_" & nZufall
End Sub
Damit der Code funktioniert, musst Du ein Bild in einem Writerdokument markieren
Im Code findest Du auskommentierte Zeilen wie etwa:
Xray ist ein Codeinpektions-Tool.
Es handelt sich hierbei um eine Writer-Datei, inklusive deutschsprachige Dokumentation.
X-Ray tool von Bernard Marcelly
Wichtig für den Anfang sind die Seiten 5 und 7
- Auf Seite 5 findest Du Schaltflächen, mit denen Du Xray de/ installieren kannst.
- Auf Seite 7 wird beschrieben, wie Du Xray in Dein Office integrieren kannst, bzw.
was erforderlich ist wie Xray standardmäßig bei Officestart geladen werden kann.
Diesen Code verwende ich zum Laden von Xray und der Bibliothek "Tools"
Code: Alles auswählen
REM ***** BASIC *****
Option Explicit
REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM BASIC-IDE:
REM 1) LoadingLibraries
REM
REM ════════════════════════════════════════════════════════════════════════════════════════════════════
REM (1)
REM Bibliotheken bie LibreOffice-Start laden
Sub LoadingLibraries
' Hier in der Basic-IDE -> Objektkatalog
' LibreOffice Makros & Dialoge -> Tools
Globalscope.BasicLibraries.LoadLibrary ( "Tools")
'https://extensions.openoffice.org/en/project/mri-uno-object-inspection-tool
' Fuer Libreoffice: https://extensions.openoffice.org/en/projectrelease/mri-uno-object-inspection-tool-133
REM Globalscope.BasicLibraries.LoadLibrary ( "MRILib")
' https://wiki.openoffice.org/wiki/DE/Makro_Basic_Tutorial
'http://berma.pagesperso-orange.fr/Files_en/XrayTool60_de.odt
GlobalScope.BasicLibraries.LoadLibrary("XrayTool")
End Sub
Info zur Bibliothek "Tools"
In dieser Bibliothek sind vorgefertigte Funktionen, auf die man in seinem eigenen Code zugreifen kann:
Basic IDE → Objektkatalog → LibreOffice Makros & Dialoge → Tools
Ich nutze relativ häufig Funktionen aus dem Modul "Strings"
U.a. ist es bei Datei(namen)-Operationen sehr hilfreich: