Hallo und Willkommen in der
DP 
,
fang doch erst einmal im Kleinen an. Eine Ampel kennt ja nur 4 Zustände, da bietet sich also ein eigener Datentyp dafür an.
Delphi-Quellcode:
type
TAmpelzustand = (azGruen, azGelb, azRot, azRotGelb);
Bei jeder Schaltphase wird dieser Zustand dann im 1 erhöht bzw. auf Anfang zurückgesetzt. Wir lösen das jetzt auf die simpleste Art und Weise, auch wenn sie nicht ganz so elegant ist:
Delphi-Quellcode:
procedure TAmpel.NaechstePhase;
begin
case Zustand of
azGruen:
Zustand := azGelb;
azGelb:
Zustand := azRot;
azRot:
Zustand := azRotGelb;
azRotGelb:
Zustand := azGruen;
end;
Anzeigen;
end;
In der "Anzeigen"-Methode werden nun also die Images/Shapes oder was auch immer aktualisiert. Versuch das nun zunächst mit einer einzigen Ampel umzusetzen, danach sind mehrere auch kein großes Problem mehr.
Übrigens: bitte nicht mit true oder false vergleichen, das kann u.U. in die Hose gehen, auch wenn manche Benutzer das nicht einsehen wollen.
if Dings = true then
wird einfach zu
if Dings then
und
if Dings = false then
wird zu
if not Dings then
[edit] Trotz roten Kastens gepostet, da Ansatz ähnlich, aber nicht gleich

[/edit]