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.

 


previous gif next gif
Luk-tutkielma: Tcl/Tk -opiksi ja iloksi.