Seite 1 von 2

Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 13:02
von stevie1401
Ich möchte ein Bild als Fensterhintergrund nehmen.
Dafür benutze ich den PUT-Befehl in anderen Basic-Dialekten. Wie kann ich das hier umsetzen?
Und wie kann ich das Bild der Fenstergröße anpassen?

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 13:13
von RSBasic
http://www.rsbasic.de/aktualisierung/wi ... 3%BCgen.pb

Die Größe des geladenen Bildes kannst du einfach mit ResizeImage() auf deine Fenstergröße anpassen. Die Größe deines Fensters ermittelst du mit WindowWidth() und WindowHeight().

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 13:23
von Kiffi
<OT>

@stevie1401: Kannst Du in Deine Signatur schreiben, dass Du crossplatform - Lösungen suchst?

</OT>

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 16:18
von stevie1401
Das werde ich tun, sobald ich herausgefunden habe, wie ich das machen kann^^
Das obige Beispiel funktioniert leider nicht unter Linux.
Ich suche IMMER Möglichkeiten bzw. Beispiele, die auf allen Plattformen laufen :-)

Es muss ja nicht unbedingt nur eine Lösung sein.
If Windows

endif
If Linux

endif
If OSX

endif

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 16:50
von ts-soft
Bild selber anpassen, siehe Posting von RSBasic!

Code: Alles auswählen

EnableExplicit

InitNetwork()
UseJPEGImageDecoder()

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      Protected *Background
      Protected FixedBox.i
      Protected *Style.GtkStyle
      gdk_pixbuf_render_pixmap_and_mask_(hImage, @*Background, 0, 0)
      *Style = gtk_style_new_()
      *Style\bg_pixmap[0] = *Background
      FixedBox = g_list_nth_data_(gtk_container_get_children_(gtk_bin_get_child_(hWnd)), 0)
      gtk_widget_set_style_(FixedBox, *Style)
    
    CompilerCase #PB_OS_Windows
      Protected hBrush = CreatePatternBrush_(hImage)
      If hBrush
        SetClassLongPtr_(hWnd, #GCL_HBRBACKGROUND, hBrush)
        InvalidateRect_(hWnd, 0, #True)
        UpdateWindow_(hWnd)
      EndIf
      
    CompilerCase #PB_OS_MacOS
      CompilerError "sollte jemand mit Mac hinzufügen!"
  CompilerEndSelect
EndProcedure

If ReceiveHTTPFile("http://realsource.de/images/stargate_atlantis.jpg", GetTemporaryDirectory() + "stargate_atlantis.jpg")
  LoadImage(0, GetTemporaryDirectory() + "stargate_atlantis.jpg")
  OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 450, "")
  SetWindowBackgroundImage(WindowID(0), ImageID(0))
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 17:10
von stevie1401
Das Beispiel von ts-soft funktioniert nicht mit einer Demo-Version, aber ich werde mir wohl demnächst die Vollversion bestellen.
Erst einmal muss ich noch herausfinden, ob ich mein Projekt (DokoClient für www.doko-lounge.de mit PB für alle Plattformen erstellen) mit PB überhaupt umsetzen kann.
Dabei hat erste Priorität das Funktionieren, dann kommt das Aufhübschen ;-)

Erst einmal vielen Dank!

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 17:36
von ts-soft
Ohne API gehts nicht, Vollversion ist anzuraten :wink:
Aber hier schon mal ein Blick darauf:
Bild

Gruß

Thomas

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 19:55
von Shardik
Ich habe ts-softs Beispiel um den Mac-spezifischen Teil ergänzt:

Code: Alles auswählen

EnableExplicit

InitNetwork()
UseJPEGImageDecoder()

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      Protected *Background
      Protected FixedBox.i
      Protected *Style.GtkStyle
      gdk_pixbuf_render_pixmap_and_mask_(hImage, @*Background, 0, 0)
      *Style = gtk_style_new_()
      *Style\bg_pixmap[0] = *Background
      FixedBox = g_list_nth_data_(gtk_container_get_children_(gtk_bin_get_child_(hWnd)), 0)
      gtk_widget_set_style_(FixedBox, *Style)
   
    CompilerCase #PB_OS_Windows
      Protected hBrush = CreatePatternBrush_(hImage)
      If hBrush
        SetClassLongPtr_(hWnd, #GCL_HBRBACKGROUND, hBrush)
        InvalidateRect_(hWnd, 0, #True)
        UpdateWindow_(hWnd)
      EndIf
     
    CompilerCase #PB_OS_MacOS
      CocoaMessage(0, hWnd, "setBackgroundColor:",
        CocoaMessage(0, 0, "NSColor colorWithPatternImage:", hImage))
  CompilerEndSelect
EndProcedure

If ReceiveHTTPFile("http://realsource.de/images/stargate_atlantis.jpg", GetTemporaryDirectory() + "stargate_atlantis.jpg")
  LoadImage(0, GetTemporaryDirectory() + "stargate_atlantis.jpg")
  OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 450, "")
  SetWindowBackgroundImage(WindowID(0), ImageID(0))
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Bild

Ich möchte übrigens noch eine fehlende Quellenangabe von ts-softs Linux-Teil nachreichen, denn es stammt von mir... :mrgreen:
http://www.purebasic.fr/english/viewtop ... 38&start=1

Zu Plattform-unabhängigen Beispielen mit jeweils betriebssystemspezifischen Funktionsaufrufen, die in PureBasic (noch) nicht implementiert sind, habe ich übrigens im englischen Forum eine Sammlung von Lösungen zusammengestellt:
http://www.purebasic.fr/english/viewtop ... 3&start=11

Für MacOS X hat wilbert im englischen Forum eine Lösungssammlung zusammengestellt:
http://www.purebasic.fr/english/viewtop ... 19&t=50795

Und für Linux kann ich nur einen Blick in Charly "Omi" Bauers Sammlung empfehlen:
http://www.chabba.de/ (unter Linux-PureBasic-API)

RSBasic hat in seinem Posting ja schon auf seine riesige WinAPI-Bibliothek für Windows hingewiesen:
http://www.rsbasic.de/winapi-library

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 21:39
von stevie1401
Tolles Forum, danke für eure Hilfe!

Re: Fensterhintergrund ein Bild (Image)

Verfasst: 22.10.2014 21:45
von ts-soft
Naja, wenn Du mir dafür Doppelkopf beibringst 8)