Sorry if the explainations are hard to understand.

First I'll address the problem with the body disconnecting with the head:-
Reason: The procedure I have at the moment just checks if the current segment is travelling in the same direction as the previous segment. If it isn't then it continues travelling in the direction it's going until it reaches the previous segments X or Y, as required, and then changes the face the same direction as the previous segment.
Problem: If the player turns the snake twice before the next segment in line reaches the X or Y then the next segment will be travelling parallel to it and will not change direction.
What I want: I want to store each turn taken in some sort of list. The X, Y, direction change and a boolean variable so that I don't overwrite a turn that hasn't been taken yet. I was thinking of using an array (length of a hundred or something) of a record with these properties, but I thought I'd better see if there's a better way first.

Next is a problem with the editor. I want to get something kind of similar to the Age of Wonders 2 editor with the map on the left and a tabform of the different tiles to place on the right. I've messed around with a TDrawGrid but I can't figure out how to put 1 tile into each cell.

Finally I'm not sure how I'm going to impliment collision detection. I've divided the mazes up into 20x20 tiles, so I was thinking of somehow checking the kind of tile the snake's head is about to enter. Again, I'm not too sure of the best way to go about this considering the snake moves 1 pixel at a time.

Any help would be appreciated. Thanks in advance.