I understand your concern about the jumpy movement, but it's not like that at all, certainly nothing like Chess or Checkers.

You'll still have pixel smooth movement. And you'll still draw your tiles as sprites in the usual way. The only thing is, in the background you've got an array telling you where the obstacles are.

what you could do is use an array as the definition of your maps.
Each type of tile has a number with a Zero as the ground (or anynumber, you may want different types of tiles as ground tiles. You could say if the tile type <5 then it's ground, otherwise, it's wall.

You know which tile he's on by checking the center of your sprite against the grid by dividing your X & Y positions by 32

You know which tile he's going to move to by writing a function like this.
(I'm at work and don't have access to Delphi, so I can't check if they syntax is 100% )

[pascal]
Procedure DoMove( blah blah )
begin

// About to move.. check each of the corners.

if ( checkNextSquareIsGround( X+moveAmountX, Y+moveAmountY) ) and
( checkNextSquareIsGround( X+width+moveAmountX, Y+moveAmountY) ) and
( checkNextSquareIsGround( X+moveAmountX, Y+moveAmountY+height) ) and
( checkNextSquareIsGround( X+width+moveAmountX, Y+moveAmountY+height) ) then
begin
X := X + moveAmountX;
Y := Y + moveAmountY;
end;

end;

function checkNextSquareIsGround( X,Y:integer ) : boolean
var
gridX,gridY : integer;
tileNumber : integer;
begin

// Get Grid location for pixel location.
gridX := x div 32; // 32 pixels per square.
gridY := y div 32;

if (gridx>=0) and (gridx<=10) and (gridy>=0) and (gridy<=10) then
begin

tileNumber := grid[gridx,gridy];

if tileNumber <5 then
begin
result := true;
end
else
begin
result := false;
end;
end
else
begin
result := false;
end;

end;[/pascal]

hopefully, this should give you an idea.

Then at the start of each level, when you want to create your wall sprites, go through the grid.
Place tiles at gridx*32, gridy*32 and set the image to the relevant image to the number in the grid array.

does this make sense?
[/pascal]