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
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.
|