Man könnte es umschaltbar machen:
Hast du nicht gelesen, was ich geschrieben habe, oder bist du einfach nur stur?
Erstens ist
[biSystemMenu,biMinimize,biHelp] - [biMinimize]
sinnlos, da kannst du gleich
[biSystemMenu,biHelp]
schreiben.
Zweitens lass das Application.Terminate da weg, wenn schon dann Close, aber beides ist unnötig!
if switched=TRUE then
Das ist übrigens schlechter Stil, man sollte
Boolsche Werte niemals per "=" auf True prüfen, sonst kann man sich schwer zu findende Bugs einfangen!
Hintergrund: "False" ist definiert als
= 0, "True" ist logischerweise "not False", d.h.
<> 0. Als Konstante ist "True" jedoch als
1 definiert (jedenfalls für den Standardtyp "Boolean", für die Typen ByteBool, WordBool, LongBool ist es
-1, das ignorieren wir mal; der Compiler konvertiert normalerweise automatisch richtig zwischen diesen Typen).
Für Anweisungen wie
if Switched then
erzeugt der Delphi-Compiler Code, der auf
<> 0 prüft (korrekt für alle Boolschen Typen und Werte).
Für Anweisungen wie
if Switched = True then
erzeugt der Delphi-Compiler für den "Boolean"-Typ Code, der auf = 1 prüft und das kann Probleme geben!
Kleiner Test:
Delphi-Quellcode:
procedure BooleanTest;
var
B: Boolean;
begin
Byte(B) := 2;
// B ist <> 0, d.h. entspricht logisch "True"... wird aber NICHT bei "B = True" erkannt!
// prüft B = 1: SCHLECHT!
if B = True then ShowMessage('B = True');
// prüft B = 0: OK, aber schlechter Stil
if B = False then ShowMessage('B = False');
// prüft B <> 0: korrekt!
if B then ShowMessage('B *is* True!');
// prüft B = 0: korrekt!
if not B then ShowMessage('B *is NOT* True!');
end;
Zugegeben, das Schreiben eines anderen Wertes als 0 oder 1 in einen Boolean-Typ per Typecast hier ist etwas gekünstelt, aber wenn man Third-Party-Code benutzt, der nicht in Delphi geschrieben wurde, kann das durchaus mal vorkommen.