Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
{ MOUSE01.PAS                              Copyright (c) Ales Kucik }
{ Modul pro ovladani mysi ver. 01                                   }
{                                                                   }
{ Datum:09.04.2002                             http://www.trsek.com }
 
unit mouse01;
{
 POZNAMKY:
 
   -proceury a funkce vracejici souradnice kurzoru, vraci tyto
    souradnice v mezich 640x200 proto je nutne je prepocitat
    na rozliseni textove obrazovky
 
 
 PROMENNE:
 
  ExMouse - ma hodnotu true pokud je ovladac mysi zaveden v pameti
 
 
 
 FUNKCE A PROCEDURY:
 
  procedure CursorEnable;
    -rozsviti kurzor mysi
 
  procedure CursorDisable;
    -zhasne kurzor mysi
 
  procedure ReadState(var button,horiz,vert:word);
    -cte stav mysi
 
    Parametry:
    -button vraci stav tlacitek mysi (1.,2. a 3. bit)
    -horiz, vert vraci X a Y souradnici kurzoru mysi
 
  procedure SetCo_or(horiz,vert:word);
    -nastavi pocatecni souradnice kurzoru mysi
 
    Parametry:
    -horiz, vert ctou zvolenou X a Y souradnici
 
  procedure GetPress(button:word; var state,number,horiz,vert:word);
 
    Parametry:
    -button - vstup 1., 2. a 3. bit udavaji zvolene tlacitko
 
    -state - nenulova hodnota znamena, ze tlacitko je stale stisknuto
    -number - pocet stisknuti tlacitka od posledniho volani
    -horiz, vert - X a Y souradnice posledniho stisku tlacitka mysi
 
  procedure GetRelease(button:word; var state,number,horiz,vert:word);
 
    Parametry:
    -button - vstup 1., 2. a 3. bit udavaji zvlolene tlacitko
 
    -state - nenulova hodnota znamena, ze tlacitko je stale stisknuto
    -number - pocet uvolneni tlacitka od posledniho volani
    -horiz, vert - X a Y souradnice posledniho uvolneni tlacitka mysi
 
  procedure HorizRange(maximum,minimum:word);
    -vymezi kurzoru mysi oblast pohybu (horizontalni hranice)
 
    Prarametry:
    -minimum - minimalni horizontalni hranice kurzoru
    -maximum - maximalni horizontalni hranice kurzoru
 
  procedure VertRange(maximum,minimum:word);
    -vymezi kurzoru mysi oblast pohybu (vertikalni hranice)
 
    Parametry:
    -minimum - minimalni vertikalni hranice kurzoru
    -maximum - maximalni vertikalni hranice kurzoru
 
  procedure SensiMouse(horiz,vert:word);
    -nastaveni citlivosti mysi, zvlast pro horizontalni a vertikalni
     smer. Cim vyssi cislo, tim nizzsi citlivost (max 32767)
 
    Parametry:
    -horiz - nastaveni citlivosti mysi v horizontalnim smeru
    -vert - nastaveni citlivosti mysi ve vertikalnim smeru
 
  function ExistMouse:boolean;
    -funkce vraci hodnotu true, je-li zaveden ovladac mysi
}
 
interface
var ExMouse:boolean;
 
procedure CursorEnable;
procedure CursorDisable;
procedure ReadState(var button,horiz,vert:word);
procedure SetCo_or(horiz,vert:word);
procedure GetPress(button:word; var state,number,horiz,vert:word);
procedure GetRelease(button:word; var state,number,horiz,vert:word);
procedure HorizRange(maximum,minimum:word);
procedure VertRange(maximum,minimum:word);
procedure SensiMouse(horiz,vert:word);
function  ExistMouse:boolean;
 
 
implementation
procedure CursorEnable; assembler;
asm
   push   ax
   mov    ax, $1
   int    $33
   pop    ax
end;
 
procedure CursorDisable; assembler;
asm
   push   ax
   mov    ax, $2
   int    $33
   pop    ax
end;
 
procedure ReadState(var button,horiz,vert:word);
var b,c,d:word;
begin
  asm
     mov    ax, $3
     int    $33
     mov    b, bx
     mov    c, cx
     mov    d, dx
  end;
  button:=b;
  horiz:=c;
  vert:=d;
end;
 
procedure SetCo_or(horiz,vert:word); assembler;
asm
   mov    ax, $4
   mov    cx, horiz
   mov    dx, vert
   int    $33
end;
 
procedure GetPress(button:word; var state,number,horiz,vert:word);
var a,b,c,d:word;
begin
  asm
     mov  ax, $5
     mov  bx, button
     int  $33
     mov  a, ax
     mov  b, bx
     mov  c, cx
     mov  d, dx
  end;
  state:=a;
  number:=b;
  horiz:=c;
  vert:=d;
end;
 
procedure GetRelease(button:word; var state,number,horiz,vert:word);
var a,b,c,d:word;
begin
  asm
     mov  ax, $6
     mov  bx, button
     int  $33
     mov  a, ax
     mov  b, bx
     mov  c, cx
     mov  d, dx
  end;
  state:=a;
  number:=b;
  horiz:=c;
  vert:=d;
end;
 
procedure HorizRange(maximum,minimum:word); assembler;
asm
   mov   ax, $7
   mov   cx, minimum
   mov   dx, maximum
   int   $33
end;
 
procedure VertRange(maximum,minimum:word); assembler;
asm
   mov   ax, $8
   mov   cx, minimum
   mov   dx, maximum
   int   $33
end;
 
procedure SensiMouse(horiz,vert:word); assembler;
asm
   mov   ax, $F
   mov   cx, horiz
   mov   dx, vert
   int   $33
end;
 
function ExistMouse:boolean;
var a:word;
begin
  asm
     mov   ax, $0
     int   $33
     mov   a, ax
  end;
  if a=0 then ExistMouse:=false
  else ExistMouse:=true;
end;
 
begin
  ExMouse:=ExistMouse;
end.