Aktuelle Zeit: 12.12.2019 12:36

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 28.10.2014 13:43 
Offline

Registriert: 19.10.2014 15:51
Schaue einfach mal auf unserer kleinen Plattform rein. Anfänger (und solche, die es werden wollen) sind immer herzlich willkommen.

Nun habe ich endlich die Vollversionen und konnte eure Hintergrundbeispiele unter Windows und Linux testen.
Prima!!

_________________
Ich programmiere plattformunabhängig und suche immer Lösungen für alle Plattformen.
Win 7/10, Linux Mint Cindy 3 (Debian), Mint 18.3 / 19.1


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 24.10.2015 13:44 
Offline
Benutzeravatar

Registriert: 25.01.2005 12:19
Ich habe den Linux-spezifischen Teil so angepaßt, dass er sowohl mit Gtk2 und Gtk3 funktioniert und in PB 5.31 und 5.40 im ASCII- und Unicode-Modus problemlos läuft (getestet unter Ubuntu 14.04 x64 mit KDE):
Code:
EnableExplicit

InitNetwork()
UseJPEGImageDecoder()

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      Protected Child.I
      Protected ChildrenList.I
      Protected *Name
      Protected Widget.I = gtk_bin_get_child_(hWnd)
     
      Repeat
        ChildrenList = gtk_container_get_children_(Widget)
        Child = g_list_nth_data_(ChildrenList, 0)
       
        If Child = 0
          Break
        Else
          *Name = gtk_widget_get_name_(Child)
          Widget = Child
        EndIf
      Until PeekS(*Name, -1, #PB_UTF8) = "GtkFixed"
     
      If Child
        gtk_fixed_put_(Child, gtk_image_new_from_pixbuf_(hImage), 0, 0)
        gtk_widget_show_all_(hWnd)
      EndIf
   
    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, 100, 100, 800, 450, "Window with background image")
  SetWindowBackgroundImage(WindowID(0), ImageID(0))
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


Zuletzt geändert von Shardik am 24.10.2015 15:10, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 24.10.2015 14:36 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
:allright:

Kannst Du das in dem Tipps & Tricks Forum posten, danke!

_________________
PureBasic 5.71 | SpiderBasic 2.21 | Windows 10 Pro (x64) | Linux Mint 19.2 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 24.10.2015 14:40 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Vielen Dank :allright:

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 24.10.2015 14:42 
Offline

Registriert: 25.03.2013 09:59
Hallo Shardik,

ich hab mich heut Früh rangemacht rauszufinden, was denn das PB unter Linux gtk2 und gtk3 denn nun wirklich einfärbt bei den Fensterfarben und Bildern, da API-Funktionen ja nicht durchkommen.
Ich hab mich vom einem Gadget zum 1. GtkFixed runtergehangelt und gemerkt dass man dies umfärben und auch durchsichtig machen kann. Darunter kam die alte original API-Fensterfarbe zum Vorschein die dann auch unter gtk3 sichtbar zu manipulieren ist. :lol:

Morgen wollte ich mich mal von der Fensterseite zum 1. GtkFixed durchhangeln und für die ganzen PB- u. API-Färbereien und Image-Einpflanzung exemplarische gtk2- und gtk3-Codes zu erstellen.

Danke, dass Du immer schneller bist und schon vorgehangelt hast! :roll:

Charly

_________________
PureBasic Linux-API-Library: http://www.chabba.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 03.01.2017 15:32 
Offline

Registriert: 30.03.2014 19:57
Wohnort: 18314 Löbnitz
Das mit dem Windowshintergrund geht ja gut, doch wie bekomme ich den texthintergrund(textgadget) transparent ? Habe mal beide winapi kombiniert, aber das geht nicht.

Eine Idee warum und wie könnte man das richtig machen ? Fordergrundfarbe textgadget wählbar/ Hintergrundfarbe transparent. (windos, linux, mac)

Code:
EnableExplicit

UseJPEGImageDecoder()

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      Protected Child.I
      Protected ChildrenList.I
      Protected *Name
      Protected Widget.I = gtk_bin_get_child_(hWnd)
     
      Repeat
        ChildrenList = gtk_container_get_children_(Widget)
        Child = g_list_nth_data_(ChildrenList, 0)
       
        If Child = 0
          Break
        Else
          *Name = gtk_widget_get_name_(Child)
          Widget = Child
        EndIf
      Until PeekS(*Name, -1, #PB_UTF8) = "GtkFixed"
     
      If Child
        gtk_fixed_put_(Child, gtk_image_new_from_pixbuf_(hImage), 0, 0)
        gtk_widget_show_all_(hWnd)
      EndIf
   
    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

Procedure WCB(WindowID,  Message, wParam, lParam)
  Protected Result
  Result = #PB_ProcessPureBasicEvents
  Select Message
   Case #WM_CTLCOLORSTATIC
      Select lparam
      Case GadgetID(1)
         SetBkMode_(wparam,#TRANSPARENT)
         ProcedureReturn GetStockObject_(#HOLLOW_BRUSH)
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure

  LoadImage(0, GetCurrentDirectory()+"Image\black-background.jpg");-Pfad anpassen
  OpenWindow(0, 100, 100, 800, 450, "Window with background image")
  TextGadget(1, 20, 20, 100, 20, "Text transparent")
  SetWindowBackgroundImage(WindowID(0), ImageID(0))
  SetWindowCallback(@WCB(), 0)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

_________________
Purebasic 5.51


Zuletzt geändert von schleicher am 03.01.2017 15:40, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 03.01.2017 15:39 
Offline
Admin
Benutzeravatar

Registriert: 05.10.2006 18:55
Wohnort: Berlin
Code:
SetWindowBackgroundImage(WindowID(0), ImageID(0))
SetWindowCallback(@WCB(), 0)

Bild
Code:
SetWindowCallback(@WCB(), 0)
SetWindowBackgroundImage(WindowID(0), ImageID(0))

_________________
BildBildBildBild BildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 03.01.2017 16:03 
Offline

Registriert: 30.03.2014 19:57
Wohnort: 18314 Löbnitz
ah ja. das funktioniert . Jedoch die Textfarbe setzen mit SetGadgetColor(1, #PB_Gadget_FrontColor, textcolor) geht dann nicht mehr. Habe das mit winapi gelöst bekommen.
Muss das ganze nun noch für linux und mac rausfinden.
Code:
EnableExplicit

Global textcolor=RGB(253, 255, 0)
InitNetwork()
UseJPEGImageDecoder()

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      Protected Child.I
      Protected ChildrenList.I
      Protected *Name
      Protected Widget.I = gtk_bin_get_child_(hWnd)
     
      Repeat
        ChildrenList = gtk_container_get_children_(Widget)
        Child = g_list_nth_data_(ChildrenList, 0)
       
        If Child = 0
          Break
        Else
          *Name = gtk_widget_get_name_(Child)
          Widget = Child
        EndIf
      Until PeekS(*Name, -1, #PB_UTF8) = "GtkFixed"
     
      If Child
        gtk_fixed_put_(Child, gtk_image_new_from_pixbuf_(hImage), 0, 0)
        gtk_widget_show_all_(hWnd)
      EndIf
   
    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

Procedure WCB(WindowID,  Message, wParam, lParam)
  Protected Result
  Result = #PB_ProcessPureBasicEvents
  Select Message
   Case #WM_CTLCOLORSTATIC
      Select lparam
      Case GadgetID(1)
        SetBkMode_(wparam,#TRANSPARENT)
        SetTextColor_(wParam, textcolor)
         ProcedureReturn GetStockObject_(#HOLLOW_BRUSH)
      EndSelect
  EndSelect
  ProcedureReturn Result
EndProcedure

  LoadImage(0, GetCurrentDirectory()+"Image\black-background.jpg");-Pfad anpassen
  OpenWindow(0, 100, 100, 800, 450, "Window with background image")
  TextGadget(1, 20, 20, 100, 20, "Text transparent")
 
  SetWindowCallback(@WCB(), 0)
  SetWindowBackgroundImage(WindowID(0), ImageID(0))
   ;SetGadgetColor(1, #PB_Gadget_FrontColor, textcolor)

  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

_________________
Purebasic 5.51


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 30.05.2019 21:15 
Offline
Benutzeravatar

Registriert: 25.01.2005 12:19
Mein obiges Multiplattform-Beispiel funktioniert nicht mehr, weil die zum Download des Testbildes verwendete Website realsource.de von ts-soft und edel wohl aufgegeben wurde. Außerdem musste der Linux-Teil angepasst werden, weil auf Grund von internen Änderungen in der Linux-Version von PureBasic in GTK3 kein GtkFixed mehr als Container verwendet wird sondern GtkLayout. Das folgende Beispiel funktioniert wieder auf allen Plattformen und in Linux mit GTK2 und GTK3:
Code:
EnableExplicit

InitNetwork()
UsePNGImageDecoder()

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      Protected Container.I
 
      Container = g_list_nth_data_(gtk_container_get_children_(0 +
        gtk_bin_get_child_(WindowID(0))), 0)
   
      If Container
        If PeekS(gtk_widget_get_name_(Container), -1, #PB_UTF8) = "GtkFixed"
          gtk_fixed_put_(Container, gtk_image_new_from_pixbuf_(hImage), 0, 0)
        Else
          gtk_layout_put_(Container, gtk_image_new_from_pixbuf_(hImage), 0, 0)
        EndIf

        gtk_widget_show_all_(hWnd)
      EndIf
   
    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 LoadImage(0, #PB_Compiler_Home + "examples/3d/Data/Textures/spheremap.png")
  OpenWindow(0, 100, 100, ImageWidth(0), ImageHeight(0),
    "Window with background image")
  SetWindowBackgroundImage(WindowID(0), ImageID(0))
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Fensterhintergrund ein Bild (Image)
BeitragVerfasst: 22.06.2019 09:50 
Offline
Benutzeravatar

Registriert: 24.11.2004 13:12
Wohnort: Germany
Kleines Update...
Nach Verwendung von "gtk_container_get_children" muss noch die "g_list" wieder freigegeben werden.
Kleine Bugs entfernt :wink:

Update v1.02
Code:
;-TOP
; Comment: SetWindowBackgroundImage
; Authors: ts-soft (Windows), Shardik (Linux , masOS), mk-soft
; Version: v1.02
; Create : ??.??.2014
; Update : 22.06.2019
; Link   : https://www.purebasic.fr/german/viewtopic.php?f=16&t=28467&start=10#p352932

; OS     : All

EnableExplicit

InitNetwork()
UsePNGImageDecoder()

Procedure SetWindowBackgroundImage(hWnd.i, hImage.i)
  CompilerSelect #PB_Compiler_OS
    CompilerCase #PB_OS_Linux
      Protected Widget.I, Container.I, Layer.I
     
      Widget.I = gtk_bin_get_child_(hWnd)
      Container = gtk_container_get_children_(Widget)
      Layer = g_list_nth_data_(Container, 0)
      g_list_free_(Container)
      If Layer
        If PeekS(gtk_widget_get_name_(Layer), -1, #PB_UTF8) = "GtkFixed"
          gtk_fixed_put_(Layer, gtk_image_new_from_pixbuf_(hImage), 0, 0)
        Else
          gtk_layout_put_(Layer, gtk_image_new_from_pixbuf_(hImage), 0, 0)
        EndIf
       
        gtk_widget_show_all_(hWnd)
      EndIf
     
    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

; ----

;- Example
CompilerIf #PB_Compiler_IsMainFile
 
  If LoadImage(0, #PB_Compiler_Home + "examples/3d/Data/Textures/spheremap.png")
    OpenWindow(0, 100, 100, ImageWidth(0), ImageHeight(0),
               "Window with background image")
    SetWindowBackgroundImage(WindowID(0), ImageID(0))
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
 
CompilerEndIf

_________________
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul / OPC-Helper DLL
PB v3.30 / v5.4x - OS Mac Mini OSX 10.xx / Window 10 Pro. (X64) /Window 7 Pro. (X64) / Window XP Pro. (X86) / Ubuntu 14.04
Downloads auf Webspace


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite Vorherige  1, 2

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye