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