Pascal I.      Pascal II.      Delphi       Linkek     
Pascal II.
01. Eljárások, függv...
01. Gyakorló feladatok
02. Felsorolt típus, ...
02. Gyakorló feladatok
03. Állományok kezelése
03. Gyakorló feladatok
04. Unitok, CRT unit
04. Gyakorló feladatok
05. DOS unit, rendezé...
05. Gyakorló feladatok
06. Rekurzió, quicksort
06. Gyakorló feladatok
07. Backtracking
07. Gyakorló feladatok
08. GRAPH unit
08. Gyakorló feladatok
09. Kép mozgatása
09. Gyakorló feladatok
10. Winmouse unit
10. Gyakorló feladatok
11. Dinamikus adatsze...
11. Gyakorló feladatok
12. Dinamikus adatsze...
12. Gyakorló feladatok
13. Dinamikus adatsze...
13. Gyakorló feladatok
Programozás 2 (Pascal)


     10 WinMouse unit
   

  • a winmouse modul használata

  • kitöltés egérkattintásra véletlenszerű színnel

        
     10.1 A winmouse modul használata

     A FreePascal windows alatt futó verziójában létezik egy standard modul - a winmouse unit - egérkezelésre. Ha használni szeretnénk a programunkban, mindenekelőtt ki kell egészítenünk programunk uses részét ezzel a winmouse modullal.

     Ezek után a program elején az egeret inicializálnunk kell az initmouse paranccsal. Ha ezt megtettük, használhatjuk a következő függvényeket és eljárásokat:

  • lpressed - akkor ad vissza igaz (true) értéket, ha a felhasználó lenyomta a bal (left) egérgombot,
  • mpressed - akkor ad vissza igaz (true) értéket, ha a felhasználó lenyomta a középső (middle) egérgombot,
  • rpressed - akkor ad vissza igaz (true) értéket, ha a felhasználó lenyomta a jobb (right) egérgombot,
  • getmousestate(mposx,mposy,state) - az egér állapotát (kurzor pozícióját és az egérgombok helyzetét) kérhetjük le a segítségével. A parancs kiadásának pillanatában az egérkurzor koordinátái bekerülnek az mposx, mposy változókba. A state változóba az egérengombok helyzete kerül be. Mindhárom változót longint típusúnak kell deklarálnunk.
       
    A harmadik, state paraméter első bitje adja meg a bal egérgomb helyzetét (0 - felengedve, 1 - lenyomva), a második bitje a jobb egérgomb helyzetét (0 - felengedve, 1 - lenyomva) és a harmadik bitje a középső egérgomb helyzetét (0 - felengedve, 1 - lenyomva). A programunkban az alábbi feltételek segítségével tudjuk őket ellenőrni:
       
    If (State and LButton) = LButton Then ...
     
    { ha a bal egergomb le van nyomva }
      
    If (State and RButton) = RButton Then ...
     
    { ha a jobb egergomb le van nyomva }
     

    If (State and MButton) = MButton Then ...
     
    { ha a középső egergomb le van nyomva }
     
    Az LButton, RButton és MButton a wincrt unitban definiált konstansok, ezért ezeket nem kell a programunkban k
    ülön deklarálnunk. Értékeik a következő képpen vannak definiálva:
      
         LButton
    = 1
         RButton = 2
         MButton = 4

         
     10.2 Kitöltés egérkattintásra véletlenszerű színnel

     Az alábbi példa szemlélteti az egér használatát a grafikus ablakban. A példában kirajzolunk fehér színnel 10 körvonalat véletlenszerű sugárral és hellyel. Ha az egérrel valamelyik rész belsejébe kattintunk (tehát az egér alatti szín nem fehér, vagyis kisebb mint 15), akkor az egér koordinátáira kiöntünk egy véletlenszerűen kiválasztott színt 1-től 14-ig. Ezzel valójában befestjük azt a részt, ahová az egérrel kattintottunk.

program Pelda31;
uses graph, wincrt, winmouse;
var gd,gm: integer;
    ch:char;
    i:integer;
    mposx, mposy, state: longint;
begin
 gd := d4bit;
 gm := m640x480;
 initgraph(gd,gm,'');
 initmouse;
 randomize;
 for i:=1 to 10 do
   circle(random(640),random(480),150);
 repeat
   if keypressed then ch:= readkey;
   if lpressed then
     begin
     repeat until not lpressed;
     getmousestate(mposx,mposy,state);
     if getpixel(mposx,mposy)<15 then
       begin
       setfillstyle(solidfill,random(14)+1);
       floodfill(mposx,mposy,15);
       end;
     end;
 until ch = #27;
 closegraph;
end.

     Figyelhetjük meg a forráskódban a bal egérgomb lenyomását tesztelő feltételt: ha megnyomtuk az egér bal gombját (if lpressed then), akkor egy ciklus segítségével teszteljük az egeret mindaddig, amíg nem engedjük fel (repeat until not lpressed). Ezzel valójában várunk az egérgomb felengedésére és csak utána festjük ki a kiválasztott részt véletlenszerű színre.

       

(C) 2004-2013, PaedDr. Végh Ladislav, Komárno, Szlovákia