Screenshot die x-te

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
ahle bemm
Beiträge: 10
Registriert: 23.10.2005 17:41

Beitrag von ahle bemm »

Hallo zusammen,
Also habe nach langem ausprobieren dann doch die Windowsroutine genommen und die funktioniert auch vernünftig und schnell.
Habe zwar einiges danach gesucht, aber mittlerweile habe ich eine brauchbare Lösung. Leider muss ich mit While WindowEvent alle abfragen in dem Moment in die Tonne hauen, aber das ist halb so wild.

hier nun der komplette code, der funktioniert.

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,127) 
  SetWindowPos_(WindowID(0), #HWND_TOPMOST, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE) 
EndProcedure 

Procedure Screenshot() 
  UseJPEGImageDecoder()
  UseJPEGImageEncoder()
  ClearClipboard()
  #VK_SNAPSHOT=$2C
  keybd_event_(#VK_SNAPSHOT, 0, 0, 0)
  While WindowEvent():Wend
  hbm = GetClipboardData(#PB_ClipboardImage)
  CreateImage(3,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
  StartDrawing(ImageOutput()) 
  DrawImage(hbm,0,0,GetSystemMetrics_(#SM_CXSCREEN),GetSystemMetrics_(#SM_CYSCREEN))
  StopDrawing() 
  ResizeImage(3,370,270)
  SetGadgetState(1,UseImage(3)) 
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 
gruß Michael
Antworten