The first method you had was good enough, it just had a minor flaw: YOu were assigning the x,y values of the head to the 2nd one, and then the 2nd one to the third one, which makes everything sit on the exact same coordinates. Thus, you need to cycle through the list in reversed order.:

Code:
snake1[0]:=inputcoords;
for i:= snake1.length-1 downto 1 do begin
snake1[i].x:=snake1[i-1].x;
snake1[i].y:=snake1[i-1].y;
end;
That should do it, I think....