Wenn du das zweite Mal auf den Button klickst, wird auch ein neues Bild erzeugt--in der Variable des alten! Das alte liegt dann irgendwo als Speicherleiche herum und kann nicht mehr angesprochen werden.
Du musst also irgendwie mit einem Array/Liste von Images arbeiten.
Delphi-Quellcode:
procedure TForm1.DoTimer(Sender: TObject);
var i: integer;
begin
for i := Low(ImageArray) to High(ImageArray) do
with ImageArray[i] do
Top := Top - 3;
end;
Aber wieso du den Timer nicht aufs Form packen kannst, check ich trotzdem nicht.
Dann würden sich die meisten der Probleme nämlich in Wohlgefallen auflösen. U.a. dass sich die Bilder doppelt so schnell bewegen. Und die Images solltest du eigentlich auch mit Form1 als Owner erzeugen (TImage.Create(Form1)