Ich bin neu im Forum, also entschuldigt mich bitte, wenn ich das falsche Unterforum erwischt habe.
Und zwar soll ich für die Schule (Ja, wir lernen tatsächlich Lazarus in der Schule...) das Problem der "Türme von Hanoi" graphisch umsetzen.
Dabei geht es um eine Anzahl n an Scheiben, die auf einer Stange gestapelt sind. Diese müssen zur Lösung auf einer zweiten Stange gestapelt sein,
außerdem gibt es noch eine dritte Stange als "Hilfsposition".
Mein Programm soll jetzt erst einmal alle Scheiben als TShapes mit relativer Größe und Position zeichnen.
Das klappt auch schon ganz gut.
Jetzt soll beim Verschieben einer Scheibe dem Programm in einem TMemo-Feld mitgeteilt werden, wie die neue Verteilung der Scheiben auf den Stangen aussieht.
Dazu muss die zu verschiebende Scheibe ausgewählt werden (fertig)
und anhand deren .Left-Property festgestellt werden, auf welcher Stange sie liegt.
Und da liegt jetzt mein Problem.
Ich habe eine Variable "ShapeName" in der einfach der Name der Scheibe als String gespeichert ist.
Anhand dieser wird eine TComponent-Variable gesucht, die die Bezeichnung "ShapeComp" trägt.
Wenn ShapeComp jetzt ein TShape (also eine Scheibe) ist, dann soll seine Position abgefragt werden.
Code: Alles auswählen
procedure TForm1.ZeichneScheibe(Scheibe, Stange, Pos: Integer);
var Shape: TShape;
ShapeName: String;
ShapeComp: TComponent;
Stange: Integer;
begin
ShapeName := 'Scheibe' + IntToStr(Scheibe);
ShapeComp := FindComponent(ShapeName);
//Hier kommt der problematische Teil
if ShapeComp is TShape then
if ShapeComp.Left < 284
then Stange := 1
else if ShapeComp.Left < 534
then Stange := 2
else Stange := 3;
{...}Warum hat dieses TShape keine .Left-Property?
Liegt das daran, dass es zur Laufzeit erstellt wurde?
Oder daran, dass es eine allgemeine Variable TComponent ist?
Obwohl ja extra noch geprüft wird, ob es sich um ein TShape handelt und eigentlich ja alle Komponenten eine Position haben..
Ich bin gerade ziemlich am verzweifeln.
Wäre nett, wenn mir jemand helfen könnte..
Dankeschön