Personally, I would ditch the DeplhiX collision detection completely for this type of game. Or at least for anything other than bad guys and bullets (if applicable)

As your game works on a fixed grid and there's no chance of a wall being in an odd place, I'd use a grid system using an array of booleans.
This array would be populated with the walls of the map. True for blocked.
Then work out if you're colliding with a block or if you can move into the free space next to you using a very simple calculation.

I implemented a system like this for a platformer in VB once. it worked quite well.

Just take the corner pixel co-ordinates and divide them by the number of pixels each cell takes up get the gridx and gridy for that corner and check if that grid is taken with a block, if so, don't move there. Do this before you apply your position changes in DoMove.

This type of collision detection is Uber fast. No pixel tests to do at all. and you'll be able to add whatever offsets you want to the X or Y axis so you'll appear to walk behind blocks for a little way then stop.

gridx := x / gridsizex;
gridy := y / gridsizey;

If you do this for each corner of the sprite, it'll work. If you only do this for the centre of the sprite, you'll be able to walk halfway into every object in all directions.

If I was doing a game like this, this is how I'd do it.