Seite 1 von 1

[erledigt] s. übersetzer f. Code transparentes PNG Fenster

Verfasst: 01.10.2014 18:27
von udg
Hallo,

dieser Code funktioniert in PB 5.30 wie er soll.
nun arbeite ich jedoch mit der v4.61

wäre jemand so nett mir diesen für die v4.61 anzupassen? Mein bisheriger PNG Code für solche Sachen ist um Ellen länger und spielt sich immer in 2 Fenstern ab: Child + Parent

Danke für Hilfe

Code: Alles auswählen

UsePNGImageDecoder()

DataSection
        Interface: ; bezeichnet das sprite im speicher
IncludeBinary "interface_test.png" ; Lade ein PNG mit Alphatransparenz
        Interface_End: ; bezeichnet das sprite im speicher
EndDataSection 

Define pic_1 = CatchImage(#PB_Any, ?Interface, ?Interface_End - ?Interface)  ; Hintergrund Bild aus dem Speicher laden

OpenWindow(0, 0, 0, ImageWidth(pic_1), ImageHeight(pic_1), "", #PB_Window_ScreenCentered)
SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) |

#WS_EX_LAYERED)
hDC = StartDrawing(ImageOutput(pic_1))
  GetObject_(ImageID(pic_1), SizeOf(BITMAP), @BitmapInfo.BITMAP)
  ContextOffset.POINT
  BlendMode.BLENDFUNCTION
  BlendMode\SourceConstantAlpha = 255
  BlendMode\AlphaFormat = 1
  UpdateLayeredWindow_(WindowID(0), 0, 0, @BitmapInfo+4, hDC, @ContextOffset, 0,

@BlendMode, 2)
StopDrawing()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
  
;////////////////////////////////////////
;-Fenster mit Maus verschieben
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
;////////////////////////////////////////
ForEver

Re: suche übersetzer für Code transparentes PNG

Verfasst: 01.10.2014 18:37
von NicTheQuick
Ich denke es liegt an dem Label "Interface", weil das ein Schlüsselwort ist, was vom Compiler für Interfaces benutzt wird.
Seit V5.00+ irgendwann kam wieder eine Änderung wegen Doppelpunkten, sodass es ab da wieder funktioniert.

Ungetestet:

Code: Alles auswählen

 UsePNGImageDecoder()

DataSection
        Label_Interface: ; bezeichnet das sprite im speicher
IncludeBinary "interface_test.png" ; Lade ein PNG mit Alphatransparenz
        Label_Interface_End: ; bezeichnet das sprite im speicher
EndDataSection

Define pic_1 = CatchImage(#PB_Any, ?Label_Interface, ?Label_Interface_End - ?Label_Interface)  ; Hintergrund Bild aus dem Speicher laden

OpenWindow(0, 0, 0, ImageWidth(pic_1), ImageHeight(pic_1), "", #PB_Window_ScreenCentered)
SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) |

#WS_EX_LAYERED)
hDC = StartDrawing(ImageOutput(pic_1))
  GetObject_(ImageID(pic_1), SizeOf(BITMAP), @BitmapInfo.BITMAP)
  ContextOffset.POINT
  BlendMode.BLENDFUNCTION
  BlendMode\SourceConstantAlpha = 255
  BlendMode\AlphaFormat = 1
  UpdateLayeredWindow_(WindowID(0), 0, 0, @BitmapInfo+4, hDC, @ContextOffset, 0,

@BlendMode, 2)
StopDrawing()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
 
;////////////////////////////////////////
;-Fenster mit Maus verschieben
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
;////////////////////////////////////////
ForEver 

Re: suche übersetzer für Code transparentes PNG

Verfasst: 02.10.2014 02:41
von udg
Danke Dir :)

leider funktioniert es nicht. PB meckert hier rum:
SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) |

Syntax error

Ich denke mir mal, dass PB4.61 diesen Befehl nicht kennt: SetWindowLong_ ?

Grüße

EDIT:

Habe es hinbekommen. Läuft nun unter PB 4.61

Code: Alles auswählen

UsePNGImageDecoder()

DataSection
        Label_Interface: ; bezeichnet das sprite im speicher
IncludeBinary "interface_test.png" ; Lade ein PNG mit Alphatransparenz
        Label_Interface_End: ; bezeichnet das sprite im speicher
EndDataSection


Define pic_1 = CatchImage(#PB_Any, ?Label_Interface, ?Label_Interface_End - ?Label_Interface)  ; Hintergrund Bild aus dem Speicher laden

OpenWindow(0, 0, 0, ImageWidth(pic_1), ImageHeight(pic_1), "", #PB_Window_ScreenCentered)
SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) |#WS_EX_LAYERED)

hDC = StartDrawing(ImageOutput(pic_1))
  GetObject_(ImageID(pic_1), SizeOf(BITMAP), @BitmapInfo.BITMAP)
  ContextOffset.POINT
  BlendMode.BLENDFUNCTION
  BlendMode\SourceConstantAlpha = 255
  BlendMode\AlphaFormat = 1
  UpdateLayeredWindow_(WindowID(0), 0, 0, @BitmapInfo+4, hDC, @ContextOffset, 0, @BlendMode, 2)
  
  StopDrawing()

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
  EndSelect
 
;////////////////////////////////////////
;-Fenster mit Maus verschieben
SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
;////////////////////////////////////////
ForEver

Re: suche übersetzer für Code transparentes PNG

Verfasst: 02.10.2014 03:28
von STARGÅTE
Nö, aber du hast da n Zeilenumbruch drin der nicht sein darf, denn hinterm dem | fehlt ja das aus der nächsten Zeile:

Code: Alles auswählen

SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) |

#WS_EX_LAYERED)
besser:

Code: Alles auswählen

SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_LAYERED)

Re: suche übersetzer für Code transparentes PNG

Verfasst: 02.10.2014 03:46
von udg
jo , habs schon bemerkt und korrigiert.

Code: Alles auswählen

UpdateLayeredWindow_(WindowID(0), 0, 0, @BitmapInfo+4, hDC, @ContextOffset, 0,

@BlendMode, 2)
war auch falsch

muss:

Code: Alles auswählen

UpdateLayeredWindow_(WindowID(0), 0, 0, @BitmapInfo+4, hDC, @ContextOffset, 0, @BlendMode, 2)
danke

schon interessant, dass PB 5.30 das so annimmt mit den unvollständigen Codezeilen

Re: suche übersetzer für Code transparentes PNG

Verfasst: 02.10.2014 07:31
von Bisonte
udg hat geschrieben:... schon interessant, dass PB 5.30 das so annimmt mit den unvollständigen Codezeilen...
PB 5.10 - History hat geschrieben:- Hinzugefügt: Zeilenfortsetzungs-Funktion, mit folgenden Operanden: ',' '|' '+' And Or XOr
It's not a bug... it's a feature ;)

Re: [erledigt] s. übersetzer f. Code transparentes PNG Fenst

Verfasst: 02.10.2014 08:59
von RSBasic
STARGÅTE hat geschrieben:besser:

Code: Alles auswählen

SetWindowLong_(WindowID(0), #GWL_EXSTYLE, GetWindowLong_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_LAYERED)
Noch besser:

Code: Alles auswählen

SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_LAYERED)

Re: [erledigt] s. übersetzer f. Code transparentes PNG Fenst

Verfasst: 02.10.2014 17:22
von udg
Ich bin froh, dass ich halbwegs was zu Stande bekomm mit Version 4.61. Das Problem für mich ist, dass sich mit jeder neuen Version etwas ändert (nicht schlimm und gut) und verändert oder ersetzt/ weggelassen wird, somit ältere Befehle nicht mehr unterstützt werden oder Codezeilen komplett umgeschrieben werden müssen :/

Für mich als Nicht Pro, schwierig. Darum verharre ich in meiner v4.61

gruß

Re: [erledigt] s. übersetzer f. Code transparentes PNG Fenst

Verfasst: 02.10.2014 17:28
von ts-soft
Dafür gibt es doch jetzt LTS Versionen. Vielleicht doch mal die 5.2x LTS probieren, da ist der Support länger garantiert
(keine Syntax-Änderungen, keine neue Funktionen nur Fehlerbereinigung).

Gruß
Thomas

Re: [erledigt] s. übersetzer f. Code transparentes PNG Fenst

Verfasst: 02.10.2014 17:30
von udg
okay danke. lade ich gleich mal runter, sind ja so viele Versionen verfügbar.