Sunteți pe pagina 1din 4

Seciunea 2

LUCRAREA NR. 2
Tratarea evenimentelor in Delphi Obiective tratarea evenimentelor in Borland Delphi

Descrierea lucrarii n orice program creat in Delphi, evenimentele sunt elemente importante. n cele ce urmeaz vor fi descrise principalele evenimente care vor fi aplicate n cadrul lucrrilor de laborator. Odat ce ai determinat momentul n care s se manifeste un anumit eveniment, trebuie s definii modul n care acel eveniment va fi gestionat. Iat n continuare cteva exemple simple: Notificare simpl Un eveniment de tip notificare anun utilizatorul programului c un anumit eveniment particular a avut loc, fr a conine informaii care s defineasc locul sau momentul la care s-a produs. Notificrile utilizeaz comanda TnotifyEvent care este definit de un singur parametru, emitorul evenimentului. Notificrile reprezint procese de sens unic, neexistnd niciun mecanism pentru realizarea unui feedback sau pentru prevenirea unei notificri ulterioare. Moduri specifice de gestionare a evenimentelor n unele cazuri nu este suficient a afla ce eveniment a avut loc i asupra crui element component a acionat. De exemplu, dac evenimentul este de tipul apsare de tast, utilizatorul va dori s tie ce tast a fost apasat ceea ce necesit introducerea unor parametrii suplimentari. Dac evenimentul a fost generat ca rspuns la un mesaj este foarte probabil ca parametrii asociai evenimentului s vin direct din parametrii mesajului. Primirea de informaii de la un eveniment Deoarece toate evenimentele constau n proceduri, singurul mod n care se pot obine informaii napoi de pe urma unui eveniment este prin intermediul unei variabile. De exemplu, toate evenimentele de tastatur OnKeyDown, OnKeyUp, i OnKeyPress fac referire la valoarea tastei care este apsat prin intermediul variabilei Key. Evenimente introduse de tastatur Evenimentele ce au loc la efectuarea unei operaii tip apsare de tast sunt: - OnKeyDown; - OnKeyUp; - OnKeyPress; OnKeyDown Evenimentul poate fi folosit pentru a specifica modul n care programul va rspunde la o apsare de tast. Evenimentul poate rspunde aciunii oricrei taste, inclusiv taste funcie i taste combinate cu Shift, Alt i Ctrl i butoane de mouse.
61

Programarea calculatoarelor

OnKeyPress Poate fi folosit atunci cnd un utilizator apas o singur tast specific. OnKeyUp Acest eveniment apare atunci cand utilizatorul elibereaza o tasta care a fost apasata anterior. Acest eveniment poate raspunde tuturor tastelor de pe tastatura, inclusiv tastele functionale si combinatii de taste (folosind tastele Shift, Alt si Ctrl). Din punctul de vedere al recepionrii, evenimentele ce au loc la efectuarea unei operaii de tastare sunt recepionate pe mai multe nivele. Nivelul aplicaie evenimentul Application.OnMessage Sunt rare situaiile n care este nevoie s fie interceptat apsarea unei taste la acest nivel, dar este important de tiut c acest nivel exist. Nivelul tast-scurt (short-cut key) In momentul n care ai definit o tast scurt, ca de exemplu cele furnizate pentru apelarea unor meniuri, apsarea de tast este interceptat nainte ca formularul s depisteze acest lucru. Nivelul formularului formularul conine o proprietate KeyPreview (previzualizarea tastei) care permite codificarea global a evenimentelor de tastare. Nivelul componentelor atunci cnd programai evenimente de tip apsare de tast la nivelul componentelor, componentul vizat capt proprietatea de a intercepta apsarea de tast. Fiecare apsare genereaz un eveniment de tip OnKeyDown i OnKeyUp. n plus, tastele care au un echivalent n cod ASCII genereaz un eveniment tip OnKeyPress. n mod evident, codul pe care l generai nu trebuie s intercepteze orice apsare de tast, dar este important a se cunoate ordinea n care evenimentele de tastare sunt procesate. Evenimente introduse de mouse Aplicaiile pe care le creai pot de asemenea s rspund la aciuni efectuate de mouse: buton mouse apsat, micarea mouse-ului, eliberare buton mouse apsat. De asemenea poate rspunde la un clic. Evenimentele OnMouseDown, OnMouseMove i OnMouseUp Atunci cnd o aplicaie detecteaz o aciune a mouse-ului, apeleaz modul de derulare a evenimentului aa cum l-ai definit prin intermediul a 5 parmetri. - Parameter; - Sender obiectul care detecteaz aciunea mouse-ului; - Button indic butonul mouse-ului care a fost implicat (mbLeft, mbMiddle, sau mbRight); - Shift indic starea pe care o au tastele Alt, Ctrl i Shift la momentul introducerii aciunii mouse-ului; - X,Y coordonatele la care a avut loc evenimentul; Iat n exemplul de mai jos codul care afieaz un text n locul n care este apsat butonul mouse-ului. Codul folosete parametrii X i Y i apeleaz metoda TextOut pentru a afia un text.
procedure TForm1.FormMouseDown(Sender: Shift: TShiftState; X, Y: Integer); begin end; TObject; Button: TMouseButton;

62

Seciunea 2

n cel de-al doilea exemplu, codul conduce la afiarea unui text (Aici!) n locul din formular n care a fost efectuat clic cu mouse-ul.
procedure TForm1.FormMouseDown(Sender: Shift: TShiftState; X,Y: Integer); begin Canvas.TextOut(X, Y, 'Aici!'); end; TObject; Button: TMouseButton;

{ write text at (X, Y) }

Atunci cnd aplcaia ruleaz, se poate apsa un buton al muse-ului, iar ca rezultat se va obine afiarea textului Aici! n locul n care fost efectuat aciunea. Se poate ns ca n locul apariiei liniei de text amintite, aplicaia s stabileasc poziia curent de lucru n punctul de coordonate X,Y n care operatorul a apsat butonul mouse-ului.
procedure TForm1.FormMouseDown(Sender: TObject; Shift: TShiftState; X,Y: Integer); begin Canvas.MoveTo(X, Y); { set pen position } end; Button: TMouseButton;

Apsarea butonului mouse-ului stabilete poziia creionului de lucru i implicit punctul de start al liniei care va fi desenat. Pentru a trasa o linie pn la punctul n care utilizatorul elibereaz butonul mouse-ului este nevoie de un rspuns la evenimentul mouse-ului OnMouseUp. Evenimentul n mod uzual merge la obiectul asupra cruia se afl cursorul mouse-ului atunci cnd utilizatorul apas butonul. Pentru a ne edifica asupra modului n care pot fi definite evenimentele ce in de mouse s urmarim exemplul urmtor n care este trasat o linie de la punctul n care a fost apsat butonul mouse-ului pn n punctul n care a avut loc eliberarea lui.Utilizatorul nu poate vedea linia trasat dect n momentul eliberrii butonului mouse-ului.
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; TShiftState; X,Y: Integer); begin Canvas.LineTo(X, Y); { draw line from PenPos to (X, Y) } end; Shift:

Evenimentul OnMouseMove merge la obiectul ce se afla sub cursorul mouse-ului n momentul n care utilizatorul a apsat butonul. Acest lucru d utilizatorului un mic rgaz pentru obinerea unui feed-back intermediar prin trasarea temporar a unor linii n timpul micrii mouse-ului. Pentru a rspunde la micrile mouse-ului se utilizeaz evenimentul OnMouseMove pentru care trebuie definite moduri de gestionare. Exemplul care urmeaz utilizeaz evenimentul amintit pentru a desena forme intermediare n cadrul unui formular n timp ce utilizatorul pstreaz apsat butonul mouse-ului. Modul n care este gestionat evenimentul duce la trasarea unei linii n formular pn la locul n care are loc evenimentul OnMouseMove.
procedure TForm1.FormMouseMove(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X,Y: Integer); begin Canvas.LineTo(X, Y); { draw line to current position } end; 63

Programarea calculatoarelor

Evenimentele mouse move apar atunci cnd nu este apsat butonul mouse-ului. Exercitii Sa se realizeze o aplicatie care contine un formular, doua casute de text (Edit1, Edit2), doua etichete (Label1, Label2) si doua butoane (Button1 si Button2). Sa se trateze urmatoarele evenimente: 1. Cand se face click pe Button1 sa se afiseze in Label1 textul s-a facut click pe butonul 1. 2. Cand se face dublu click pe Button2 sa se afiseze in Label2 textul s-a facut dublu click pe butonul 2. 3. Cand se face click in formular, textul din ambele etichete Label1 si Label2 sa se actualizeze in s-a facut click in formular. 4. Cand se face click pe casuta de text Edit1, sa se afiseze in Label1 textul Acum puteti introduce text in casuta de text. 5. Cand se apasa o tasta in interiorul casutei de text Edit1 sa se copieze in casuta de text Edit2 acelasi text introdus in casuta de text Edit1.

64

S-ar putea să vă placă și