PanelGadget auf Hintergrundbild: Transparenzprobleme

Für allgemeine Fragen zur Programmierung mit PureBasic.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

PanelGadget auf Hintergrundbild: Transparenzprobleme

Beitrag von SBond »

Hi Leute,

gibt es eine Möglichkeit den Hintergrund eines PanelGadgets transparent zu machen?
Ich bin nicht in der Lage das Problem zu lösen.

Ich denke es wird über eine API-Funktion möglich sein, aber ich habe dahingehend noch zu wenig Erfahrung.
Könnt ihr mir helfen?

oben: wie es jetzt ist; unten: so würde ich es gerne haben
Bild


aktueller Beispielcode.

Code: Alles auswählen

UsePNGImageDecoder()
UsePNGImageEncoder()

Enumeration
	#GUI
	#Reiter
	#Image
	#Canvas
EndEnumeration

OpenWindow(#GUI, 0, 0, 400, 200, "Test-GUI", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

LoadImage(#Image, "test.png")
CanvasGadget(#Canvas,0, 0, 400, 200)
StartDrawing(CanvasOutput(#Canvas))
DrawAlphaImage(ImageID(#Image), 0, 0) 
StopDrawing()
DisableGadget( #Canvas, #True)

PanelGadget(#Reiter, 20, 20, 360,160)
AddGadgetItem(#Reiter, -1, "Reiter 1")
AddGadgetItem(#Reiter, -1, "Reiter 2")
AddGadgetItem(#Reiter, -1, "Reiter 3")

Repeat
	
	Select WaitWindowEvent(100)
		
	Case #PB_Event_CloseWindow
		End

	EndSelect

ForEver
lg
SBond
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
Bisonte
Beiträge: 2476
Registriert: 01.04.2007 20:18

Re: PanelGadget auf Hintergrundbild: Transparenzprobleme

Beitrag von Bisonte »

Da es unter Windows laufen soll (entnehme ich aus deinem Wunsch auch API einsetzen zu wollen), kann ich Dir
empfehlen, das Hintergrundbild eines Fensters nicht mit einem Canvas zu erstellen. Da Purebasic keine z-Order bei Gadgets
kennt, geht es entweder nur mit dem DisableGadget "Trick" eines ImageGadgets oder per WinAPI mit

Code: Alles auswählen

Procedure SetWindowBackGround(Window, Image)
  
  Protected hBrush
  Protected hImage = #False
  
  If IsWindow(Window)
    hWnd = WindowID(Window)
    If IsImage(Image)
      hImage = ImageID(Image)
    Else
      If Image : hImage = Image : EndIf
    EndIf
    
    If hWnd And hImage
      hBrush = CreatePatternBrush_(hImage)
      SetClassLongPtr_(hWnd, #GCL_HBRBACKGROUND, hBrush)
      InvalidateRect_(hWnd, #Null, #True)
      UpdateWindow_(hWnd)
      ProcedureReturn #True
    EndIf
  EndIf

  ProcedureReturn #False
  
EndProcedure
Wobei ich die API Methode vorziehe. Ansonsten kenne ich gerade keine (auch in RSBasics WINAPI Library nichts gefunden)
Möglichkeit, den PanelGadget-Hintergrund auf Trasnparent zu setzen. Daher mein Vorschlag ein Canvas Gadget für die Tabs zu nehmen,
die dann einen Container ein/ausblenden. So ähnlich wie Stargate's TabBarGadget (<- suchbegriff) wie du sie auch in der IDE
laufend benutzt.

Dazu muss man beim Canvas halt immer nur die Groesse anzeigen (ResizeGadget), die gerade durch die Tabs gebraucht wird,
oder man kopiert per GrabImage den bereich des Hintergrundbildes in das Canvas, den es überdeckt.

(Achtung: Das CanvasGadget muss immer mit der maximalen Grösse erstellt werden (die man später per ResizeGadget() verkleinern kann,
da es zwar möglich ist ein Canvas kleiner zu machen, aber nicht grösser (Es ist zwar möglich, aber es wird nicht angezeigt.)
(im englischen Forum ist eine Bugmeldung)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: PanelGadget auf Hintergrundbild: Transparenzprobleme

Beitrag von SBond »

super ;)

das sieht ja ganz interessant aus :)
danke dir.

..ach ja... kann es sein dass abends immer die Foren offline sind?


lg
SBond
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PanelGadget auf Hintergrundbild: Transparenzprobleme

Beitrag von RSBasic »

Nein, die Foren waren bis jetzt immer rund um die Uhr (bzw. 9-0 Uhr auf jeden Fall) online.
Vielleicht hast du dieses Problem.
Wenn ja: Proxy nutzen, z.B. mit Hilfe eines Browser-Addons.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: PanelGadget auf Hintergrundbild: Transparenzprobleme

Beitrag von SBond »

gut zu wissen ;)

vielen Dank

lg
SBond
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: PanelGadget auf Hintergrundbild: Transparenzprobleme

Beitrag von SBond »

Hi Leute,

also "TabBarGadget" von STARGÅTE war genau das richtige ;)
Allerdings muss es noch etwas angepasst werden. Ich habe es erstmal 'quick and dirty' angepasst, um es zu testen.

Bild

Das Prinzip ist ganz einfach...
Ich kopiere einfach aus dem Hintergrundbild die Bereiche aus und zeichne diese dann in die jeweiligen Canvas-Gadgets ein.
sieht in etwa so aus:

Code: Alles auswählen

LoadImage(#Wallpaper, "Wallpaper.png")
...
GrabImage(#Wallpaper, #TabBackgroundImage, GadgetX(#Panel), GadgetY(#Panel), GadgetWidth(#Panel), GadgetHeight(#Panel))
DrawAlphaImage(ImageID(#TabBackgroundImage), 0, 0) 
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PanelGadget auf Hintergrundbild: Transparenzprobleme

Beitrag von RSBasic »

Gute Idee und sieht gut aus. :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten