Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Calculatoare


Qdidactic » stiinta & tehnica » informatica » calculatoare
Gestiunea mouse-ului



Gestiunea mouse-ului


GESTIUNEA MOUSE-ULUI


In Visual Basic pentru urmarirea activitatii mouse-ului sunt utilizate trei evenimente de baza:

MouseDown - utilizatorul a apasat un buton de mouse;

MouseUp - utilizatorul a eliberat un buton de mouse;

MouseMove - un buton de mouse fiind tinut apasat, utilizatorul muta (gliseaza) mouse-ul.

Prototipul procedurii atasate evenimentului MouseDown este urmatorul:

daca butonul de mouse este apasat pe o forma standard:

Private Sub Form_MouseDown(Button As Integer,Shift As Integer, x As Single, y As Single)

daca butonul de mouse este apasat pe o forma MDI (interfata multidocument):

Private Sub MDIForm_MouseDown(Button As Integer,Shift As Integer, x As Single, y As Single)



daca butonul de mouse este apasat pe un control avand numele NumeControl:

Private Sub NumeControl_MouseDown( [Index As Integer,] Button As Integer, Shift As Integer, x As Single, y As Single)

Prototipul procedurii atasate evenimentului MouseUp este urmatorul:

daca butonul de mouse este eliberat pe o forma standard:

Private Sub Form_MouseUp(Button As Integer,Shift As Integer, x As Single, y As Single)

daca butonul de mouse este eliberat pe o forma MDI (interfata multidocument):

Private Sub MDIForm_MouseUp(Button As Integer,Shift As Integer, x As Single, y As Single)

daca butonul de mouse este eliberat pe un control avand numele NumeControl:

Private Sub NumeControl_MouseUp( [Index As Integer,] Button As Integer, Shift As Integer, x As Single, y As Single)


Semnificatia parametrilor este centralizata in tabelul urmator:


<tabel>


*Parametru

*Descriere


*Index

*Livreaza o valoare intreaga prin care se identifica univoc controlul in cazul in care controlul respectiv este intr-un tabel de controale.


*Button

*Livreaza o valoare intreaga prin care se poate identifica care buton de mouse a fost apasat (MouseDown) sau eliberat (MouseDown). in parametrul Button:

bitul 0 (cel mai putin semnificativ) corespunde butonului stang;

bitul 1 corespunde butonului drept;

bitul 2 corespunde butonului din mijloc.

Acesti biti corespund valorilor 1, 2 si 4. Din cei trei biti numai un singur bit este pozitionat pe 1 (care corespunde butonului actionat).


*Shift

*Livreaza o valoare intreaga prin care se poate analiza starea tastelor SHIFT, CTRL si ALT in momentul in care se apasa sau se elibereaza un buton de mouse. in parametrul Shift

bitul 0 (cel mai putin semnificativ) corespunde tastei SHIFT;

bitul 1 corespunde tastei CTRL;

bitul 2 corespunde tastei ALT.

Acesti biti corespund valorilor 1,2 si 4. Un bit este pozitionat pe 1 atunci cand tasta respectiva este apasata. Pot fi actionate simultan toate cele trei taste, sau numai unele taste sau tastele pot fi neactionate. De exemplu, daca sunt apasate simultan tastele CTRL si ALT, atunci valoarea livrata de parametrul Shift va fi egal cu 2 + 4 = 6.


*x,y

*Returneaza un numar care specifica locatia curenta a cursorului de mouse (in raport cu un control sau o forma). Valorile x si y intotdeauna sunt exprimate in sistemul de coordonate stabilit prin intermediul proprietatilor ScaleHeight, ScaleWidth, ScaleLeft si ScaleTop


</tabel>


Pentru testarea valorii parametrului Button pot fi utilizate urmatoarele constante predefinite:


<tabel>


*Constanta

Valoare

Semnificatie


*vbLeftButton


A fost actionat butonul stang.


*vbRightButton


A fost actionat butonul drept.


*vbMiddleButton


A fost actionat butonul din mijloc.


</tabel>


Pentru testarea valorii parametrului Shift pot fi utilizate urmatoarele constante predefinite:


<tabel>



*Constanta

Valoare

Semnificatie


*vbShiftMask


Este apasata tasta SHIFT.


*vbCtrlMask


Este apasata tasta CTRL.


*vbAltMask


Este apasata tasta ALT.


</tabel>


Intr-o procedura se poate testa orice combinatie de conditii, de exemplu daca este apasat butonul stang de mouse si este apasata tasta Ctrl:


Dim StangApasat As Boolean, CtrlApasat As Boolean

StangApasat (Button And vbLeftButton) > 0

CtrlApasat (Shift And vbCtrlMask) > 0

If StangApasat And CtrlApasat Then


<titlu> Evenimentul MouseMove

Este declansat atunci, cand un buton de mouse este apasat si utilizatorul muta (gliseaza) mouse-ul pe o forma sau pe un control. Evenimentul este generat in mod continuu atata timp, cat cursorul trece prin obiect (adica cursorul este in interiorul chenarului aferent controlului sau formei).

Prototipul procedurii atasate evenimentului MouseMove este urmatorul:

mutarea cursorului de mouse pe o forma standard:

Private Sub Form_MouseMove(Bwton As Integer, Shift As Integer, x As Single, y As Single)

mutarea cursorului de mouse pe o forma MDI (interfata multidocument):

Private Sub MDIForm_MouseMove(Button« As Integer, Shift As Integer, x As Single, y As Single)

mutarea cursorului de mouse pe un control care are numele NumeControl'.

Private Sub NumeControl_MouseMove( [Index As Integer,] Button As Integer, Shift As Integer, x As Single, y As Single)


Semnificatia parametrilor este asemanatoare cu cea descrisa la evenimentele MouseDown si MouseUp, cu urmatoarea deosebire: parametrul Button al procedurii MouseMove indica starea curenta a tuturor butoanelor (unele butoane sunt apasate, toate butoanele sunt apasate sau nici un buton nu este apasat), in timp ce la evenimentele MouseDown si MouseUp acest parametru indica starea unui singur buton.


EXEMPLUL1:

Aplicatia urmatoare ilustreaza prelucrarea evenimentului MouseDown atasat formei, in momentul apasarii butonului se afiseaza coordonatele mouse-ului precum si tipul butonului utilizat. Fereastra afisata de aplicatie poate avea aspectul urmator:


Fig.pag.285 sub forma unei ferestre.


Textul sursa al programului este:


Option Explicit


Private Sub Form_MouseDown(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

CurrentX X

CurrentY = Y

Select Case Button

Case vbLeftButton

Print 'Butonul stang (' & X & ',' & Y & ')'

Case vbRightButton

Print 'Butonul drept (' & X & ',' & Y & ')'

Case vbMiddleButton

Print 'Butonul din mijloc (' & X & ',' & Y &

End Select

End Sub


EXEMPLUL 2:

in aceasta aplicatie la fiecare declansare a evenimentului MouseDown atasat formei se uneste cu un segment de dreapta pozitia actuala de desenare (CurrentX, CurrentY) cu punctul (X, V) a formei in care s-a efectuat un clic de mouse. Fereastra afisata de aplicatie poate avea aspectul alaturat.


Textul sursa al programului este:


Private Sub Form_MouseDown(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

Line -(X, Y)

End Sub


EXEMPLUL 3:

Aplicatia urmatoare ilustreaza modul de prelucrare a evenimentelor MouseDown si MouseMove atasate formei. Se mentioneaza faptul ca nu se apeleaza procedura aferenta evenimentului MouseMove pentru fiecare pozitie a cursorului de mouse. Butonul stang fiind apasat, se modifica pozitia mouse-ului. Pentru fiecare eveniment MouseMove receptionat se va desena cate un dreptunghi. Dimensiunea si densitatea dreptunghiurilor desenate depin­de de viteza de deplasare a mouse-ului. Fereastra afisata de aplicatie poate avea aspectul alaturat.


Fig.pag.286 sub forma unei ferestre.


Textul sursa al programului este:


Option Explicit

Dim PozInitX As Integer

Dim PozInitY As Integer


Private Sub FormJMouseDown(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

PozInitX X

PozInitY Y                           

Cls

End Sub


Private Sub Form_MouseMove(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

Dim dx As Integer, dy As integer, PozActX As Integer,_

PozActY As Integer

PozActX X

PozActY Y

dx Abs(PozActX PozInitX)

dy Abs(PozActY PozInitY)

Line (PozInitX dx, PozInitY – dy) – (PozInitX + dx,_

PozInitY + dy), , B

End Sub


EXEMPLUL

Aplicatia urmatoare ilustreaza prelucrarea evenimentelor MouseMove si MouseDown atasate formei. Daca se apasa si se elibereaza butonul stang, atunci se sterge fereastra aplicatiei. Butonul stang fiind apasat se modifica pozitia mouse-ului. Pentru fiecare eveniment MouseMove receptionat se memoreaza pozitia actuala a cursorului. Densitatea pozitiilor memorate depinde de viteza de deplasare a mouse-ului. Vor fi memorate cel mult MaxPuncte = 1500 puncte. Pozitiile fiind memorate intr-un tabel, prin actionarea butonului drept fiecare punct al multimii va fi legat cu celelalte puncte, prin segmente de dreapta. Fereastra afisata de aplicatie poate avea aspectul alaturat.


Fig.pag.286 sub forma unei ferestre.


Textul sursa al programului este:


Option Explicit

Private Const MaxPuncte

private Type Puncte

X As Integer

Y As Integer

End Type

Dim Contor As Integer

Dim Puncte(0 To MaxPuncte) As Puncte


Private Sub Form_MouseDown(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

Dim i As Integer

Dim j As Integer

Cls

If Button vbLeftButton Then

Contor = 0

ElseIf Button vbRightButton Then

For i = 0 To Contor - 2

For j = i To Contor - 1

CurrentX Puncte(i).X

CurrentY Puncte(i).Y

Line (CurrentX, CurrentY)-(Puncte(j).X, Puncte(j).Y) Next j

Next i

End If

End Sub

Private Sub Form_MouseMove(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

If Contor < MaxPuncte Then

Puncte(Contor).X X

Puncte(Contor).Y = Y

Contor = Contor + 1

End If

End Sub


EXEMPLUL 5:

Aplicatia urmatoare permite desenarea traseului mouse-ului, astfel ca se pot realiza desene asemanatoare celor pe care le facem cu un creion pe o foaie de hartie, in program sunt prelucrate evenimentele MouseDown, MouseUp si MouseMove atasate formei. Fereastra afisata de aplicatie poate avea aspectul alaturat.


Fig.pag.287 sub forma unei ferestre.


Textul sursa al programului este:


Option Explicit

Dim ButonApasat As Boolean

Private Sub Form_Load()

ButonApasat False

DrawWidth

ForeColor RGB(

End Sub


Private Sub Form_MouseDown(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

If Not ButonApasat Then

ButonApasat True

GurrentX X

CurrentY Y

End If

End Sub


Private Sub Form_MouseMove(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

If ButonApasat Then Line (CurrentX, CurrentY)-(X, Y)

End Sub


Private Sub Form_MouseUp(Button As Integer,_

Shift As Integer, X As Single, Y As Single)

If ButonApasat Then ButonApasat False

End Sub





Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright