Um einen Bildschirmschoner (oder auch Screensaver) zu unterdrücken, hat
marabu hier bzw.
hier die Lösung gepostet.
Eine Verbesserung von
Robert Marquardt stammt von
hier.
Methode 1
Diese Methode schaltet den Bildschirmschoner über
SystemParametersInfo ein bzw. aus:
Delphi-Quellcode:
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, ***, nil, 0);
// Statt *** einsetzen:
// 1 für AN
// 0 für AUS
Hier ist wichtig, dass später wieder der Ausgangszustand wiederhergestellt wird, z.B. beim Beenden des Programms.
Methode 2
Die andere Methode funktioniert über Messages, hierzu muss das Fenster jedoch den Fokus besitzen:
Delphi-Quellcode:
// Mit folgender Zeile wird die Prozedur im Hauptforumlar deklariert:
procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;
// Und hier dann das Unterdrücken:
procedure TMainForm.WMSysCommand(var Msg: TMessage);
begin
if (Msg.wParam = SC_SCREENSAVE) then
Msg.Result := 1
else
inherited;
end;
Eine Beschreibung dieses Verfahrens und der Vorteil gegenüber dem ersten liefert Robert Marquardt
hier:
Zitat von
Robert Marquardt:
Windows sendet jedesmal wenn der Screensaver anspringen soll eine WMSYSCOMMAND mit Parameter SC_SCREENSAVE an alle Applikationen.
Antwortet man mit der 1 in Msg.Result, dann startet Windows den Screensaver nicht.
Um OnDestroy muss man sich nicht kuemmern, da die Applikation ja dann sowieso nicht mehr da ist um zu antworten.
Die Loesung den Screensaver per SystemParametersInfo zu deaktivieren ist ein bischen problematisch, da das Programm ja abstuerzen kann und dann den Screensaver nicht mehr reaktiviert.
Methode 3
Wer die JEDIs installiert hat, kann auch ganz einfach den
JvScreenSaveSuppressor (aus JvSystem) nutzen
.
[edit=fkerber]kleinen Schreibfehler im Code korrigiert. Mfg, fkerber[/edit]
[edit=ManuMF]richtiger Name der Komponente[/edit]
[edit=ManuMF]Code von Methode 2 korrigiert[/edit]
[edit=Matze]Hinweis zu Methode 2 hinzugefügt. Mfg, Matze[/edit]