[TP] 16H problem

0

Witam oto kawałek programiku mojego

     repeat
      klaw(cyfra);
      p_mouse(x,y,b);
          if  (Length(cyfra2)<>2) then
           begin

           OutTextXY(GetMaxX div 2 -10 + add,GetMaxY div 2 -2, chr(cyfra));
           add:=add+8;
           cyfra2:=cyfra2+chr(cyfra);
           end;
      if (x>GetMaxX div 2 -40) and (x<GetMaxX div 2 +40) and (y>GetMaxY div 2 +20) and (y<GetMaxY div 2 +40) and (b=1) then
      begin
           OutTextXY(GetMaxX div 2 -80,GetMaxY div 2 -50,'Kliknoles');
      end;
     until (cyfra=27);

Funkcje są w bibliotece

procedure klaw(var klawisz:byte);   {Pobiera stan klawiatury}
var
   r:registers;
begin
     r.ax:=$0000;
     Intr($16,r);
     klawisz:=r.al;
end;

I mam problem obsługuje mi wsio ale niewykrywa kliknięc myszy i jej pozycji iż funkcja klaw czeka na nacisniecie klawisza :( jak to zmienic probowałem zrobic $0001 ale to samo nie wiem jak to zrobic moze cos poradzicie :]

0
procedure PozycjaMyszy(var x,y,b:word);
 var r:registers;
 begin
  r.ax:=$0003;
  intr($33,r);
  x:=r.cx;
  y:=r.dx;
  b:=r.bx;
 end;
0

To juz mam tylko nie załączyłem bo nie chodzi mi o myszke tylko o klawiature !! :]

p_mouse(x,y,b);

to ta procka

Oto moje procki nie są profesionalne ale od czegoś trzeba zacząć :D

unit grafika;
interface
uses crt,graph,dos;   {Dodaje moduy}

     procedure start(patch:string);
     procedure s_mouse(yes:boolean);
     procedure p_mouse(var x,y,b:word);
     procedure klaw(var klawisz:byte);
     procedure czytaj_txt(patch:string;x,y:integer;color:word);
     function inttostr(i:integer):string;
     procedure pisz_txt(var s:string;var x,y:byte);
     procedure ramka(x,y,maxx,maxy:integer;color:word);

implementation

procedure start(patch:string);       {Procedura inicjujaca tryb graficzny}
var
	karta,tryb:integer;
begin
     DetectGraph(karta,tryb);
     InitGraph(karta,tryb,patch);
     if GraphResult <> grOK then Writeln('Graphics error:', GraphErrorMsg(GraphResult));
end;

procedure s_mouse(yes:boolean);    {WYswietla mysz na ekranie}
var
   r:registers;
begin
  if yes = TRUE then
  begin
   r.ax:=$0001;
   Intr($33,r);
  end
  else
  begin
   r.ax:=$0000;
   Intr($33,r);
  end;
end;

procedure p_mouse(var x,y,b:word);   {Pobiera stan myszu pozycje i stan przycisk˘w}
var
   r:registers;
begin
   r.ax:=$0003;
   Intr($33,r);
   x:=r.cx;
   y:=r.dx;
   b:=r.bx;
end;

procedure klaw(var klawisz:byte);   {Pobiera stan klawiatury}
var
   r:registers;
begin
     r.ax:=$0000;
     Intr($16,r);
     klawisz:=r.al;
end;

procedure czytaj_txt(patch:string;x,y:integer;color:word);   {Rysuje tekst czytany z pliku}
var
   plik: File;
   c:char;
   x2,y2:integer;
begin
    SetColor(color);
    assign(plik,patch);
    reset(plik,1);
    x2:=0;
    y2:=0;
    repeat
    blockread(plik,c,1);
    if ord(c)=13 then
     begin
    y2:=y2+8;
    x2:=0;
     end
    else
     begin
     if ord(c)=10 then
        begin
             x2:=0;
        end
        else
        begin
     OutTextXY(x+x2,y+y2,c);
     x2:=x2+8;
        end;
     end;
     until eof(plik);

end;
function inttostr(i:integer):string;
var
   s:string;
begin
     str(i,s);
     inttostr:=s;
end;
procedure pisz_txt(var s:string;var x,y:byte);
var
   k:byte;
begin
     klaw(k);
     OutTextXY(x,y,chr(k));
end;
procedure ramka(x,y,maxx,maxy:integer;color:word);
begin

     SetColor(color);
     Line(x,y,x,maxy);
     Line(x,y,maxx,y);
     Line(maxx,y,maxx,maxy);
     Line(x,maxy,maxx,maxy);

end;
end.
0

if keypressed then readkey else getmousepos;

unit dupa;
interface
function ReadKey : char; 
function KeyPressed : boolean; 

implementation
var
  Enh                : byte      = 0; {klawiatura rozszerzona (win, f12 itp)}
  ScanCode       : byte;


function ReadKey : char; assembler;
asm
	MOV	AL,ScanCode
	MOV	ScanCode,0
	OR	AL,AL
	JNE	@@3
        mov     ah,enh
	INT	16H
        CMP     AL,0E0h
        JZ      @@1
        JMP     @@2
@@1:    MOV     AL,0
@@2:	OR	AL,AL
	JNE	@@3
	MOV	ScanCode,AH
	OR	AH,AH
	JNE	@@3
	MOV	AL,'C'-64
@@3:
end;

function KeyPressed : boolean; assembler;
asm
	CMP	ScanCode,0
	JNE	@@1
        mov     ah,enh
        inc     ah
	INT	16H
	MOV	AL,0
	JE	@@2
@@1:	MOV	AL,1
@@2:
end;

procedure InitEnhKeyb; assembler;
asm
  mov ah,9
  int 16h
  and ah,10h
  cmp ah,10h
  jz  @@1
  mov enh,0
  jmp @@2
@@1:
  mov enh,10h
@@2:
end;


begin
  InitEnhKeyb;
end.

To jest kawałek kodu z modułu tcrt - całość do ściągnięcia w dziale download/tp

0

mogl byś mi to jakoś przekształcic na taki styl jak ja mam czyli na registers ?? bo nie znam niektórych funkcji asm

function KeyPressed : boolean; assembler;
asm
        CMP        ScanCode,0
        JNE        @@1
        mov     ah,enh
        inc     ah
        INT        16H
        MOV        AL,0
        JE        @@2
@@1:        MOV        AL,1
@@2:
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1