Sender = Image1 in ShapeMouseDown war natürlich falsch gewesen.
Hab's im oberen
DL schon geändert.
"Sender = Image1" => "TShape(Sender).Parent = Form1"
***
Was deine anderen Fragen angeht:
-die Position eines Objekts ist relativ zu der des Parent
-TImage kann nicht als Parent genommen werden, um die Position relativ zum Image zu setzen
Als Parent (übergeordnetes Objekt) können nur Steuerelemente fungieren, die ein Nachkomme von TWinControl sind. Wie z.B. TForm, TPanel.
(hatte ja auch erst den Fehler gemacht)
-Offset ist hier die Differenz zwischen zwei Punkten.
z.B. ist Pixel [10, 20] von Image1 an der selben Stelle wie Pixel [26, 36] von Form1
(Das ist auch einer der Gründe, warum es 2 Images sind)
-Objektumwandlung:
!Sender(TObject) und Shape(TShape) sind inkompatiebel.
Beim Aufruf der EreignisProzedur wird das Objekt (die Komponente), über welches diese Procedure aufgerufen wurde, mit übergeben.
Und damit man mit den Eigenschaften des Objektes arbeiten kann muss es noch umgewandelt werden.
Da ShapeMouseDown von mehrenen Shapes aufgerufen werden kann, ist es so möglich an dessen Daten zu gelangen.
Image1MouseDown wird immer nur von Image1 aufgerufen, daher konnte z.B. Image1.Top verwendet werden, an statt TImage(Sender).Top.
-mit "TShape(Sender).Parent = Form1" wird abgefragt ob das gerade angeklickte Shape zu Form1 gehört oder nicht.
Fragen schadet ja nicht. Nur wer nicht fragt, schadet sich selbst.