Der Vergleich mit Booleanwerten (z.B.
if shift = true then) ist nicht nur unschön und unlogisch, sondern falsch.
Hier gibt es mal ein kleines Beispiel welches zeigt, wann es schief geht:
www.delphi-forum.de/....php?p=548760#548760
Mehr dazu steht hier:
www.delphi-treff.de/...olean-werten/page/4/
Und warum das auch vollkommen unlogisch ist, wird hier erklärt:
www.delphi-forum.de/....php?p=560637#560637
Ferner solltest Du bei Dir mal schauen, dass du die letzte Abfrage weglässt, weil dort ein reines
Else logischer ist.
In Zeile 10 steht übrigens
If If 
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.