Seite 1 von 1
FillTransparenceGradient
Verfasst: Do, 10.11.2011 12:50
von poidokan
Hi,
Ich möchte einen roten Kreis erstellen, der nach aussen hin durchsichtig wird. Aber irgendwie klappt das nicht. Der Kreis behält die Standardfüllung...
Vielen Dank für jede Hilfe!
Gerald
Code: Alles auswählen
Sub KreisVerlauf
Dim Doc As Object
Dim oSeite As Object
Dim Kreis As Object
Dim Punkt As New com.sun.star.awt.Point
Dim Groesse As New com.sun.star.awt.Size
Doc = ThisComponent
oSeite = Doc.drawPages(0)
Kreis = Doc.createInstance("com.sun.star.drawing.EllipseShape")
Punkt.x = 6000
Punkt.y = 6000
Groesse.Width = 3000
Groesse.Height = 3000
Kreis.Size = Groesse
Kreis.Position = Punkt
oSeite.add(Kreis)
Kreis.FillTransparenceGradient.Style = RADIAL
Kreis.FillTransparenceGradient.StartColor = RGB(255,0,0)
Kreis.FillTransparenceGradient.EndColor = RGB(0,0,0)
Kreis.FillTransparenceGradient.StartIntensity = 100
Kreis.FillTransparenceGradient.EndIntensity = 0
Kreis.FillTransparenceGradient.XOffset = 50
Kreis.FillTransparenceGradient.YOffset = 50
End Sub
Re: FillTransparenceGradient
Verfasst: Do, 10.11.2011 21:48
von F3K Total
Hi,
versuch es mal so
Code: Alles auswählen
Sub KreisVerlauf
Dim Doc As Object
Dim oSeite As Object
Dim Kreis As Object
Dim Punkt As New com.sun.star.awt.Point
Dim Groesse As New com.sun.star.awt.Size
Doc = ThisComponent
oSeite = Doc.drawPage
Kreis = Doc.createInstance("com.sun.star.drawing.EllipseShape")
Punkt.x = 6000
Punkt.y = 6000
Groesse.Width = 3000
Groesse.Height = 3000
Kreis.Size = Groesse
Kreis.Position = Punkt
oSeite.add(Kreis)
Kreis.FillColor=RGB(255,0,0)
Kreis.FillTransparenceGradientName="Transparency 2"
Kreis.LineStyle=0
End Sub
Gruß R
Re: FillTransparenceGradient
Verfasst: Sa, 12.11.2011 09:27
von poidokan
Vielen Dank schonmal. Kann es sein, dass ich dafür erstmal "Transparency 2" irgendwo erstellen muss?
Im momment bekomme ich com.sun.star.lang.IllegalArgumentException als Fehlermeldung.
Grüsse,
Gerald
Re: FillTransparenceGradient
Verfasst: Sa, 12.11.2011 12:56
von F3K Total
Hallo,
tut mit Leid, ich kann es nicht sagen.
Es scheint so zu sein, dass, wenn man den Transparentverlauf einmal händisch einstellt, der Name "FillTransparenceGradientName" irgendwo im Dokument hinterlegt wird. Z.B. als "Transparency 2", aber auch als Transparency 3", Transparency 4" ... wenn man den Verlauf ändert. Auf diesen Verlauf kann man hinterher mit dem Namen zugreifen, und dann klappt es auch. Aber den Verlauf direkt zuzuweisen will mir auch nicht gelingen.
Gruß R
Re: FillTransparenceGradient
Verfasst: Sa, 12.11.2011 17:08
von poidokan
hmm, ich habe jetzt mit > Format > Fläche diverse Transparenzverläufe erstellt. Aber mit FillTransparencyGradientName erreiche ich keinen davon, gleich ob ich "Transparency 1" oder "Transparency 2" eingebe.
Re: FillTransparenceGradient
Verfasst: Sa, 12.11.2011 17:38
von F3K Total
Hi,
anbei meine Beispieldatei.
Gruß R
Re: FillTransparenceGradient
Verfasst: So, 13.11.2011 10:17
von poidokan
Danke, das läuft jetzt auch bei mir. Bloss die X-Y-Koordinaten enden nicht dort, wo ich hinwill. Kann das daran liegen, dass ich das Ganze in einem Draw-Dokument erstellt habe? Dort entsteht der Kreis, wo er hinsoll.
Re: FillTransparenceGradient
Verfasst: So, 13.11.2011 12:22
von F3K Total
Hallo,
du solltest noch die Verankerung einbauen, z.B. am Absatz:
Code: Alles auswählen
Kreis.AnchorType=0' entspricht: com.sun.star.text.TextContentAnchorType.AT_PARAGRAPH
Gruß R
Re: FillTransparenceGradient
Verfasst: So, 13.11.2011 22:29
von poidokan
Super! Vielen Dank für deine Geduld

Re: FillTransparenceGradient
Verfasst: Mo, 14.11.2011 19:51
von F3K Total
Na,
leider haben wir den Kern der Sache nicht getroffen.
Vielleicht weiß ein/e andere/r hier aus dem Forum, wie man einen Transparentverlauf zuordnet, ohne vorher einmal händisch eingreifen zu müssen?
Gruß R
Re: FillTransparenceGradient
Verfasst: Sa, 19.11.2011 13:55
von DPunch
Aloha
Man kann den TransparentGradient-Style per Makro anlegen und entsprechend verwenden, ala
Code: Alles auswählen
(...)
oSeite.add(Kreis)
oTransGradTable = Doc.CreateInstance("com.sun.star.drawing.TransparencyGradientTable")
Dim oTransGrad as new com.sun.star.awt.Gradient
oTransGrad.StartColor = 16777215
oTransGrad.style = 2
oTransGrad.XOffset = 50
oTransGrad.YOffset = 50
oTransGrad.StartIntensity = 0
oTransGrad.EndIntensity = 100
If oTrGraTable.hasByName("myStyle") Then
oTransGradTable.replaceByName("myStyle",oTransGrad)
Else
oTransGradTable.insertByName("myStyle",oTransGrad)
End If
Kreis.FillTransparenceGradientName="myStyle"
Aber frag mich nicht, warum es nur über Zuweisung eines bereits existierenden Styles zu gehen scheint, dafür hab ich viel zu wenig Ahnung von dem Kram.
Re: FillTransparenceGradient
Verfasst: Sa, 19.11.2011 16:07
von F3K Total
Hallo DPunch,
Klasse, damit geht es, vielen Dank.
Verstanden habe ich das es aber nicht.
Wie bist Du auf das Anlegen des "com.sun.star.drawing.TransparencyGradientTable" gekommen?
Wenn ich das Object xraye sehe ich sowohl "mystyle" als auch "Transparency 1" und "Transparency 2", die Styles, die vorher im gleichen Dokument per Hand angelegt worden sind. Wieso sind die jetzt in dem neuen Objekt? Ich kapier das nicht.
Oder gibt es in meinem Dokument bereits ein "com.sun.star.drawing.TransparencyGradientTable"? Wo kann ich das finden?
Beste Grüße von Rik
Re: FillTransparenceGradient
Verfasst: So, 20.11.2011 17:16
von DPunch
Aloha
F3K Total hat geschrieben:Wie bist Du auf das Anlegen des "com.sun.star.drawing.TransparencyGradientTable" gekommen?
Durch Recherche in
API: Module drawing, dort ist unter anderem der
Service TransparencyGradientTable zu finden, und von dort zum
Service GenericDrawingDocument.
The following services gives access to resources used inside the document and let you add new resources.
(...)
BitmapTable
TransparencyGradientTable
(...)
Wenn man dann die Art und Weise kennt, wie im Dokument der Zugriff auf embedded images gehandled wird (BitmapTable), ergibt sich der Zugriff auf die TransparencyGradientTable von selbst.
F3K Total hat geschrieben:Wieso sind die jetzt in dem neuen Objekt? Ich kapier das nicht.
Weil das neue Objekt den Service zum Zugriff auf sowieso im Dokument vorhandene Elemente darstellt. So wie Dir der DatabaseContext die Services/Interfaces zur Interaktion mit Databanken bereitstellt - die Datenbanken existieren ja auch schon vorher, der DatabaseContext ist nur der Mittelsmann.
Insofern - nein, es gibt die "com.sun.star.drawing.TransparencyGradientTable" nicht im Dokument, wohl aber die definierten Styles, und die der Service ermöglicht Dir die Zugriffe darauf.
Re: FillTransparenceGradient
Verfasst: So, 20.11.2011 19:36
von F3K Total
Hallo DPunch,
vielen Dank für die Erklärung, mir wird wieder einiges klarer.
Ich war auch schon in der API unterwegs, konnte allerdings nix damit anfangen.
Nun werde ich versuchen Deinen Weg nachzuvollziehen, vielleicht komme ich dann beim nächsten Mal von selber drauf.
Beste Grüße von Rik