A.14 Interkapti la uzulajn agojn

XLOGO povas interagi kun la uzulo dum la rulado de programo, per klavaro kaj muso.

A.14.1 Interago kun la klavaro

Oni povas do ricevi tekston de l’ uzulo dum ruli la programon, per 3 primitivoj: klave?, litleg kaj leg.

klave?



Donu “vera” aŭ “malvera” laŭ ĉu oni premis klavon aŭ ne post la komenco de ruli la programon.

litleg




A ⇒ 65 B ⇒ 66 C ⇒ 67 ktp... Z ⇒ 90
←⇒ −37 aŭ −226 (NumKla) ↑⇒ −38 aŭ −224 →⇒ −39 aŭ −227 ↓⇒ −40 aŭ −225
Esk ⇒ 27 F1 ⇒ −112 F2 ⇒ −113 ... F12 ⇒ −123
Uskl ⇒ −16 Spaco ⇒ 32 Stir ⇒ −17 Enig ⇒ 10


Tabelo A.2Kelkaj valoroj de klavoj

Se vi havas dubon pri la vorto redonata de klavo, sufiĉas tajpi: s litleg. L’ interpretilo tiam atendos ke vi premos klavon, poste donos la rilatan valoron.

leg, legu listo1 vor2



Afiŝu dialogfenestron kies titro estu listo1. L’ uzulo povas tiam enigi respondon en tekstokampo; la respondon oni konservos kiel vorton aŭ liston (se l’ uzulo tajpos plurajn vortojn) en la variablon vor2 kiam ŝli validigos aŭ klakos la butonon Akceptu.

A.14.2 Kelkaj ekzemploj uzi

 pour juna
  leg [Kiom vi aĝas?] "aĝo
  provizu "aĝo :aĝo
  se :aĝo<18 [s [Vi estas malplenkreskulo]]
  se aŭ :aĝo=18 :age>18 [s [Vi estas plenkreskulo]]
  se :aĝo>99 [s [Mi respektu!!]]
 fino
 
 por ralio
     se klave?
         [provizu "sig litleg
          si :sig=-37 [mdn 90]
          si :sig=-39 [dn  90]
          si :sig=-38 [an  10]
          si :sig=-40 [man 10]
          si :sig=27  [haltu]]
     ralio
 fino
 # Kontrolu la testudon per la klavaro, haltigu per Esk

A.14.3 Interkapti iujn musajn eventojn

Por tio, oni havas tri primitivojn: musleg, muse? kaj mussit.

musleg, muson_legu



Haltigu la programon ĝis musa evento okazas. Estas museventoj: movi la muson aŭ klaki iun butonon ĝian. Okazinte l’ evento, musleg donas nombron ebligantan karakterizi l’ eventon. Jen la diversaj kodoj asociitaj al la diversaj eventoj:

La butonoj estas numeritaj de maldekstre al dekstre (principe...).

mussit, mussituon



Donu liston enhavantan la koordinatojn de la muso dum la lasta interkaptita evento.

muse?



Donu “vera” aŭ “malvera” laŭ ĉu oni agis aŭ ne per la muso post la komenco ruli la programon.

A.14.4 Kelkaj uzekzemploj

En tiu unua proceduro, la testudo sekvas la muson kiam ĝi moviĝas sur la desegnejo.

 por ekzemplo1
 # Se oni movas la muson, loku sin al la novan situon
 se musleg=0 [sitp mussit]
 ekzemplo1
 fino

En tiu dua proceduro, estas la sama principo krom ke necesas klaki la maldekstran butonon musan por movi la testudon sur la desegnejo.

 por ekzemplo2
 se musleg=1 [sitp mussit]
 ekzemplo2
 fino

En tiu tria ekzemplo, ni kreos du butonojn. Tiu maldekstra ebligos grafiki kvadraton je 40 mul 40 al la dekstro; tiu dekstra, malgrandan cirklon al la maldekstro. Finfine, se oni klakos la trian butonon de la muso, la programo haltos.

 por butono
 # kreu ortangulan butonon je 50 mul 100 farbita je salmakoloro
 ripetu 2 [an 50 dn 90 an 100 dn 90]
 dn 45 l an 10 ml skolp [255 153 153]
 plenigu mal 10 mdn 45 ml skolp 0
                                                                                                  
                                                                                                  
 fino
 
 por lanĉu
 ev butono l skolp [150 0] ml butono
 l skolp [ 30   20] ml etikedu "Kvadrato
 l skolp [180   20] ml etikedu "Cirklo
 l skolp [  0 -100] ml
 muso
 fino
 
 por muso
 # Konservu la rezulton de musleg en la variablon ev
 provizu "ev musleg
 # Konservu la unuan koordinaton de la muso en la variablon x
 provizu "x eron 1 mussit
 # Konservu la duan koordinaton de la muso en la variablon y
 provizu "y eron 2 mussit
 # Se oni klakus la maldekstran butonon
 se :ev=1 & :x>0 & :x<100 & :y>0 & :y<50 [kvadrato]
 # Se oni klakus la dekstran butonon
 se :x>150 & :x<250 & :y>0 & :y<50
          [si :ev=1 [cirklo]
           si :ev=3 [haltu]]
 muso
 fino
 
 por cirklo
 ripetu 90 [an 1 mdn 4] mdn 90 l  an 40 dn 90 ml
 fino
 
 por kvadrato
 ripetu 4 [an 40 dn 90] dn 90 an 40 mdn 90
 fino

pict

A.14.5 Uzi grafikajn konsistaĵojn

XLOGO ebligas ankaŭ aldoni kelkajn grafikajn konsistaĵojn (butonon, malvolveblan menuon...) al la desegnejo. Ĉar tiaj konsistaĵoj rilatas al grafikaj uzulaj interfacoj, ĉiu primitivo por tiu afero komenciĝas per la prefikso «GUI».

Krei konsistaĵon

Por manipuli tiajn grafikajn objektojn, antaŭ ĉio necesas krei ilin, aldoni al ili iujn atributojn, kaj poste afiŝi ilin.

Atribui atributojn al konsistaĵo

gui_koordinatojn vor1 listo2



Ebligas loki la grafikan elementon sur la deziratan situon en la desegnejo. Ekzemple, por loki la antaŭan butonon al punkto kun koordinatoj (20;100), skribu:

  gui_koordinatojn "b [20 100]

Se la situo de la konsistaĵo ne estas indikita, la konsistaĵo estos lokita apriore je la supra maldekstra angulo de la desegnejo.

gui_forigu vor1



Forviŝu grafikan elementon. Ekzemple, por forigi la antaŭan butonon:

  gui_forigu "b

gui_agadon vor1 listo2



Difinu agadon realigendan kiam l’ uzulo interagos kun la grafika elemento konsiderita.

                                                                                                  
                                                                                                  
 # La testudo anta^uen iru 100 paŝojn se oni klakos butonon "b
 gui_agadon "b [an 100]
 
 # Por la malvolvebla menuo, ^ciu ero havas sian propran agon
 gui_agadon "m [[skrbiu "ero1]  [skribu "ero2] [skribu "ero3]]

gui_desegnu vor1



Afiŝu la grafikan konsistaĵn sur la desegnejon. Ekzemple, por montri la butonon:

  gui_desegnu "b