Zadatak1: Očitavanje pozicije i tastera miša uz korišćenje događaja MouseMove.

Prvo treba kreirati Windows Forms Aplikaciju u kojoj će se koristiti događaj miša MouseMove. Kako se miš pomera iznad prve forme treba da se na neki način prikaže pozicija miša i stanje tastera. 

  • Na prvoj i jedinoj formi treba postaviti tri labele za potrebe zadatka: u prvoj i drugoj labeli će biti prikazana trenutna pozicija miša, dok će u trećoj biti prikazano koji je taster pritisnut prilikom kretanja miša.
  • Kliknuti bilo gde na formu i u prozoru Properties potražiti sliku munje - tamo gde su svi događaju koji mogu da se povežu sa formom. 
  • Potražiti MouseMove i dvoklik pored njega - kreiraće se skeleton koda gde se samo piše šta će da se desi ako se miš pomeri iznad forme.

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
label1.Text = "pozicija miša je :" + e.X + ", "+e.Y;
label2.Text = String.Format("Pozicija miša je X: {0}, Y: {1}", e.X, e.Y);
label3.Text = e.Button.ToString();
}

Klikom na se može videti kako smo to uradili na času. U prvoj labeli se prikazuje trenutna pozicija miša i to na način kako smo do sada navikli. U drugoj labeli se koristi formatirani prikaz - koriste se vitičaste zagrada na mestima gde se ubacuju podaci, a promenljive ili vrednosti koje se trebaju prikazati se navode nakon stringa. Tamo gde je {0} ide vrednost koja je prva posle stringa, tamo gde je {1} ide vrednost koja je druga posle stringa i tako redom. Apsolutno je svejedno koji od ova dva načina se koristi. Ovde je bio cilj da se oba načina pokažu, a vi koristite onaj koji vam najviše odgovara.

Događaj MouseMove se generiše za svaki pokret miša kada se miš nalazi iznad Form1 (u ovom slučaju). Prvi argument u zagradama predstavlja objekat nad kojim se događaj prati, a drugi argument su sve informacije o mišu - pozicija, dugmići, ... Pristupanje tim informacijama se vrši tako što se navede slovo koje je postavljeno za te informacije (e), nakon toga ide tačka (.) i posle se navodi koje svojstvo nam je potrebno: X i Y za poziciju, Button za tastere koji s upritisnuti (u ovom primeru).  

Koje god svojstvo da nam je potrebno, ako hoćemo da ga prikažemo u labeli, koristi se svojstvo labele Text, a ono svojstvo koje prikazujemo treba konvertovati u string -  treba koristiti ToString() - kao u primeru za label3.

Pažnja: Događaj se prati samo ako je forma u fokusu! Ako se klikne na neku od labela, tada će labela biti u fokusu a ne forma, pa ovaj događaj neće raditi.



Zadatak2: u dodatnoj formi vršiti periodično očitavanje pozicije miša
  • Prvo treba dodati novu formu u projekat: desni klik na naziv projekta - Add - New item... - Form (Windows Form)    .... slobodno ostavite podrazumevani naziv Form2
  • postaviti labelu za prikaz pozicije i podesiti veličinu slova, font i boju
  • dodati tajmer (slobodno ostavite podrazumevani naziv timer1). Odmah u Property postaviti da je Enabled=true.
  • dvoklikom na tajmer se generiše skeleton koda koji se izvršava svakih 100ms (vi stavite drugo vreme ako želite)
    • jednostavno preuzeti poziciju miša korišćenjem klase Cursor i prikazati je u labeli
  • ne zaboravite da na prvu formu treba postaviti dugme za prelazak na drugu formu

var pozicijaMisa = Cursor.Position;
lblPozicija.Text = String.Format("X: {0}, Y: {1}", pozicijaMisa.X, pozicijaMisa.Y);

Klikom na se može videti deo koda unutar Timer_Tick - onako kako smo to uradili na času.

  • Kada god niste sigurni koji tip podataka treba koristiti, slobodno koristite var.
  • U ovom slučaju je u pitanju pozicija miša: zato koristimo pomoćnu promenljivu pozicijaMisa i dodeljujemo joj stvarnu poziciju miša u tim momentu - u momentu izvršenja koda.
  • Tip podataka jeste Point (tačka) koja ima X i Y delove koji nam trebaju, a kompjler će na osnovu ostatka koda proceniti koji tip podataka da doda promenljivoj.
    • Na kraju se u labelu postavljaju X i Y delovi pozicije miša
  • Ovo sve radi na Tick tajmera - svakih 100ms (ili period koji ste izabrali). Zato može da izgleda da sve ovo radi sporije nego prilikom očitavanja miša na prvoj formi.

Ovde se prikazuje pozicija miša na EKRANU, bez obzira na poziciju forme !


Zadatak2a: u istoj toj dodatnoj formi vršiti periodično očitavanje tastera miša

.. za bolje učenike..

Koristimo posebnu funkciju za očitavanje stanja tastera miša i pozivamo je iz Timer_Tick:

private void timer1_Tick(object sender, EventArgs e)
{
var pozicijaMisa = Cursor.Position;
lblPozicija.Text = String.Format("X: {0}, Y: {1}", pozicijaMisa.X, pozicijaMisa.Y);

tasteri();
}

U nastavku je postavljena - da možete videti kako je realizovana funkcija tasteri():

A zašto je sve to tako?

Koristimo

if ((MouseButtons & MouseButtons.Left) > 0)
levo = "Pritisnut je LEVI taster miša";
else
levo = "";

MouseButtons koje se prvo spominje piše da je enumeracija nad kojom mogu da se izvode bitske operacije ....to izlazi iz okvira plana ovog predmeta pa ne ulazimo u takve detalje ....

Zbog toga sledi malo jednostavnije objašnjenje za MouseButtons: 

Shvatite MouseButtons kao neku reč u memoriji koja je, kao i sve memorijske reči, kombinacija nula i jedinica. Svaki bit unutar te memorijske reči ima neku ulogu. Recimo da je bit na poziciji x zadužen da prikaže da li je pritisnut levi taster miša - ako je pritisnut onda je taj bit jedinica, a ako nije pritisnut onda je taj bit nula. Mi ne znamo na kojem je mestu taj bit, ali znamo da postoji konstanta koju su nazvali MouseButtons.Left i koja u sebi ima sve nule, sem na tom mestu - tu ima jedinicu. Kada se izvrši bitsko AND između MouseButtons i MouseButtons.Left dobiće se neki rezultat - ako je pritisnut  levi taster miša na tom mestu će biti jedinica, a ako nije, onda će biti nula. Iz toga sledi da, ako je pritisnut levi taster miša, rezultat operacije će u sebi na nekom mestu imati jedinicu, a ako nije pritisnut levi taster miša, rezultat te operacije će na svim mestima imati nule. Zbog toga i pitanje glasi:

if ((MouseButtons & MouseButtons.Left) > 0)
To znači da je pitanje u stvari: Da li je na mestu bita zaduženog za levi taster miša postavljena jedinica ili nije

Dodatno, ilustrativno objašnjenje bitske operacije AND (za koju je oznaka &)
- SLIKA ilustracije operacije bitwise AND -

Ovde se radi operacija bitsko AND - bit sa bitom, i samo ako su oba bita jedinice na tom mestu će rezultujući bit biti jedinica


Šta smo postigli u našoj aplikaciji:

  • ako se pritisne levi taster miša pojavljuje se tekst da je levi taster miša pritisnut
  • ako se pritisne desni taster miša pojavljuje se tekst da je desni taster miša pritisnut
  • ako se pritisne srednji taster miša pojavljuje se tekst da je točkić miša pritisnut
  • ako treba, pogledajte ponovo i šta se postavlja u labele.



Zadatak3: dodati još jednu formu u kojoj se radi sa događajem MouseDown
  • Kada se pritisne neki od tastera miša treba da u labeli piše koji od tastera je pritisnut
  • Ako se pritisne levi taster miša da se boja pozadine promeni u plavu, a ako se pritisne desni taster miša da se boja pozadine promeni u crvenu
  • koraci po kojima se radi:
    • Dodati još jednu formu u projekat. Naziv forme možete ostaviti da je Form3.
    • Na formu postaviti samo jednu labelu sa jako velikim slovima
    • Generisati događaj MouseDown za formu:
      • postaviti formu u fokus, 
      • u Property prozoru pronaći događaj MouseDown za formu i 
      • dvoklikom generisati skeleton koda i
      • tu pisati šta se događa kada se klikne na tastere miša
  • je postavljeno u obliku

Iz prethodnih objašnjenja ste naučili da se sa e ovde prenose sve informacije o događajima miša. Zbog toga se sa e.Button proverava koji je u pitanju taster i to se prikazuje u labeli na ovoj formi. Dodatno, promena boje pozadine na formi se vrši samo kada se pritisnu levi ili desni taster miša, a ne i točkić. 



Zadatak4: dodati još jednu formu za događaje tastature

Dodati još jednu formu u kojoj će se koristiti događaji tastature: 

  • kada se pritisne bilo koji taster na tastaturi da se prikaže koji je to taster, 
  • ako se pritisne taster L da se zatvori kompletna aplikacija (sve forme),
  • ako se pritisne taster F da se zatvori samo ta forma.

Koraci po kojima se radi:

  • Dodati još jednu formu u projekat. Naziv forme možete ostaviti da je Form4.
  • Na formu postaviti samo jednu labelu sa jako velikim slovima
  • Generisati događaj KeyDown za formu - događaj kada se pritisne taster na tastaturi:

Last modified: Tuesday, 16 December 2025, 9:07 AM