Hallo,
um das vielleicht besser zu verstehen, habe ich auf die schnelle etwas Code geschrieben, der dann auch läuft, damit jeder sieht was ich meine.
Code: Alles auswählen
Procedure SetWinTransparency (WinHandle.l, Transparency_Level.l)
SetWindowLong_(WinHandle,#GWL_EXSTYLE,$00080000) ; #WS_EX_LAYERED = $00080000
SetLayeredWindowAttributes_(WinHandle,0,Transparency_Level,2) ;
EndProcedure
Procedure ShowBild(File$)
LoadImage(0, File$)
ResizeWindow(ImageWidth(), ImageHeight())
MoveWindow((GetSystemMetrics_(#SM_CXSCREEN)/2)-(ImageWidth()/2), (GetSystemMetrics_(#SM_CYSCREEN)/2)-(ImageHeight()/2))
ResizeGadget(0,0,0,ImageWidth(), ImageHeight())
SetGadgetState(0,UseImage(0))
EndProcedure
Procedure RebuiltWindow()
CloseWindow(0)
hWnd = OpenWindow(0, 0, 0,0,0,#PB_Window_BorderLess|#PB_Window_ScreenCentered|#PB_Window_Invisible, "")
CreateGadgetList(hWnd)
ImageGadget(0,0,0,0,0,0)
SetWindowLong_(WindowID(0),#GWL_EXSTYLE,#WS_EX_TOOLWINDOW)
HideWindow(0,0)
SetWinTransparency(hWnd,250)
SetWindowPos_(WindowID(0), #HWND_TOPMOST, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE)
EndProcedure
Procedure Screenshot()
hImage = CreateImage(1,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
hDC = StartDrawing(ImageOutput())
DeskDC = GetDC_(GetDesktopWindow_())
BitBlt_(hDC,0,0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN),DeskDC,X,Y,#SRCCOPY)
StopDrawing()
ReleaseDC_(GetDesktopWindow_(),DeskDC)
ResizeImage(1,350,270)
SetGadgetState(1,UseImage(1))
EndProcedure
Procedure open_window()
If OpenWindow(1, 10, 10, 390, 330, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Screenshot")
If CreateGadgetList(WindowID(1))
ImageGadget(1, 10,10,350,270,0)
EndIf
EndIf
EndProcedure
UseJPEGImageDecoder()
UseJPEGImageEncoder()
open_window()
RebuiltWindow()
ShowBild(OpenFileRequester("Wählen sie jpg Bilder aus","c:\","Jpg Bilder|*.jpg;*.jpeg;|All Files|*.*",0,0))
Delay(1000)
Screenshot()
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
Select EventGadgetID()
Case 1
EndSelect
EndSelect
Until Event = #PB_Event_CloseWindow
Hoffe damit wird klarer das das transparente Image nicht mit abgespeichert wird
Gruß Michael
PS: den Code von Green Snake habe ich hier schon übernommen, leider ohne Erfolg