CyberPress
közéleti magazin
cyberpress@sopron.hu
2024. december 29., vasárnap, Tamás, Tamara napja


Irodalmi Kávéház

Intranet Galéria

Apróhirdetések

Képeslapok

Soproni Képindex

Polgármesteri Hivatal

ZÓNÁK
Főoldal
Lapszemle
  Lapszemle
Kultúra
  KultúrVáros
  Lélektől lélekig
  SzínházVilág
  Soproni Ünnepi Hetek
  Borváros
Regionális kulturális programajánló
  Színház
  Kiállítás
  Rendezvények
  Hangverseny-Zene
Cyber Kurír
  Hírek - események
  Szomszédvár - Régió
  Soproni Snassz
Európai Unió
  EU
Cyber hírek
  Közélet
  SopronMedia
  Városháza
  Sport
Szórakozás
  Fesztiválgájd
  HangFal
  Mi1más
  Diákélet - diákszáj
  ViccGödör
Gazdaság
  Kereskedelmi és Iparkamara
Sport - szabadidő
  Sportcentrum
  Száguldó Cirkusz
Tudomány-technika
  Űrvadász
  Egészség
Környezet
  Borostyán
  Egészség

Dr. Bit  

Programozzunk együtt!

Az egér használata C++-ban és C-ben II.
avagy hogyan fogjuk munkára a "cincogót" DOS alatt?
Ott hagytuk abba, hogy megírtad az első egérkezelő programodat.
Az egeret könnyedén lehet kezelni így. Az egérrel kapcsolatos funkciókat
a 33-dik megszakítás meghívásával érheted el. Hogy hogyan? Ez nagyon egyszerű.
Csak írd be az 'EGER' utasítást (miután persze bemásoltad a szükséges programsorokat!
Lásd előző cikk!) zárójel után az AX-et, ami az alfunkció sorozatszáma, majd
utána következik a BX,CX,DX, amelyek a funkció paraméterei. Ezután a visszatérési
értékeket megkapod rendre az AX,BX,CX,DX változókban. Ez lehet, hogy bonyolultan hangzik,
de nem az. Most az előző cikkben szereplő példán mutatom be a használatát:
A program elején volt egy 'EGER(0,0,0,0);' utasítás. Ez az egér iniciálása. Tehát:
Bemenet: AX - 00h
Visszatérés: AX - -1, ha az iniciálás sikeres, 0, ha sikertelen.
BX - az egérgombok száma (Hány gombos az egér)
Mikor lehet sikertelen az iniciálás? Ez előfordulhat, ha például DOS alatt nincs
betöltve az egérvezérlő program. Ez egyszerűen ellenőrizhető egy if utasítással:
if(!AX)
{
// A teendők, ha az iniciálás sikertelen.
}
((( Megjegyzés: 'if(!AX)' ugyanazt jelenti, mint az 'if(AX==0' feltétel. )))
Ha valamilyen paramétert nem kell megadni, akkor írj csak be nyugodtan 0-t!
(Itt tehát az első szám (a 0) a funkció száma, a többit azért hagytam meg
0-nak, mivel itt nem kellenek.)
Tehát így hívod meg az egérkezelőt:
EGER(AX,BX,CX,DX)
Ha a Visszatérés-nél a 'NINCS VISSZATÉRÉSI ÉRTÉK' szerepel, akkor az azt
jelenti, hogy nem változtatja meg a változók értékét.
(Vagy a változók értékének megváltozása nem jelent semmit.)
A FUNKCIÓKÓD TÁBLÁZAT:
======================
INT 33h
Iniciálás:
Bemenet: AX 0
Visszatérés: AX -1, ha az iniciálás sikeres, 0, ha sikertelen.
BX az egérgombok száma (Hány gombos az egér)
Az egérkurzor láthatóvá tétele:
Bemenet: AX 1
Visszatérés: NINCS VISSZATÉRÉSI ÉRTÉK
Az egérkurzor láthatatlanná tétele:
Bemenet: AX 2
Visszatérés: NINCS VISSZATÉRÉSI ÉRTÉK
Információ az egérkurzor helyéről és a legyomott gombokról:
Bemenet: AX 3
Visszatérés: BX 0 Nincsen lenyomott gomb
0. bit 1 Bal gomb lenyomva
1. bit 1 Jobb gomb lenyomva
2. bit 1 Középső gomb lenyomva
CX 80 oszlopos képernyőn:
CX 0 és 632 közötti érték
CX/8 Oszlopszám(0-79)
40 oszlopos képernyőn:
CX 0 és 624 közötti érték
CX/16 Oszlopszám(0-39)
DX DX 0 és 192 közötti érték
DX/8 Sor száma(0-24)

Az egérkurzor pozicionálása:
Bemenet: AX 4
CX Oszloppozíció (0-624 vagy 632)
DX Sorpozíció(0-192)
Visszatérés: NINCS VISSZATÉRÉSI ÉRTÉK
A gomb lenyomások száma:
Bemenet: AX 5
BX 0,1,2 aszerint, hogy a BAL, JOBB, vagy KÖZÉPSŐ gombot akarod lekérdezni.
Visszatérés: AX 0. bit 1 Bal gomb lenyomva
1. bit 1 Jobb gomb lenyomva
2. bit 1 Középső gomb lenyomva
BX A lenyomások száma
CX 80 oszlopos képernyőn:
CX/8 Oszlopszám
40 oszlopos képernyőn:
CX/16 Oszlopszám
DX DX/8 Sor száma
A gomb felengedések száma:
Bemenet: AX 6
BX 0,1,2 aszerint, hogy a BAL, JOBB, vagy KÖZÉPSŐ gombot akarod lekérdezni.
Visszatérés: AX 0. bit 1 Bal gomb lenyomva
1. bit 1 Jobb gomb lenyomva
2. bit 1 Középső gomb lenyomva
BX A lenyomások száma
CX 80 oszlopos képernyőn:
CX/8 Oszlopszám
40 oszlopos képernyőn:
CX/16 Oszlopszám
DX DX/8 Sor száma
Vízszintes mozgási tartomány megadása:
(Csak a megadott két oszloppozíció között mozgatható az egérkurzor.)
Bemenet: AX 7
CX A kezdőpozíció:
80 oszlopos képernyőn:
Oszlopszám * 8
40 oszlopos képernyőn:
Oszlopszám * 16
Grafikus képernyőn 0 és 624 vagy 632 közötti értéket adhatsz meg.
DX A végpozíció:
80 oszlopos képernyőn:
Oszlopszám * 8
40 oszlopos képernyőn:
Oszlopszám * 16
Visszatérés: NINCS VISSZATÉRÉSI ÉRTÉK
Függőleges mozgási tartomány megadása:
(Az egérkurzor nem mozgatható a megadott sorokon kívülre.
Bemenet: AX 8
CX A kívánt sor száma * 8, mint kezdőérték, szöveges képernyőn.
A grafikus képernyőn tetszőleges értéket adhatsz meg.
DX A kívánt sor száma * 8, mint végérték, szöveges képernyőn.
A grafikus képernyőn tetszőleges értéket adhatsz meg.
Visszatérés: NINCS VISSZATÉRÉSI ÉRTÉK
Összes vízszintes és függőleges mozgás lekérdezése:
Bemenet: AX 11
Visszatérés: CX 80 oszlopos képernyőn:
CX/8 Összes vízszintes mozgás a sorban
(Ha negatív, akkor több volt a BALRA mozgás, ha pozitív, akkor több volt a JOBBRA mozgás.)
40 oszlopos képernyőn:
CX/8 Összes vízszintes mozgás a sorban
(Ha negatív, akkor több volt a BALRA mozgás, ha pozitív, akkor több volt a JOBBRA mozgás.)
DX DX/8 Összes függőleges mozgás.
(Ha negatív, akkor több volt a FÖLFELÉ mozgás, ha pozitív, akkor több volt a LEFELÉ mozgás.)
(A CX,DX -ben szereplő érték "mickey" -ben értendő, ami kb. 1/200 inch. Alapméretezésben
1 "mickey" egy képpontot jelent.)
Képernyőlap megadása, amelyre az egérkurzor kerül:
Bemenet: AX 29
BX A képernyőlap száma(Függ a video módtól.)
Visszatérés: NINCS VISSZATÉRÉSI ÉRTÉK
Melyik képernyőlapon van az egérkurzor:
Bemenet: AX 30
Visszatérés: BX A képernyőlap száma
Mint láthattad, előfordultak bitek is a táblázatban. Ne rémülj meg tőlük! A használatuk
nem nehéz. A következő példaprogram bemutatja a használatukat.
/* *** EGER2.C - Egy masodik egyszeru peldaprogram C -re. *** */
#include   /* printf() */
#include /* int86() */
#include   /* getch() */
/* *** Az altalunk irt egervezerlo. *** */
#define EGER(k,l,m,n);
inregs.x.ax=k;
inregs.x.bx=l;
inregs.x.cx=m;
inregs.x.dx=n;
int86(0x33,&inregs,&outregs);
AX=outregs.x.ax;
BX=outregs.x.bx;
CX=outregs.x.cx;
DX=outregs.x.dx
/* *** MAIN *** */
void main(void)
{
union REGS inregs, outregs; /* Az eger hasznalatahoz KELL! */
int AX,BX,CX,DX;   /* Az eger hasznalatahoz KELL! */
clrscr();
EGER(0,0,0,0);
if(!AX)
{
printf("nHiba: Nem talaltam egerdrivert!nAz eger nem inicialhato!n");
/* *** Nem talaltunk egertet. Kilepes *** */
return;
}
EGER(1,0,0,0);   /* Legyen lathato az egerkurzor. */
printf("Egerhasznalat demo. A kilepeshez nyomj le egy billentyut!");
while (!kbhit()) /* Billentyulenyomasig ismetles. */
{
EGER(3,0,0,0);   /* Egerkurzor lekerdezese. */
gotoxy(1,2);
clreol();
if(BX==1) { printf("Bal gomb lenyomva. BX ‚rt‚ke: %d",BX); delay(5); }
if(BX==2) { printf("Jobb gomb lenyomva. BX ‚rt‚ke: %d",BX); delay(5); }
if(BX==3) { printf("K”z‚ps‹ gomb lenyomva. BX ‚rt‚ke: %d",BX); delay(5); }
}
EGER(2,0,0,0);   /* Ne legyen lathato az egerkurzor. */
return;
}

Nos hát ennyi volt. Természetesen van még több funkció is, de ezek itt a legfontosabbak.
Ezzel befejeztem az alapvető egérkezelésről szóló részt, a következő alkalommal a
grafikus módban való egérkezelést mutatom be.

PET

PET



2000. április 13., csütörtök 00:00


címlap zóna archívum




© 1999-2007, Internet Sopron Egyesület