und "Hallo" ersteinmal. Ich bin neu hier und seit kurzem mit PB beschäftigt.
Ich habe folgendes Problem. Ich benutze eine Prozedur zum Einblenden eines Windows Fensters, welches vorher ein Bild durch ein Imagegadget bekommen hat. Dazu verwende ich die dshowmedia.pbi von Inc. um ein Video in einem weiteren Imagegadget abzuspielen. Die Moviebefehle von PB funktionieren nicht immer einwandfrei mit .wmv (insbesondere Movieseek).
Wenn ich das Bild eingeblendet habe, ist das Video nicht zu sehen. Mir war klar, dass ich das SetWindowLong und dort das #GWL_Exstyle Flag wieder zurücksetzen muss. Das habe ich probiert und dann wird auch das Video einwandfrei in meinem Gadget abgespielt. Offensichtlich mache ich aber etwas falsch, denn will ich nun das Fenster mit Bild wieder ausblenden, wird nicht das Bild ausgeblendet sonder das Fenster wird schwarz und das schwarze Fenster ausgeblendet.
Dieser Fehler tritt "nur" unter Windows XP auf. Unter Windows 7 läuft es einwandfrei. Ich gehe davon aus, dass ich einen falschen Wert in das SetWindowLong schreibe und es deswegen nicht funktioniert.
PB V. 4.40
Anbei eine sehr abgespeckte Version ohne dshowmedia. Das Problem bleibt erhalten. Hat jemand eine Idee?
Code: Alles auswählen
Procedure SetWinTransparency(win,level)
If level>=0 And level<101
hLib = LoadLibrary_("user32.dll")
If hLib
adr = GetProcAddress_(hLib,"SetLayeredWindowAttributes")
If adr
ergebnis=SetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)|$00080000) ; #WS_EX_LAYERED = $00080000
Debug ergebnis
CallFunctionFast(adr,WindowID(win),0,255*level/100,2)
EndIf
FreeLibrary_(hLib)
EndIf
EndIf
EndProcedure
UseJPEGImageDecoder()
LoadImage (0, "gfx/bild.jpg")
OpenWindow(0,0,0,0,0,"Waldhaus", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
setwintransparency (0,0)
x=WindowX(0)
y=WindowY(0)
x=x-1024/2:y=y-768/2
ResizeWindow ( 0, x, y,1024,768)
ImageGadget(0, 0, 0, 1024, 768, ImageID(0))
DisableGadget (0,1)
ButtonGadget(6,950,700,48,48,"")
SetGadgetText(6,"EXIT!")
;einblenden von 0 auf 100%
x=0
Repeat
x=x+1
Delay (5)
SetWinTransparency(0,x)
Until x = 100
;zurücksetzen des GWL_Exstyle Wertes
SetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE,GetWindowLong_(WindowID(win),#GWL_EXSTYLE)& ~#WS_EX_LAYERED)
;auf exit warten
quit=0
Repeat
ev = WindowEvent()
Select ev
Case #PB_Event_Gadget
Select EventGadget()
Case 6:quit=1
EndSelect
EndSelect
Until quit=1
;Bild ausblenden von 100% auf 0
x=100
Repeat
x=x-1
Delay (5)
SetWinTransparency(0,x)
Until x = 0
End