ну, в смысл кода вдаваться не буду, но думаю как-то так:
program bred;
Var i, key: integer;
procedure hren;
Var x,y, xi, yi,xs, ys, xs1, ys1, state: integer;
ris: image;
Begin
ris:=LoadImage('/image.png');
xi:=GetImageWidth(ris);
yi:=GetImageHeight(ris);
xs:=GetWidth;
ys:=GetHeight;
xs1:=GetStringWidth('Вверх');
ys1:=GetStringHeight('Вверх');
DrawImage(ris,x,y);Repaint;
repeat
state:=GetKeyClicked;
if state=KE_KEY4 then begin x:=x-20; if (x<xs-xi) then x:=xs-xi; end;
if state=KE_KEY6 then begin x:=x+20; if (x>0) then x:=0; end;
if (state=KE_KEY2) or (state=-6) then begin y:=y-20; if (y<ys-yi) then y:=ys-yi; end;
if (state=KE_KEY8) or (state=-7) then begin y:=y+20; if (y>0) then y:=0; end;
DrawImage(ris,x,y);
SetColor(0, 0, 255);
FillRect(xs-xs1,ys-ys1,xs1,ys1); FillRect(0,ys-ys1,xs1,ys1);
SetColor(0, 255, 0);
DrawText('Вниз',xs-xs1+5,ys-ys1);
DrawText('Вверх',0,ys-ys1);
Repaint;
Delay(20);
until false;
End;
Begin
repeat
key:=GetKeyClicked;
if key=ke_key5 then
begin
if i=4 then hren;
i:=i+1;
end;
if key=ke_key1 then
i:=0;
until key=ke_pound;
end.