Seite 1 von 1
per Makro Bild einfügen und Größe und Position setzen
Verfasst: Mo, 23.06.2008 15:35
von sbrunk
Hallo Forum,
ich möchte mit writer in eine Vorlage, die als Briefpapier dienen soll, per Makro ein Bild einfügen und dieses dann in einem definierten Bereich verschieben und die Größe festlegen.
Die Bilder liegen alle als DATEINAME_1.tif, DATEINAME_2.tif usw. vor und ich kann jetzt auch schon ein zufälliges Bild einfügen und dieses in den Hintergrund setzen. Der Rest gelingt mir aber leider nicht:
Code: Alles auswählen
sub nologo_testomania
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
Dim Zufallszahl As Integer
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem -----------Zufallszahl generieren-----------------------------
Randomize
Zufallszahl = Int((9999 * Rnd + 1))
rem ----------------------------------------------------------------------
dim args1(3) as new com.sun.star.beans.PropertyValue
args1(0).Name = "FileName"
args1(0).Value = "file://networkpath/Dateiname" & Zufallszahl & ".tif"
args1(1).Name = "FilterName"
args1(1).Value = "<Alle Formate>"
args1(2).Name = "AsLink"
args1(2).Value = false
args1(3).Name = "Style"
args1(3).Value = "Grafik"
dispatcher.executeDispatch(document, ".uno:InsertGraphic", "", 0, args1())
wait 2500
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:WrapThrough", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SendToBack", "", 0, Array())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:WrapThroughTransparent", "", 0, Array())
end sub
Das Ändern der Position und das Festlegen der Grafik-Höhe auf 10 cm gelingt mir leider nicht. Hat da jemand einen Tipp für mich?
Vielen Dank und Freundliche Grüße aus Mainz
Steffen
.
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Mo, 23.06.2008 20:00
von turtle47
Hi Steffen,
erstmal willkommen hier im Forum.
Versuche es mal mit folgendem Code:
Code: Alles auswählen
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
Sub BildEinfuegen
Doc = ThisComponent
Page = Doc.drawPage
GraphicObjectShape = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
Size.Width = 10000 'Grösse
Size.Height = 10000 'Grösse
GraphicObjectShape.Size = Size
Point.x = 2000 'Position
Point.y = 1500 'Position
GraphicObjectShape.Position = Point
GraphicObjectShape.GraphicURL = "Deine URL zum Bild"
GraphicObjectShape.AdjustBlue = 0
GraphicObjectShape.AdjustGreen = 0
GraphicObjectShape.AdjustBlue = 0
GraphicObjectShape.AdjustContrast = 0
GraphicObjectShape.AdjustLuminance = 0
GraphicObjectShape.Transparency = 30
GraphicObjectShape.AnchorType=0
GraphicObjectShape.Name = "Mein Bild"
GraphicObjectShape.IsFollowingTextFlow (true)
GraphicObjectShape.GraphicColorMode = com.sun.star.drawing.ColorMode.STANDARD
Page.add(GraphicObjectShape)
End Sub
Dieser beinhaltet noch mehrere Einstellmöglichkeiten.
Das ist aber sicherlich nicht schlimm. Oder?
Hilft das weiter?
Jrgen
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Fr, 27.06.2008 09:00
von sbrunk
Klasse!
Vielen vielen Dank,
ich hab´s heute erst wieder testen können, daher die späte Antwort.
Es macht erstmal genau das, was ich wollte.
DANKE
der steffen
.
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Mo, 30.06.2008 09:49
von sbrunk
Vielleicht kannst Du/könnt ihr mir noch einmal weiterhelfen:
Ich möchte eine graue Linie (die schon auf der Seite ist) so verschieben, dass Sie zur zufälligen Position des angesprochenen Bildes passt.
Wie spreche ich diese schon existierende Linie an und wie verschiebe ich sie per Makro?
Vielen Dank
der Steffen
.
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Mo, 30.06.2008 21:59
von turtle47
Hallo Steffen,
sbrunk hat geschrieben:Wie spreche ich diese schon existierende Linie an und wie verschiebe ich sie per Makro?
ansprechen kannst Du die Linie über den Namen oder den Index. Über den Namen ist aber einfacher.
Folgender Code löscht, wenn vorhanden, die Linie mit dem Namen "Meine Linie" und fügt dann wieder eine neue ein
mit dem Namen "Meine Linie". Die Position der Linie kann man ja von der Position des Bildes ableiten.
Code: Alles auswählen
Sub Linie_Zeichnen
oDoc = thisComponent
oGrafiken = oDoc.Drawpage
anzahl = oGrafiken.count
For i = 1 to anzahl
oGrafik = oGrafiken.getByIndex(i-1)
'Objekt entfernen
if oGrafik.Name = "Meine Linie" then oGrafiken.remove(oGrafik)
next i
oLinie = oDoc.createInstance("com.sun.star.drawing.LineShape")
dim oPos3 as new com.sun.star.awt.Point
oPos3.X = 5000 'Abstand von Links
oPos3.Y = 4800 'Abstand von Oben
dim LineSize as new com.sun.star.awt.Size
LineSize.Width = 10000 '100 mm lang
LineSize.Height = 0 'Endpunkt = oPos3.Y + LineSize.Height
with oLinie
.name = "Meine Linie"
.lineColor = RGB(211,211,211)
.lineWidth = 80
.position = oPos3
.Size = LineSize
.AnchorType = com.sun.star.text.TextContentAnchorType.AT_PAGE
.MoveProtect = true
end with
oDoc.Drawpage.add(oLinie)
End Sub
Edit:
Dieser Code verschiebt die vorhandene Linie nur :
Code: Alles auswählen
sub Linie_verschieben
oDoc = thisComponent
oLinien = oDoc.Drawpage
anzahl = oLinien.count
For i = 1 to anzahl
oLinie = oLinien.getByIndex(i-1)
if oLinie.Name = "Meine Linie" then
oLinie.HoriOrientPosition=4000
oLinie.VertOrientPosition=8000
end if
next i
end sub
Kommst Du damit klar?
Jürgen
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Do, 03.07.2008 15:21
von sbrunk
Hallo Jürgen,
danke mal wieder für Deine Antwort.
Ich hab jetzt lange probiert und bin mit Deinen Tipps auch schon sehr weit. Weil ich nicht weiß, wie ich einerm eingefügten Bild sage, dass es im Hintergrund sein soll und nicht den Textfluss stören soll, bin ich jetzt etwas anders vorgegangen:
Ich habe eine Vorlage von Hand so erstellt, wie das Ergebnis am Ende aussehen soll.
Jetzt suche ich über den Namen (Danke für den tollen Tipp!) die Objekte, die ich ändern bzw. verschieben möchte.
Die Größen sind dann schon korrekt, weil die Vorlage das vorgibt, die POSITIONEN muss ich allerdings noch anpassen.
Bei den grauen Linien (ich brauche zwei, wegen zwei verschiedener Kopfzeilen) funktioniert das auch bestens, das vorhandene Bild aber kann ich nicht verschieben.
Hier mein Code:
Code: Alles auswählen
Sub Linie
Dim Zufallszahl As Integer
rem -----------Zufallszahl generieren-----------------------------
Randomize
Zufallszahl = Int((9999 * Rnd + 1))
rem ----------------------------------------------------------------------
oDoc = thisComponent
oGrafiken = oDoc.Drawpage
anzahl = oGrafiken.count
' MsgBox anzahl,0," soviele Grafiken"
For i = 1 to anzahl
oGrafik = oGrafiken.getByIndex(i-1)
'MsgBox oGrafik.Name,0," is der Name"
'-------- LOGO ausrichten ----------
if oGrafik.Name = "nologologo" Then
oGrafik.GraphicURL = "file://universum/projekte/uz_imgNoLogo/noLogo-Vorlagen/noLogo_DRUCK.tif/nologo" & Zufallszahl & ".tif"
'--------HIER MUSS X UND Y DES LOGOS GESETZT WERDEN ----------
End If
'--------Linie auf SEITE EINS ausrichten----------
if oGrafik.Name = "grauesteilseiteeins" Then
dim linePos as new com.sun.star.awt.Point
linePos.X = Zufallszahl 'Abstand von Links
linePos.Y = Zufallszahl 'Abstand von Oben
oGrafik.position = linePos
End If
'--------Linie auf allen uebrigen Seiten ausrichten----------
if oGrafik.Name = "grauesteil" Then
linePos.X = Zufallszahl 'Abstand von Links
linePos.Y = Zufallszahl 'Abstand von Oben
oGrafik.position = linePos
End If
'for-schleife weiterzaehlen
next i
End Sub
Wie ändere ich nun die Position des Bildes ?!
Vielen Dank!
Steffen
.
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Do, 03.07.2008 15:41
von turtle47
sbrunk hat geschrieben:Wie ändere ich nun die Position des Bildes ?!
Na, genau so wie du die Position der Linie änderst:
Code: Alles auswählen
sub Bild_verschieben
oDoc = thisComponent
oBilder = oDoc.Drawpage
anzahl = oBilder.count
For i = 1 to anzahl
oBild = oBilder.getByIndex(i-1)
if oBild.Name = "Grafik1" then
oBild.HoriOrientPosition=1000
oBild.VertOrientPosition=2000
end if
next i
end sub
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Do, 03.07.2008 15:54
von sbrunk
SUPER !!! DANKE !!!
ich packs ja nich: da sitz ich echt lange (!) dran und Du schüttelst das so aus dem Ärmel.
Mein Problem war, dass ich die Grafik immer über oBild.Position.X und oBild.Position.Y ansprechen wollte.
Mit HoriOrientPosition und VertOrientPosition hats jetzt DIREKT funktioniert.
Woher hätte ich wissen können, dass die Variablen so heißen? Ich hab ja auch die Hilfe und google offen gehabt und fleißig befragt - Wenn der Makroeditor mir verfügbare Methoden und setzbare Variablen anzeigen wüde, wäre ich vielleicht schon eher drauf gekommen - so ne Vervollständigungshilfe wär hier sehr praktisch.
VIELEN VIELEN DANK, Du hast mir sehr geholfen!!
der Steffen
.
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Do, 03.07.2008 16:08
von turtle47
Hallo Steffen,
sbrunk hat geschrieben:Woher hätte ich wissen können, dass die Variablen so heißen? Ich hab ja auch die Hilfe und google offen gehabt und fleißig befragt - Wenn der Makroeditor mir verfügbare Methoden und setzbare Variablen anzeigen wüde, wäre ich vielleicht schon eher drauf gekommen - [color=[FF0000]so ne Vervollständigungshilfe wär hier sehr praktisch.[/[olor]
Die gibt es doch.
Schau Dir mal das
X-RAY Tool an.
Damit bekommt man dann zum Beispiel folgende Informationen:

- xRay.jpg (61.87 KiB) 8301 mal betrachtet
Echt Cool ne.
Schöne Grüsse.
Jürgen
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Do, 03.07.2008 16:10
von sbrunk
OOOH JA!
This is a tool that allows OOo Basic programmers to display the properties, methods, services and interfaces provided by an object.
das is in der Tat cool.
der Steffen
.
Re: per Makro Bild einfügen und Größe und Position setzen
Verfasst: Mi, 22.04.2009 20:02
von turtle47
Hallo Christoph,
Christoph89 hat geschrieben:also bei mir funktioniert dieser quellcode zum einfügen von grafiken nicht.
Der Code funktioniert schon, denn sonst würde das Graue Feld nicht angezeigt.
Schau mal unter
Menue > Extras > Optionen > OOo-Writer > Ansicht
ob da [X] Grafiken ond Objekte angehakt ist.
Viel Erfolg.
Jürgen