Projekt2 ist das was ich haben möchte. Allerdings dynamisch.
Meine Panel sind Buttons einer Taskleiste die individuell zur Laufzeit über eine Datenbank Abfrage erstellt werden. Diese können angepasst werden. Die Panels werden mit dem Namen MyPanel1 bis MyPanelN dynamisch erzeugt. Man kann die Funktionen aus deinem Beispiel bei mir nicht vordeinieren, da diese erst zur Laufzeit erzeugt werden.
Dein Code:
Code: Alles auswählen
if Sender = Panel1 then Panel1.Color:= clLime;
if Sender = Panel2 then Panel2.Color:= clYellow;
if Sender = Panel3 then Panel3.Color:= clRed;
if Sender = Panel4 then Panel4.Color:= clBlue;
Da bei mir Panel 1 zum Zeitpunkt der Kompilierung nicht existiert, bekomme ich einen Fehler. Mein Code soll das gleiche wie deiner Code machen, nur halt über die Anzahl der Elemente in der Datenbank. Der Fehler ist in der IfAbfrage, anstelle des Panels identifiziert er hier das Form. Das ändern der Eigenschaft Color habe ich einzeln getestet und funktioniert so.
Mein Problem würde ich so beschreiben: Ich weis nicht wie ich in der Lage bin die erzeugten Panels zur Laufzeit richtig anzusprechen. Daher dieses Konstrukt mit dem FindComponent(). Wenn es bessere Lösungen gibt immer her damit

.
Code: Alles auswählen
procedure TMainForm.myOnEnter(Sender : TObject);
var
i : integer;
panelname : string;
begin
for i := 1 to inti do {inti Anzahl der Erzeugten Panel beginnend mit 1}
begin
panelname := 'MyPanel' + IntToStr(i); {Namensgebung der erzeugten Panel}
if (Sender is TMainForm(FindComponent(panelname))) then {Alle Panel sind im TMainForm über FindComponent möchte ich erzeugte Komponente suchen. Ich habe aktuell keine andere Lösung}
begin
TMainForm(FindComponent(panelname)).color := TColor($00333333); {Aufruf der Komponente und Farbänderung der Eigenschaft Color}
end;
end;
end;
Der Weg ist das Ziel... Aber bitte nicht vergessen los zu laufen :).