Code:
procedure TBlurp.DoCollision(Sprite:TSprite; var Done:boolean);
This procedure is acting wrong in theory. Because when you press Up and Right simultaneously you should get sprite to move both down and left edge. When you move along wall to right direction for example and hit wall, you will be in situation where player moved inside 3 different blocks. This simply will not work even with vx:=0 etc whereever.

One note from code also, the lagtime code will not make game smooth as it is.
Code:
    ActTime := ActTime + AdPerCounter.TimeGap;
    if ActTime > 10 then
    begin
      ...
      ActTime := 0;
    end;
This should be:
Code:
    ActTime := ActTime + AdPerCounter.TimeGap;
    if ActTime > 10 then
    begin
      ...
      ActTime := ActTime - 10;
    end;
Otherwise the frametime will not try to balance it to 10 milliseconds, but instead always with little variety above 10.

Also, this is still same topic as: http://www.pascalgamedevelopment.com...xamples)/page3
There was many suggestions for collision detection, why did you turn them down?