User Tools

Site Tools


ro:clickb

ClickB (Funcție)

Engleză: CLICK = clic; Button = buton

Format

clickb
clickb ( )

Întoarce un număr_întreg.

Descriere

Întoarce butonul cu care s-a dat clic cu mouse-ul ultima dată în fereastra grafică. Întoarce valoarea 0 dacă nu s-a făcut clic.

Valori
ConstantăValoareObservații
MOUSEBUTTON_NONE0Niciun buton
MOUSEBUTTON_LEFT1Butonul din stânga
MOUSEBUTTON_RIGHT2Butonul din dreapta
MOUSEBUTTON_CENTER4Butonul din mijloc
MOUSEBUTTON_DOUBLECLICK32S-a înregistrat un dublu clic (utilizat doar de funcția ClickB)
2017/09/11 13:20 · junior-root

Exemplu

loop:
cls
print "mousex = "; mousex
print "mousey = "; mousey
print "mouseb = "; mouseb
print
print "clickx = "; clickx
print "clicky = "; clicky
print "clickb = "; clickb

pause 0.05
goto loop

Exemplul doi

# șterge orice clic făcut mai devreme
clickclear
# așteaptă pentru ca utilizatorul să dea clic
print "Fă clic pe fereastra grafică"
while clickb = 0
  pause .01
endwhile
# Arată unde s-a făcut clic
print "Utilizatorul a dat clic la (x=" + clickx + ", y=" + clicky + ")"

Notă

Funcția ClickB va întoarce întotdeauna valoarea unui singur buton, deoarece un utilizator nu poate da clic cu două butoane în exact același moment.
Dacă se dorește să se verifice dacă utilizatorul a dat clic cu un anumit buton (să spunem cel din stânga) se poate compara astfel:

if clickb = MOUSEBUTTON_LEFT then print "a fost apăsat butonul din stânga";

Deși funcția ClickB poate întoarce valoarea unui singur buton apăsat, ea mai poate detecta și acțiunea de dublu clic (două clicuri rapide și succesive cu același buton în aproximativ același loc). În cazul în care utilizatorul execută un dublu clic, atunci valoarea întoarsă va conține valoare butonului care a generat clicul la care se va adăuga și valoarea MOUSEBUTTON_DOUBLECLICK.
Dacă se dorește să se verifice dacă utilizatorul a executat un dublu clic cu butonul din stânga se poate compara cu oricare din variantele:

if clickb = MOUSEBUTTON_LEFT + MOUSEBUTTON_DOUBLECLICK then print "a fost apăsat butonul din stânga";
if clickb = MOUSEBUTTON_LEFT & MOUSEBUTTON_DOUBLECLICK then print "a fost apăsat butonul din stânga";

Atenție: În cazul executării unui dublu clic, BASIC-256 va detecta mai întâi clicul inițial și va semnaliza prin funcția ClickB butonul apăsat. Dacă se execută un dublu clic, doar al doilea clic ClickB va conține atât valoare butonului cu care s-a făcut clic, cât și valoarea MOUSEBUTTON_DOUBLECLICK.
Pentru a detecta un clic făcut cu butonul din stânga, indiferent că este un simplu clic sau este un dublu clic, se poate verifica astfel:

if (clickb & MOUSEBUTTON_LEFT) then print "a fost apăsat butonul din stânga";

Exemplu cu detectarea butoanelor și a dublu clicului

# șterge orice clic făcut mai devreme
clickclear
print "Fă clic pe fereastra grafică"
# așteaptă pentru ca utilizatorul să dea clic
while clickb = 0
  pause .01
endwhile

pause 0.5 # utilizatorul a dat clic, totuși acordăm un pic de timp ca să vedem dacă utilizatorul execută un dublu clic

# Arată unde s-a făcut clic
print "Utilizatorul a dat clic cu ";
if clickb & MOUSEBUTTON_LEFT then print "butonul din stânga";
if clickb & MOUSEBUTTON_RIGHT then print "butonul din dreapta";
if clickb & MOUSEBUTTON_CENTER then print "butonul din mijloc";
print " la (x=" + clickx + ", y=" + clicky + ")"

if clickb & 32 then print "De fapt utilizatorul a făcut un dublu clic!... :)" #replace 32 with constant MOUSEDOUBLECLICK

Exemplu complex

# Să dăm clic și dublu clic! - Florin Oprea
col={red,darkred,green,darkgreen,blue,darkblue,cyan,darkcyan,purple,darkpurple,yellow,darkyellow,orange,darkorange,grey,darkgrey}

graphsize 300, 300
clg
fastgraphics
penwidth 2

xx = 0
yy = 0
patrat_x = 0
patrat_y = 0
patrat_s = 0
patrat_c = 0

bucla:
# efect de desenare
if patrat_s <> 0 then
  patrat_s = patrat_s + 20
  patrat_x = patrat_x - 10
  patrat_y = patrat_y - 10
  color col[patrat_c]
  rect patrat_x, patrat_y, patrat_s, patrat_s
  if patrat_x<=0 and patrat_y<=0 and patrat_x+patrat_s>=300 and patrat_y+patrat_s>=300 then patrat_s = 0
end if

# desenează culori
c=0
for y = 50 to 200 step 50
  for x = 50 to 200 step 50

    # verifică dacă este dat un clic în pătrat
    if clickb & MOUSEBUTTON_LEFT and clickx>=x and clickx<=x+30 and clicky>=y and clicky<=y+30 then
      xx = x
      yy = y
      # verifică dacă este un dublu clic
      if clickb & 32 then
        patrat_x = x
        patrat_y = y
        patrat_s = 30
        patrat_c = c
      end if
      clickclear
    end if

    # desenează pătrat
    if xx=x and yy=y then
      color white,col[c]
    else
      color black,col[c]
    end if
    c++ # incrementeză indexul de culoare
    rect x, y, 30 ,30
  next x
next y

refresh
pause 0.1
goto bucla

Vezi și

2016/01/01 22:49

Istoric

0.9.4dAdăugată în acestă versiune
1.99.99.58S-au adăugat numele constantelor pentru butoane
ro/clickb.txt · Last modified: 2017/09/12 03:41 by junior-root