I would really suggest that you postpone messing with pointers until you have a better understanding of the language. Use an array or a TList instead; They perform better.
Also, objects aren't really suited for double-linked lists as you will need a full (but empty) object for the head node.
That said, the problem appears to be that you aren't aware that an object reference is itself a pointer and that local variables are temporary and allocated on the stack.
Thus...
Tmp^.Next := @Node
...assigns the address of the Node pointer (and not the address of the Node object) to the Next field.
The correct statement would look more like this:
Tmp.Next := Node;
Notice that the dereference operator (^) is optional so I didn't use it. I think it often just makes the code harder to read.