; English forum: http://www.purebasic.fr/english/viewtopic.php?t=8891&highlight=
; Author: eddy (updated for PB4.00 by blbltheworm)
; Date: 29. December 2003
; OS: Windows
; Demo: No

; Note: need to be compiled to an executable first...
; Hinweis: muss erst zu einem Executable kompiliert werden...

SCREENSAVER Preview... 3rd edition

;------------------- 
;-Preview Destructor 
;------------------- 

Procedure PreviewAutoDestruction(window, message, wParam, lParam) 
   Shared WM_DestroyPreview 
    
   Result = #PB_ProcessPureBasicEvents 
   Select message 
      Case #WM_CLOSE 
         DestroyWindow_(window) 
         End 
      Case WM_DestroyPreview 
         End 
   EndSelect 
   ProcedureReturn Result 
EndProcedure 

;------------------- 
;-Preview 
;------------------- 

Procedure Preview(preview) 
      
   ; ------------------------ 
   ; preview image 
   ; ------------------------ 
   UseGadgetList(preview) 
      
      GetClientRect_(preview,@rc.rect)    
      CreateImage(1,rc\right,rc\bottom) 
         StartDrawing(ImageOutput(1)) 
            For y=0 To ImageHeight(1) 
               Line(0,y,ImageWidth(1),1,RGB($FF*y/ImageHeight(1),$CC*y/ImageHeight(1),0)) 
            Next 
         StopDrawing() 
      ImageGadget(1,0,0,0,0,ImageID(1))  

   CloseGadgetList() 


   ; ------------------------ 
   ; close previous previews 
   ; ------------------------ 
   Shared WM_DestroyPreview 
   WM_DestroyPreview=RegisterWindowMessage_(@"PREVIEW AUTO DESTRUCTION") 
   SendMessage_(#HWND_BROADCAST,WM_DestroyPreview,0,0)    

   ; ------------------------ 
   ; the empty child window will receive all messages 
   ; wait end of preview... 
   ; ------------------------        
   SetParent_(OpenWindow(0,0,0,0,0,"CHILD WINDOW",#PB_Window_Invisible),preview)    
   SetWindowCallback(@PreviewAutoDestruction()) 
    
   Repeat 
      WaitWindowEvent() 
   ForEver    
EndProcedure 

;------------------- 
;-Main Program 
;------------------- 
FirstParam.s    =ProgramParameter() 
command.s       =LCase(Left(ReplaceString(FirstParam,"-","/"),2)) 
ParentWindow.l  =Val(StringField(FirstParam,2,":")) | Val(ProgramParameter()) 
        
Select command      
   Case "/p" 
      Preview(ParentWindow) 
   Case "/c" 
      ;Config(ParentWindow)      
   Default 
      ;Saver() 
EndSelect 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -