FillTransparenceGradient

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

poidokan
*
Beiträge: 10
Registriert: Di, 22.06.2010 09:41

FillTransparenceGradient

Beitrag 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
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: FillTransparenceGradient

Beitrag 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
poidokan
*
Beiträge: 10
Registriert: Di, 22.06.2010 09:41

Re: FillTransparenceGradient

Beitrag 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
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: FillTransparenceGradient

Beitrag 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
poidokan
*
Beiträge: 10
Registriert: Di, 22.06.2010 09:41

Re: FillTransparenceGradient

Beitrag 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.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: FillTransparenceGradient

Beitrag von F3K Total »

Hi,
anbei meine Beispieldatei.
Gruß R
Dateianhänge
oFillTransparenceGradient.odt
(10.91 KiB) 61-mal heruntergeladen
poidokan
*
Beiträge: 10
Registriert: Di, 22.06.2010 09:41

Re: FillTransparenceGradient

Beitrag 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.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: FillTransparenceGradient

Beitrag 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
poidokan
*
Beiträge: 10
Registriert: Di, 22.06.2010 09:41

Re: FillTransparenceGradient

Beitrag von poidokan »

Super! Vielen Dank für deine Geduld ;)
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: FillTransparenceGradient

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: FillTransparenceGradient

Beitrag 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.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: FillTransparenceGradient

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: FillTransparenceGradient

Beitrag 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.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: FillTransparenceGradient

Beitrag 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
Antworten