es wurde schon zig mal geschrieben das du das Ergebnis von TComponent erstmal auf eine Variable zuweisen sollst und diese dann auf ungleich "nil" überprüfen sollst. Wenn dir FindComponent bei
(Findcomponent('im_st'+ InttoStr(Startstapel) + 'nr' + InttoStr(Stapel[Startstapel].Anzahl)) as TShape)
zurückgibt weil die Komponente mit dem Namen nicht existiert ist klar das dann eine
Exception kommt.
richtiger ist
Delphi-Quellcode:
var LShape: TShape;
begin
LShape := Findcomponent('im_st'+ InttoStr(Startstapel) + 'nr' + InttoStr(Stapel[Startstapel].Anzahl));
if LShape <> nil then
begin
LShape.Left:=Stapel[Zielstapel].left;
end;
Warum schreibst du überhaupt
Kompo:=TComponent(Findcomponent('im_st'+ InttoStr(Startstapel) + 'nr' + InttoStr(Stapel[Startstapel].Anzahl)) as TShape);
Wenn du den Wert den du auf Kompo zugewiesen hast dann nicht nutzt? Zu dem Ist es überflüssig das ganze nach TShape zu casten wenn du es dann der Variablen "kompo" zuweist die vom Typ "TComponent" ist. Besser wäre die Variable "Kompo" als "TShape" zu declarieren und dann mit "Kompo" weiterzuarbeiten und nicht immer wieder "FindComponent" zu nutzen da dies auch ein Performanceeinbruch ist.