So ich habe heute mal einen einfachen Bildschirmschoner erstellt da ich testen wollte wie das funktioniert. Hat alles wunderbar geklappt weswegen ich ihn mal hier veröffentlichen will. Nur bei der Unterstützung von mehreren Bildschirmen habe ich noch etwas Probleme deshalb funktioniert das bisher nur dann richtig gut wenn alle Bildschirme die gleiche Auflösung haben ich hoffe ich bekomm das noch besser hin.
mfg Christian +
Download: http://www.file-upload.net/download-267 ... r.scr.html
Edit:
So hier mal noch das Quellcode Grundgerüst von meinem Bildschirmschoner (auch wenn es nicht das allerschönste ist) mit einem einfachen grafischen Effekt versehen. Vielleicht kann ja mal jemand den Code gebrauchen oder hat eine Idee wie ich mit guter Qualität das Ganze auf mehreren Monitoren anzeigen kann ohne das es erheblich zu langsam wird.
Code: Alles auswählen
EnableExplicit
InitSprite()
#ScreensaverName = "Test Screensaver"
Structure tagLASTINPUTINFO
cbSize.l
dwTime.l
EndStructure
Define PLASTINPUTINFO.tagLASTINPUTINFO
PLASTINPUTINFO\cbSize = SizeOf( tagLASTINPUTINFO )
Define i.l, preview.l, parameter$, event.i, desktops.l = 1, status.l, screenw.l, screenh.l
parameter$ = ProgramParameter(0)
Select LCase( Mid(parameter$, 2, 1) )
Case "p"
Define PSize.rect, window.i = Val( ProgramParameter(1) )
GetClientRect_( window, @PSize )
screenw = PSize\right
screenh = PSize\bottom
OpenWindow( 0, 0, 0, screenw, screenh, #ScreensaverName, #WS_CHILD, window )
preview = 1
Case "c"
OpenWindow( 0, 0, 0, 300, 150, #ScreensaverName, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, Val( Right(parameter$, Len(parameter$)-3 ) ) )
TextGadget( 0, 10, 20, 290, 80, "Keine Einstellungen möglich!", #PB_Text_Center )
ButtonGadget( 1, 50, 110, 200, 30, "OK" )
Repeat
event = WaitWindowEvent()
If event = #PB_Event_CloseWindow : Break : EndIf
If event = #PB_Event_Gadget : Break : EndIf
ForEver
End
Case "s"
desktops = ExamineDesktops()
screenw = DesktopWidth(0)
screenh = DesktopHeight(0)
For i = 0 To desktops-1
OpenWindow(i, DesktopX(i), DesktopY(i), DesktopWidth(i), DesktopHeight(i), #ScreensaverName, #PB_Window_BorderLess)
Next
Default
End
EndSelect
OpenWindowedScreen( WindowID(0), 0, 0, 1920, 1080, 1, 0, 0 )
AddWindowTimer(0, 1, 150)
GetLastInputInfo_(@PLASTINPUTINFO)
status = PLASTINPUTINFO\dwTime
Define hDC.i, WndDC.i
If preview = 0 : ShowCursor_(0) : EndIf
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Timer
If EventTimer() = 1
StartDrawing( ScreenOutput() )
For i = 0 To 150
Circle( Random(1920), Random(1080), 8, RGB( Random(255), Random(255), Random(255) ) )
Next
StopDrawing()
FlipBuffers()
WndDC = GetDC_( WindowID(0) )
For i = 1 To desktops-1
hDC = StartDrawing( WindowOutput(i) )
; SetStretchBltMode_(hDC, #STRETCH_HALFTONE)
StretchBlt_( hDC, 0, 0, DesktopWidth(i), DesktopHeight(i), WndDC, 0, 0, DesktopWidth(0), DesktopHeight(0), #SRCCOPY )
StopDrawing()
Next
ReleaseDC_( WindowID(0), WndDC )
EndIf
EndSelect
If preview = 0
GetLastInputInfo_(@PLASTINPUTINFO)
If status <> PLASTINPUTINFO\dwTime : Break : EndIf
EndIf
ForEver
If preview = 0 : ShowCursor_(1) : EndIf
End