Seite 1 von 1
Hintergrundgrafik
Verfasst: Do, 14.01.2010 13:04
von gigabert
Hallo,
ich möchte in einem Formular (innerhalb odb-Datei) eine Hintergrundgrafik setzen. Die Hintergrundfarbe kann ich ja so ändern:
Code: Alles auswählen
oFormular.StyleFamilies.getByName("PageStyles").getByName("Standard").BackColor = RGB(200,0,0)
Jetzt hab ich mit xray den Wert BackGraphicURL gefunden, von dem ich vermute, dass es die Hintergrundrafik für das jeweilige Formular setzt:
Code: Alles auswählen
oFormular.StyleFamilies.getByName("PageStyles").getByName("Standard").BackGraphicURL = "images/hintergrund1.jpg"
So klappt es jedenfalls nicht. Was mache ich falsch?
Gruss
Bert
Re: Hintergrundgrafik
Verfasst: Do, 14.01.2010 13:23
von Karolus
Hallo
Hast du den vollständigen Pfad nebst:
.... = converttourl( "/home/gigabert/images/hintergrund1.jpg" )
genommen?
Gruß Karo
Re: Hintergrundgrafik
Verfasst: Do, 14.01.2010 13:33
von gigabert
Hallo,
danke für den Tipp. Ich hatte natürlich nur das Verzeichnis und den Dateinamen angegeben. Ich dachte halt, dass es ausreicht, weil alles im gleichen Verzeichnis liegt, wie die odb-Datei. Mit dem kompletten URL-Pfad klappt es nun aber. Man muss aber auch noch die BackGraphicLocation angeben, damit die Grafik über die komplette Fensterfläche gestreckt wird. Folgenden Code hab ich bei pitonyak (AndrewMacro.pdf) gefunden:
Code: Alles auswählen
Sub Main
' First get the Style Families
oStyleFamilies= ThisComponent.getStyleFamilies()
' then get the PageStyles
oPageStyles= oStyleFamilies.getByName("PageStyles")
' then get YOUR page's style
oMyPageStyle= oPageStyles.getByName("Standard")
' then set your background
with oMyPageStyle
.BackGraphicUrl= _
convertToUrl( <pathToYourGraphic> )
.BackGraphicLocation= _
com.sun.star.style.GraphicLocation.AREA
end with
End Sub
Gruss
Bert
Re: Hintergrundgrafik
Verfasst: Do, 14.01.2010 13:42
von gigabert
OK, hab es jetzt noch in eine Sammlung von Makros gelegt, damit ich von anderen Formularen auch darauf zugreifen kann, falls ich es benötige. Ich übergebe dem Makro als Parameter einfach das Formularobjekt, welches die Hintergrundgrafik benötigt:
Code: Alles auswählen
Sub SetBackgroundGraphic(oFrame as Object)
sGrafikLink = ConvertToURL( <kompletter Pfad zum Bild> )
' First get the Style Families
oStyleFamilies= oFrame.getStyleFamilies()
' then get the PageStyles
oPageStyles= oStyleFamilies.getByName("PageStyles")
' then get YOUR page's style
oMyPageStyle= oPageStyles.getByName("Standard")
' then set your background
with oMyPageStyle
.BackGraphicUrl= _
convertToUrl( sGrafikLink )
.BackGraphicLocation= _
com.sun.star.style.GraphicLocation.AREA
end with
End Sub
Gruss
Bert
Re: Hintergrundgrafik
Verfasst: Do, 14.01.2010 15:45
von gigabert
Hab gerade ein neues Problem damit entdeckt: und zwar habe ich nun ein Formular mit mehreren Kontrollelementen. Oben hab ich zwei Option Buttons (eine Gruppe). Wenn der zweite Button ausgewählt wurde, soll die Hintergrundgrafik gesetzt werden. Deshalb hab ich folgendes Makro an die Option Buttons gehangen (Ereignis "Status geändert"):
Code: Alles auswählen
Sub optAuswahl
oForm = ThisComponent.drawpage.forms.getByName("MainForm")
if oForm.getByName("opt1").state = 1 then
MsgBox "1 ausgewählt"
end if
if oForm.getByName("opt2").state = 1 then
SetBackgroundGraphic(ThisComponent)
end if
End Sub
Die Hintergrundgrafik wird auch bei der Auswahl des zweiten Option Buttons eingeblendet. Nur verschwinden dann einige Kontrollelemente (Labels, Option Buttons, Checkboxen), das heisst sie werden unsichtbar. Die Option Buttons erscheinen wieder, wenn ich wieder mit der Maus auf deren Stelle klicke. Die Label bleiben weg. Woran kann das denn liegen? Daran, dass ich dem Sub SetBackgroundGraphic ThisComponent übergebe? Ich hatte es auch schon mit oForm versucht, aber da wurde die Methode getStyleFamilies() nicht erkannt.
Gruss
Bert
Re: Hintergrundgrafik
Verfasst: Do, 14.01.2010 16:39
von DPunch
Ohne Dir das Verhalten erklären zu können, sollte ein
bzw.
nach Einfügen der Grafik das Problem beheben.
Re: Hintergrundgrafik
Verfasst: Do, 14.01.2010 20:15
von gigabert
Hallo,
das klappt ja prima. Ein ThisComponent.Refresh an der richtigen Stelle, und es gibt keine Probleme bei der Anzeige der Hintergrundgrafik. Was mir heute noch nach langem Herumprobieren (vor diesem tollen Tipp) aufgefallen war: Nach dem Klick auf den Option Button wurde ja die Hintergrundgrafik eingeblendet und ein paar Elemente des Formulars verschwanden. Wenn ich nun die Fenstergrösse des angezeigten Formulars veränderte, dann erschienen diese Elemente wieder und alles sah so aus, wie gewünscht. Ausserdem klappte es auch, wenn ich bei einem Beschriftungsfeld (Label) die Hintergrundfarbe von "Standard" auf z.B. weiss setzte, dann blieb das Beschriftungsfeld auch bei einem Einblenden der Hintergrundgrafik.
Vielen Dank...
Gruss
Bert