Hintergrundgrafik

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

Moderator: Moderatoren

gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Hintergrundgrafik

Beitrag 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
Zuletzt geändert von gigabert am Do, 14.01.2010 15:37, insgesamt 2-mal geändert.
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Karolus
********
Beiträge: 7519
Registriert: Mo, 02.01.2006 19:48

Re: Hintergrundgrafik

Beitrag von Karolus »

Hallo
Hast du den vollständigen Pfad nebst:
.... = converttourl( "/home/gigabert/images/hintergrund1.jpg" )
genommen?

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry4b 8GB (64bit)
LO24.8.2.1 flatpak debian 12(bookworm) auf Raspberry4b 8GB (64bit)
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: Hintergrundgrafik

Beitrag 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
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: Hintergrundgrafik

Beitrag 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
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: Hintergrundgrafik

Beitrag 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
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Hintergrundgrafik

Beitrag von DPunch »

Ohne Dir das Verhalten erklären zu können, sollte ein

Code: Alles auswählen

oFrame.Refresh
bzw.

Code: Alles auswählen

thisComponent.Refresh
nach Einfügen der Grafik das Problem beheben.
gigabert
*****
Beiträge: 203
Registriert: Di, 11.08.2009 16:06

Re: Hintergrundgrafik

Beitrag 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
OpenOffice 3.1.1 unter Debian 5.0 und mit PostgreSQL 8.3
Antworten