Mit einem Fenster für alle Modi ist auch nicht so wild, man muß es nur richtig vorbereiten und auf paar Punkte achten.
Als erstens ist die Abfrage Art wie
if AnsiStartsText('/P',ParamStr(1)) then
Quatsch, sie ist nicht falsch, aber nicht effektiv. Effektiver ist die Parameter zuerst separat auszuwerten, wie z. B.
Delphi-Quellcode:
const
ssmConfigure = 1; { Dialog 'Einstellungen' }
ssmFullScreen = 2; { Vollbildmodus }
ssmPreview = 3; { Vorschau }
ssmPassword = 4; { Dialog 'Passwort setzen' }
ssmInstall = 5; { Installieren }
var
ssMode: Byte;
...
case Param1[1] of
'C': Result := ssmConfigure; { Dialog 'Einstellungen' }
'S': Result := ssmFullScreen; { Vollbildmodus }
'P': Result := ssmPreview; { Vorschau }
...
Danach arbeitest du nur noch mit der globalen variable ssMode. In einem ein Fenster ScreenSaver reagierst du dann auf
if ssMode = ssmFullScreen
oder
if ssMode = ssmPreview
usw. Je nach ssMode reagierst du unterschiedlich. Ist es ssmFullScreen, arbeitet es wie ein ScreenSaver, ist es ssmPreview, abereitet es wie ein Programm, d. h. Tastendruck beendet das Programm nicht usw.
Dann solltest du soweit es geht alles was geht in zwei Funktionen packen für ScreenSaver begin und end, d. h. bestimmte Screensaver Funktionen sollten nicht unkontrolliert in einer normalen Prozedur behandelt werden, sondern in separaten eigenen Funktionen. Damit kannst du je nach ssMode sie aufrufen oder nicht.