5.3.13. Tapahtumien sidonta toimintoihin ajon aikana (event handler)
Käyttäjä voi ohjata sovellusta esimerkiksi näppäimistön tai hiiren avulla, jolloin suoritetaan ajonaikaisia toimintoja. Joihinkin ohjaimiin määritellään ajonaikaisia komentoja samalla, kun ohjain luodaan. Esimerkiksi painikkeeseen määritellään komento, joka suoritetaan painikkeen aktivoituessa (-command-optio). Tk tarjoaa myös bind-komennon ohjaim ien kontrolloimiseen ajon aikana. bind-komento sitoo ohjaimen esimerkiksi tiettyyn Tcl-komentoon.
Esimerkiksi sovelluksessa on luotu syöttökenttä .entry. Tällöin komennon
bind .entry <Control-d> {.entry delete insert}
avulla luodaan syöttökenttään ajonaikainen toiminto. Kun ajon aikana painetaan control-painiketta ja d-painiketta samanaikaisesti, syöttökenttä tyhjennetään.
Ohjaimiin on määritelty erilaisia tapahtumia (engl. event). Tavanomaiset ohjaimeen liittyvät toiminnot tehdään joko näppäimistön tai hiiren avulla. Ohjaimeen liitettävä komento on määriteltävä bind-komentoon hakasulkeiden sisään, esimerkiksi <Enter>. Tällöin toiminto tehdään aina, kun hiiren kursori siirtyy ohjaimen p&au ml;älle. Toiminto suoritetaan, jos ohjaimella on kohdistus (engl. input focus) tai se on aktiivinen. Taulukossa 5.1 on lueteltu valittavia toimintoja.
ButtonPress, Button |
Hiiren painiketta painetaan. |
ButtonRelease |
Hiiren painike vapautetaan. |
Circulate |
Ohjain ympyröidään. |
Colormap |
Ohjain vaihtaa väriä. |
Configure |
Ohjaimelle tehdään jotain muutoksia. |
Destroy |
Ohjain tuhotaan. |
Enter |
Hiiren kursori siirtyy ohjaimen päälle. |
Expose |
Ohjain aktivoituu. |
FocusIn |
Ohjain on valittuna, kohdistettuna. |
FocusOut |
Ohjain ei ole enää kohdistettuna. |
Gravity |
Ohjaimen paino muuttuu. |
KeyPress, Key |
Näppäimistön painiketta painetaan. |
KeyRelease |
Näppäimistön painike vapautetaan. |
Leave |
Hiiren kursori siirtyy pois ohjaimen päältä. |
Map |
Ohjain ilmestyy ruudulle. |
Motion |
Hiiren kursori liikkuu. |
Property |
Ohjaimen ominaisuus muuttuu. |
Reparent |
Ohjain saa uuden isäntäikkunan. |
Unmap |
Ohjain hävitetään ruudulta. |
Visibility |
Ohjain ilmestyy tai häviää ruudulta. |
Taulukko 5.1. Ohjaimiin kohdistuvat tapahtumat.
Tapahtumiin voi myös määritellä tarkennuksia lisäoptioiden avulla. Esimerkiksi voidaan määritellä, millä painikkeella tai näppäinyhdistelmällä tapahtuma toteutetaan. E simerkiksi voidaan määritellä, että tietty toiminto tapahtuu, kun painetaan näppäinyhdistelmää <Control-d>. Lisäoptiot on lueteltu taulukossa 5.2.
Control |
Control-näppäin |
Shift |
Välilyöntinäppäin |
Lock |
Isot kirjaimet eli Caps Lock -näppäin |
Button1, B1 |
Painike 1 (yleensä hiiren vasen painike) |
Button2, B2 |
Painike 2 (yleensä hiiren keskimmäinen painike) |
Button3, B3 |
Painike 3 (yleensä hiiren oikea painike) |
Button4, B4 |
Painike 5 |
Button5, B5 |
Painike 6 |
Double |
Kaksoisklikkaus hiirellä |
Triple |
Kolmoisklikkaus hiirellä |
Mod1, M1, Meta, M |
Esc-näppäin |
Mod2, M2, Alt |
Alt-näppäin |
Mod3, M3 |
Erikoisnäppäin |
Mod4, M4 |
Erikoisnäppäin |
Mod5, M5 |
Erikoisnäppäin |
Taulukko 5.2. Ohjaimien käsittelyyn liittyvät lisäoptiot.
Any
-option avulla voidaan määritellä tapahtuma tehtäväksi, vaikka jokin muu optio on myös aktivoituna. Esimerkiksi <Any-a> mä&au ml;rittely toteutetaan, kun a-näppäintä painetaan ja vaikka jokin muukin toiminto (esimerkiksi painetaan control-painiketta) tehdään samaan aikaan.Ajettava koodi tarvitsee usein tietoa tapahtumasta toimiakseen, esimerkiksi kursorin koordinaatit näytöllä. Ennen bind-komentoon liittyvän ohjelmakoodin suorittamista, korvataan kaikki koo dissa olevat prosenttimerkin ja kirjaimen sisältämät yhdistelmät tietyillä tapahtumilla. Taulukossa 5.3 on lueteltuna mahdollisia korvauksia.
%% |
Korvataan %-merkillä. |
%w |
Korvataan ohjaimen leveydellä. |
%x |
Korvataan ohjaimen x-koordinaatilla. |
%y |
Korvataan ohjaimen y-koordinaatilla. |
%A |
Korvataan painetulla ASCII-kirjaimella. Jos painettua näppäintä ei ole ASCII-luettelossa (esimerkiksi shift-näppäin), ei korvausta tapahdu. |
%K |
Korvataan painetulla näppäimellä. |
%N |
Korvataan painetulla numerolla muutettuna desimaalinumeroksi. |
%R |
Korvataan pääikkunan tunnisteella. |
%S |
Korvataan alaikkunan tunnisteella muutettuna heksadesimaaliseksi numeroksi. |
%T |
Korvataan tapahtuman tyypillä. |
%W |
Korvataan sen ikkunan tunnisteella, mistä tapahtuma rekisteröidään. |
Taulukko 5.3. Ajon aikana tapahtuvat korvaukset.
Esimerkiksi jos määritellään syöttökenttään tapahtuma
bind .ohjain <Enter> {
puts "Hiiri on ohjaimen %W päällä koordinaateissa %x,%y"
}
niin aina kun hiiri siirtyy ohjaimen .ohjain päälle, tulostetaan ohjaimen nimi ja koordinaatit.