LUKU 4 TAPAHTUMAT. Command1_Click, Form_Click. Form_DragDrop



Samankaltaiset tiedostot
[Lomake.][Ohjain.]metodi [argumentit] Seuraava aliohjelma, jossa käytetään kuvakehyksen Move-metodia, luo vaikutelman etääntyvästä kuvakehyksestä:

Ajokorttimoduuli Moduuli 2. - Laitteenkäyttö ja tiedonhallinta. Harjoitus 1

KÄYTTÖLIITTYMÄN PIIRTÄMINEN

Lupa opetuskäyttöön pyydettävä. Näppäimistö. Kohdistimen ohjausnäppäimistö. Funktionäppäimistö. Kirjoitusnäppäimistö

Pikanäppäin Yhdistelmiä. Luku 6 Pikanäppäimet

TIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ

Ksenos Prime Käyttäjän opas

Sähköposti ja uutisryhmät

Sen jälkeen Microsoft Office ja sen alta löytyy ohjelmat. Ensin käynnistä-valikosta kaikki ohjelmat

Ominaisuuksien syntaksi on seuraava:

FrontPage Näkymät

Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana

Muistitikun liittäminen tietokoneeseen

Projektit. Pikaopas. Jaa projekti muiden kanssa Kutsu muita projektiyhteistyöhön valitsemalla Jaa.

HELIA 1 (1) Outi Virkki Käyttöliittymät ja ohjelmiston suunnittelu :04

Helppokäyttöisyyttä Windows Vista käyttöjärjestelmän asetuksilla

KUVAN TUOMINEN, MUOKKAAMINEN, KOON MUUTTAMINEN JA TALLENTAMINEN PAINTISSA

2. Aloitus -välilehti, leikepöytä- ja fontti -ryhmät

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Scratch ohjeita. Perusteet

OpenOffice.org Impress 3.1.0

Harjoitus 2: Oppijan aktivointi ( )

Oppilaan pikaopas. Project 2013 käyttöliittymä ja näkymät

Condes. Quick Start opas. Suunnistuksen ratamestariohjelmisto. Versio 7. Quick Start - opas Condes 7. olfellows 1.

Tekstinkäsittelyn jatko Error! Use the Home tab to apply Otsikko 1 to the text that you want to appear here. KSAO Liiketalous 1

Tekstinkäsittelyn jatko KSAO Liiketalous 1. Osanvaihto näkyy näytöllä vaakasuorana kaksoispisteviivarivinä ja keskellä riviä lukee osanvaihdon tyyppi

sivu 1 Verkkopäätteen muuttaminen Anvian uuteen tekniikkaan Ohje käy seuraaviin verkkopäätteisiin

Keravan karttapalvelun käyttöohje

TAULUKOINTI. Word Taulukot

TAULUKON TEKEMINEN. Sisällysluettelo

Osa 7: Hahmojen ohjelmointi ja hienosäätö

TEHTÄVÄ 1.1 RATKAISUOHJEET

6.1 Tekstialueiden valinta eli maalaaminen (tulee tehdä ennen jokaista muokkausta ym.)

Nuorten hyvinvointi tilastotietokannan käyttöohjeet Tieke

GEOS 1. Ilmastodiagrammi Libre Office Calc ohjelmalla

TALLENNETAAN MUISTITIKULLE JA MUISTIKORTILLE

Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.

Ohjelman Suositukset. Luku 5 Suositukset

ATK-taitojen päivitys luento 1. Maaningan seurakunta Hannu Räisänen 2013

Taulukot Päivi Vartiainen 1

Interaktiivinen käyttöliittymä. 2008

GeoGebra-harjoituksia malu-opettajille

Muuttujien määrittely

Kuvan pienentäminen Paint.NET-kuvankäsittelyohjelmalla

Riikka Marttinen, Helsingin Tikoteekki, Windows 7:n helppokäyttötoiminnot

1 ClipArt -kuvan käyttö Paint-ohjelmassa

1 Funktiot, suurin (max), pienin (min) ja keskiarvo

WCONDES OHJEET ITÄRASTEILLE (tehty Condes versiolle 8)

CEM DT-3353 Pihtimittari

1. HARJOITUS harjoitus3_korjaus.doc


SYDÄN-HÄMEEN RASTIT 2017 TULOSPALVELUN OHJEET LAITTEISTO 2. LAITTEISTON VALMISTELU 3. VALMISTELUT ENNEN TAPAHTUMAA

Taulukkolaskennan perusteet KSAO Liiketalous 1. 5 Rivitunnus ( riviä) 14 Edellisten vierityspainikkeet. 6 Solu 15 Taulukon vierityspalkit

Ohjelmoinnin perusteet Y Python

Tekstinkäsittelyn jatko KSAO Liiketalous 1

Vesa Ollikainen, päivitys Juha Haataja

Hiirisanomiin vastaaminen. 2007

Opinnäytetyön mallipohjan ohje

C# Windows ohjelmointi perusopas

A. Peruskäyttöohje Digilehtiö

Tasogeometriaa GeoGebran piirtoalue ja työvälineet

KAAVAT. Sisällysluettelo

Condes. Quick Start opas. Suunnistuksen ratamestariohjelmisto. Versio 8. Quick Start - opas Condes 8. olfellows 1.

VATT Talouden rakenteet. Ohje: Pdf-dian liittäminen PowerPoint -esitykseen. Sisällys:

Selkosanakirja sdfghjklöäzxcvbnmqwertyuiopåasdfghjklöäzxcvbnmq. Tietokoneet. wertyuiopåasdfghjklöäzxcvbnmqwertyuiopåasdfghjk 1.4.

FOTONETTI BOOK CREATOR

PERUSLASKUJA. Kirjoita muuten sama, mutta ota välilyönti 4:n jälkeen 3/4 +5^2

SYDÄN-HÄMEEN RASTIT TULOSPALVELUN OHJEET v.2 1. LAITTEISTO 2. LAITTEISTON VALMISTELU 3. VALMISTELUT ENNEN TAPAHTUMAA

Työvälineohjelmistot KSAO Liiketalous 1

H6: Tehtävänanto. Taulukkolaskennan perusharjoitus. Harjoituksen tavoitteet

MICROSOFT EXCEL 2010

Jypelin käyttöohjeet» Ruutukentän luominen

BaseMidlet. KÄYTTÖOHJE v. 1.00

Excel Perusteet Päivi Vartiainen 1

1 Asentaminen. 2 Yleistä ja simuloinnin aloitus 12/

Kuva 1. Jokaisen tavallisen kuvan tasotyökalussa näkyy vain yksi taso, tässä nimellä tausta.

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Taulukot, taulukkoryhmät Sisällysluettelo

CABAS. Release Notes 5.4. Uusi kuvien ja dokumenttien käsittely

UpdateIT 2010: Editorin käyttöohje

Kirkkopalvelut Office365, Opiskelijan ohje 1 / 17 IT Juha Nalli

Tilastokeskuksen rajapintapalveluiden käyttöönotto ArcGISohjelmistossa

WCONDES OHJEET ITÄRASTEILLE (tehty Condes versiolle 8)

SuperNova Pikanäppäimet pöytäkoneille, kannettaville ja kosketusnäytöille. Tämä opas on saatavilla eri muodoissa osoitteesta

Windows 8.1:n vaiheittainen päivitysopas

Näppäri kymmensormiharjoitusohjelma Helsingin ATK-Palvelu Oy

Fonttimuotoilut. Fontin tyyppi ja fonttikoko

Tekstinkäsittely 1. Peruskäyttö. Tietotekniikan perusteet Metropolia Ammattikorkeakoulu Vesa Ollikainen

Avaa ohjelma ja tarvittaessa Tiedosto -> Uusi kilpailutiedosto

Windowsin pikanäppäimet

elearning Salpaus Elsa-tutuksi

Ohjelmointityökalu Scratch

5. Alaindeksi 6. Yläindeksi 7. Poista muotoilut 8. Tasaa teksti vasemmalle

Kirjallinen kysymys/välikysymys -asiakirjamallin käyttö

ejuttu ohjeet kuinka sitä käytetään.

Tekstinkäsittelyn jatko. KSAO Liiketalous 1

Siirtymät, tehosteet, daesitys Sisällysluettelo

Tulosta yrityksesi tuloslaskelma ja tase myöhempää tarkastusta varten. Ota varmuuskopio tilanteesta ennen tilimuunnosta.

2017/11/21 17:28 1/2 Tilitapahtumat. Tilitapahtumat... 1 Käyttö:... 1 Asiakirjan kentät:... 1

Valintanauhan komennot Valintanauhan kussakin välilehdessä on ryhmiä ja kussakin ryhmässä on toisiinsa liittyviä komentoja.

Transkriptio:

LUKU 4 TAPAHTUMAT Visual Basicin ohjaintyypin määrittää siihen liittyvät ominaisuudet ja tapahtumatyypit, joihin kyseinen ohjaintyyppi reagoi. Yksittäisen tapahtuman määrittää jokin hiiri- tai näppäimistötoiminto tai järjestelmän sisäinen tapahtuma ja itse olio, johon se kohdistuu. Koodissa oliota ja tapahtumaa erottaa viiva. Tapahtumat ja Command1_Click, Form_Click Form_DragDrop ovat erillisiä tapahtumia, joihin jokaiseen on koodi liitettävä erikseen. Vaikka ohjaimen nimi sisältyy tapahtuma-aliohjelman nimeen, ohjaimeen ja sen ominaisuuksiin pitää koodissa viitata nimellä: Private Sub Text1_Click() Text1.Text = "" Kun olet piirtänyt ohjaimia (tai tehnyt valikon), Visual Basic tarjoaa jokaiseen mahdolliseen tapahtumaan valmiin tapahtuma-aliohjelmapohjan, joka sisältää mahdollisesti käytettävissä olevat argumentit ja niiden datatyypit. Esim. DragDrop-tapahtuma-aliohjelmassa voit viitata argumentteihin Source, X ja Y: Private Sub Form_dragDrop (source As Control, X As Single, Y As Single) Et voi lisätä tai poistaa argumentteja. Tämä on luonnollista, koska normaalitapauksessa tapahtuma-aliohjelmaa kutsuu järjestelmä. Voit kuitenkin kutsua tapahtuma-aliohjelmaa myös koodista (vrt. TAPAHTUMAN SIMULOINTI KOODISTA luvun loppupuolella).

66 Visual Basic 5 -ohjelmoinnin peruskurssi KOODIN LIITTÄMINEN TAPAHTUMAAN Tapahtumien ohjelmointi tehdään samassa koodieditori-ikkunassa kuin muunkin VB-koodin muokkaus. Voit valita koodieditorille kaksi eri esitysmuotoa Tools - Options -ikkunan Editor-sivulta. Kun valitset kohdan Default To Full Module View, kaikki lomakkeen tai moduulin aliohjelmat ovat kerralla näkyvillä viivalla toisistaan erotettuina. Tyhjät tapahtumapohjat on kuitenkin avattava alasvetovalikosta kuten kuvassa 1. Jos et valitse tätä vaihtoehtoa, näkyvillä on ainoastaan kulloinkin muokattava tapahtuma-aliohjelma (tai muu lausealiohjelma tai funktio, vrt. luku 6). ESIMERKKI 1 Haluamme, että kuvan 2 lomakkeen kaikki kolme oliota siirtyvät ylöspäin, kun niitä kaksoisnapsautetaan hiirellä. Kaksoisnapsauta Label1-otsikkoa. Ruutuun tulee koodi-ikkuna, jossa Label1 on valmiiksi valittuna. Valitse tapahtumavalikosta Click, jolloin koodi-ikkunaan tulee Label1_Click-tapahtuma-aliohjelman koodipohja. Tarvittava koodi kirjoitetaan rivien Private Sub tapahtuma ja väliin (kuva 2): 4.1: Tapahtuma-aliohjelman kirjoittaminen

4 Tapahtumat 67 4.2: Esimerkki 1 Private Sub Label1_Click () Label1.top = label1.top + 200 Ennen kuin kaksoisnapsautat seuraavaa ohjainta Command1, kopioi kirjoittamasi koodirivi merkitsemällä se hiirellä ja valitsemalla Edit-valikosta komento Copy. Kaksoisnapsauta nyt Command1-oliota (mikäli lomake on näkyvillä) tai valitse se koodi-ikkunan olioluettelosta. Valitse Click-tapahtuma. Sijoita kohdistin Sub Command1_Click -rivin alapuolelle ja valitse Edit-valikosta Paste-komento. Voit myös käyttää Standard-valikon vastaavia kuvakkeita. Komentopohjaan tulee nyt äsken kopioimasi rivi. Korjaa seuraavaksi koodiin Label1-nimen tilalle Command1: Command1.top = label1.top + 200 Menettele samoin kolmannen ohjaimen Command2 kanssa ja kokeile sitten ohjelmaa painamalla F5-näppäintä. Esimerkin opetus on, että jokaisen ohjaimen ominaisuuksiin viitatessa ohjain on nimettävä yksiselitteisesti, vaikka se sisältyisi itse tapahtuman määritteeseen. Et voi myöskään jättää ohjaimen nimeä kokonaan pois (ominaisuus tulkitaan tällöin lomakkeen ominaisuudeksi). Jos halutaan saivarrella, voidaan sanoa, ettei Visual Basic -ohjaimilla oikeasti ole ominaisuuksia vaan sen sijaan lomakkeella on sellaisia ominaisuuksia kuten Command1.Top jne. Sama pätee tapahtumiin. Windows-ohjelmoinnissa on pelkistetysti sanoen kysymys sellaisen ohjelman suunnittelusta, jossa loppukäyttäjä voi muuttaa olioiden ominaisuuksia aiheuttamalla tapahtumia joko hiirellä tai näppäimistöllä. Välittävä koodi voi muodostua yhdestä rivistä tai pitkistä toisiaan kutsuvista aliohjelmista.

68 Visual Basic 5 -ohjelmoinnin peruskurssi YLEISIÄ TAPAHTUMIA DragDrop ja Dragover: Lomakkeella ja MDI-lomakkeella sekä kaikilla näkyvillä ohjaimilla paitsi Viivalla ja Kuviolla. Katso tarkemmin LOMAKE ja KEHYS. GotFocus, LostFocus: Kaikilla ohjaimilla, joilla voi olla fokus. Sijoita lomakkeelle usean kuvakehyksen matriisi ja kokeile seuraavaa koodia: Private Sub Picture1_LostFocus (index As Integer) Picture1(index).BackColor = RGB(0, 255, 0) Private Sub Picture1_GotFocus (index As Integer) Picture1(index).BackColor = RGB(255, 0, 0) MouseDown, MouseUp ja MouseMove:8 tarkoittaa alla, että ohjaimella on nämä hiiritapahtumat. Tarkastelen niitä lähemmin yksittäisten ohjaintyyppien yhteydessä. Click ja DblClick: Click-tapahtuma tuotetaan napsauttamalla ohjainta kerran ja DblClick kaksoisnapsauttamalla sitä. Kaksoisnapsautuksesta on kyse, kun napsautukset toistuvat Windowsin Ohjauspaneelissa määritetyn aikarajan sisällä. HUOM Valintaruudulla, komentopainikkeella, valintanapilla ja luetteloruudulla Click laukeaa vain, jos käyttäjä napsauttaa vasenta hiiripainiketta. Muiden ohjaimien kanssa painikkeiden erottamiseen on käytettävä MouseDown- tai MouseUp-tapahtumaa. Vaikka napsautus on Windows-ympäristön keskeisin toiminto, ei sillä ole suoranaista vastinetta Windows APIssa, vaan Click-tapahtuma edustaa korkeamman tason standardia. Hiiritapahtumat syntyvät seuraavassa järjestyksessä: MouseDown, MouseUp, Click ja DblClick. Yllättäen kuitenkin kaksoisnapsautuksen yhteydessä jälkimmäinen MouseUp-tapahtuma on DblClick-tapahtuman jälkeen. Järjestyksellä on merkitystä, jos hiiritapahtumakoodit kumoavat toisensa. KeyDown, KeyUp ja KeyPress: 7 tarkoittaa alla, että ohjaimella on nämä näppäintapahtumat (tarkemmin kohdassa TEKSTIRUUTU). Voi

4 Tapahtumat 69 vaikuttaa oudolta, että esim. Komentopainike tunnistaa näppäintapahtumat, mutta ei DblClick-tapahtumaa. Sillä voi kuitenkin olla fokus ja siksi sen on myös tunnistettava esim. mahdolliset pikanäppäimet. Vrt. luku 7. LinkClose, LinkError, LinkExecute, LinkNotify, LinkOpen: Nämä DDE-yhteyteen liittyvät tapahtumat ovat Lomakkeella, MDI-lomakkeella, Otsikolla, Kuvakehyksellä ja Tekstiruudulla. Tarkastelen DDEyhteyksiä tarkemmin Jatkokurssi-kirjassa. OleDragDrop: Jos ohjaimen OLEDropMode arvo on 1, se tunnistaa tämän tapahtuman, jolloin voi koodista käsitellä Data-argumenttia. Käsittelen OLE-yhteyksiä tarkemmin Jatkokurssi-kirjassa. Alla kuitenkin pieni koodiesimerkki, missä ohjaimeen (esimerkiksi Wordistä) vedetty tekstin pätkä sijoitetaan tekstiruutuun tekstikohdistimen osoittamaan kohtaan käyttämällä SelText-ominaisuutta ja DataObject-argumentin GetData-metodia: Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single) Text1.SelText = Data.GetData(1) OLEDragOver, OLEGiveFeedback, OLECompleteDrag, OLESetData, OLEStartDrag: Muita OLE-tapahtumia, joita käsittelen tarkemmin Jatkokurssi-kirjassa. ERI OHJAIMIEN KESKEISIÄ TAPAHTUMIA 87LOMAKE Resize: aina kun ikkunan koko muuttuu. Myös kuvakehyksellä, Dataohjaimella ja OLE-ohjaimella. Seuraava koodi varmistaa, että lomakkeeseen sijoitettu kuvakehys laajenee ja supistuu ikkunan mukana: Private Sub form1_resize () Picture1.Width = Width / 3 Picture1.Height = Height / 3 end sub Load: aina kun lomake ladataan muistiin. Seuraava koodi varmistaa, että ikkuna on aina käynnistettäessä täyden ruudun kokoinen:

70 Visual Basic 5 -ohjelmoinnin peruskurssi Private Sub Form1_Load () windowstate = 2 end Sub Unload: aina kun lomake on poistumassa muistista. Cancel-argumentti antaa käyttäjälle mahdollisuuden peruuttaa poistamisen: Private Sub Form_Unload (cancel As Integer) If MsgBox( Haluatko lopettaa?, 1) = 2 Then cancel = -1 End If MsgBox-funktio noutaa Visual Basicin sanomaikkunan, josta tarkemmin luvussa 9. MouseMove: aina kun hiirtä liikutetaan. Kokeile seuraavaa koodia: Private Sub Form_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) backcolor = rgb(x / 10, Y / 10, 255) DragDrop (source As Control, x As Single, y As Single): aina kun vedettävä ohjain irroitetaan. Source on vedettävä ohjain, X ja Y koordinaatit. ESIMERKKI Sijoita lomakkeeseen kuvakehys ja aseta sen Dragmode-arvoksi 1 (Automatic). Kaksoisnapsauta lomaketta ja valitse tapahtumavalikosta Drag- Drop. Lisää seuraava koodi: Private Sub Form_dragDrop (source As Control, X As Single, Y As Single) source.move X, Y

4 Tapahtumat 71 Voit nyt vetää kuvakehystä hiirellä ja pudottaa sen mihin tahansa lomakkeelle. X ja Y ovat hiirikohdistimen koordinaatit kohdeohjaimessa. Source on vedettävä ohjain. Näistä kolmesta tarkemmin luvussa 10. 87KUVAKEHYS MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single): kun hiiripainike painetaan alas. Aloittaa tyypillisesti vetämisen. Ohjain reagoi tapahtumaan vain, jos sen Dragmode-ominaisuuden arvo on Manual. HUOM Jos haluat, että tapahtuma tunnistaa, kumpaa hiiripainiketta on painettu tai onko vaihtonäppäin alhaalla, käytä Clicktapahtuman sijasta MouseDown-tapahtumaa. Mouseup(Button As Integer, Shift As Integer, X As Single, Y As Single): kun hiiripainike päästetään ylös. ESIMERKKI Sijoita tyhjään lomakkeeseen kuvakehys, kaksoisnapsauta sitä ja liitä MouseDown- ja MouseUp-tapahtumiin seuraava koodi: Private Sub Picture1_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single) If Shift = 1 And Button = 2 Then Form1.backcolor = RGB(255, 0, 0) End If Private Sub Picture1_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) Form1.Backcolor = RGB(255, 255, 255) Voit vaihtaa lomakkeen taustaväriä pitämällä vaihtonäppäimen alhaalla ja painamalla hiiren oikeata painiketta. Shift- ja Button-argumenteista tarkemmin luvussa 10.

72 Visual Basic 5 -ohjelmoinnin peruskurssi HUOM MouseDown-tapahtuman jälkeen kyseinen ohjain "vangitsee" hiiren seuraavaan MouseUp-tapahtumaan asti, siten tämä ja sitä edelliset MouseMove-tapahtumat kuuluvat kyseiselle ohjaimelle, vaikka käyttäjä siirtäisi osoittimen ohjaimen ulkopuolelle. Click-tapahtuma ei tällaisessa tapauksessa laukea lainkaan. 8KUVA Kuva on sekä ominaisuuksiltaan että tapahtumiltaan kuvakehystä rajoittuneempi. Kuvalla ei voi olla fokusta eikä näppäintapahtumia. Toisaalta Kuvan päivittäminen näytöllä tapahtuu hieman nopeammin. Käytä sitä, kun et tarvitse Kuvakehyksen piirteitä ja kun haluat hyödyntää Kuvan Stretch-ominaisuutta (ks. luku 3). 8OTSIKKO Click: Vaikka Otsikkoa voi napsauttaa, sille ei voi siirtää fokusta sen enempää hiirellä kuin näppäimistölläkään. Samoin kuin lomaketta napsautettaessa fokus säilyy ohjaimella, jolla se jo on. KEHYS DragDrop: kun vedettävä ohjain irroitetaan kehyksen päällä. DragOver: aina kun ohjainta vedetään kohteen päällä. Source on vedettävä ohjain, X ja Y koordinaatit. State ilmaisee vedettävän ohjaimen sijainnin kohteen suhteen. ESIMERKKI Sijoita tyhjään lomakkeeseen useampi pieni kuvakehys ja isompi kehys. Määritä kuvakehyksien Dragmode-arvoksi 1 ja lisäksi jokaiselle eri taustaväri. Lisää seuraava tapahtuma-aliohjelma: Private Sub Frame1_DragOver(Source As Control, X As Single, Y As Single, State As Integer) If State = 1 Then Frame1.BackColor = Form1.BackColor

4 Tapahtumat 73 Else Frame1.BackColor = Source.BackColor End If Argumentilla State voi olla seuraavat arvot: 0 Ohjainta (Source) ollaan vetämässä kohteen sisälle. 1 Ohjainta (Source) ollaan vetämässä kohteesta ulos. 2 Ohjain on vedetty kohteen sisälle. Huomaa, että jos irroitat kuvakehyksen kehyksen sisällä, taustaväri jää voimaan. 87TEKSTIRUUTU Change: aina kun tekstiruudun teksti muuttuu. Keypress(keyascii As Integer): aina kun käyttäjä painaa jotakin näppäintä. KeyAscii palauttaa painettua näppäintä vastaavan merkin Asciikoodin. KeyDown(Keycode As Integer, Shift As Integer) ja KeyUp(Keycode As Integer, Shift As Integer): reagoivat erikseen näppäimen alas painamiseen ja vapauttamiseen. Lisäksi keycode palauttaa myös funktionäppäinten koodin ja shift vaihto- control- ja alt-näppäinten tilan. Koska hiirtä käytetään tekstiruudussa pääasiassa kohdistimen sijoittamiseen ja tekstin valitsemiseen, tekstiruutu ei aikaisemmissa versioissa tunnistanut hiiritapahtumia. Tekstiruudun käyttökelpoisuutta on tässä suhteessa parannettu. Vältä kuitenkin sotkemasta edellä mainittuja automaattisia toimintoja. ESIMERKKI Sijoita lomakkeelle tekstiruutu ja otsikko. Seuraava koodi sijoittaa otsikkoon hiirellä valitun merkkimäärän: Private Sub Text1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Label1 = Text1.SelLength

74 Visual Basic 5 -ohjelmoinnin peruskurssi 87KOMENTOPAINIKE Click: hiiren napsautus. Komentopainike tunnistaa nykyisin myös muut hiiritapahtumat paitsi DblClick-tapahtumaa, ja voit näin ollen kirjoittaa koodia myös MouseDown- ja MouseUp-tapahtumille. Koska komentopainikkeen Click-tapahtuma toteutuu vain vasemmalla hiiripainikkeella, MouseDown-tapahtuman käyttö on välttämätöntä, jos halutaan painikkeen reagoivan myös oikeaan painikkeeseen. HUOM Kun komentopainikkeella on fokus, myös Välilyöntinäppäimen painaminen toteuttaa Click-tapahtuman. Jos painike on lomakkeen oletuspainike (sen Default-arvo on True), Click-tapahtuman voi tuottaa painamalla Enternäppäintä. 87VALINTARUUTU Click: Käyttäjä voi aiheuttaa Click-tapahtuman myös painamalla sanavälinäppäintä siirrettyään sarkainnäppäimellä fokuksen valintaruudulle, sekä valintaruutuun liitetyllä valintanäppäimellä (vrt. luku 7). Valintaruutu ei tunnista kaksoisnapsautusta mutta kylläkin muut hiiritapahtumat. 87VALINTANAPPI Click: Valintanapin valinta aiheuttaa aina Click-tapahtuman. Paitsi napsauttamalla, käyttäjä voi valita napin valintanäppäimellä tai siirtämällä fokuksen siihen (sanaväliä ei tarvitse painaa). Jos valintanappi on osa nappiryhmää, fokus siirretään ryhmän ensimmäiseen tai viimeiseen nappiin sarkainnäppäimellä. Ryhmän sisällä liikutaan nuolinäppäinten avulla. Vrt. luku 7.

4 Tapahtumat 75 HUOM Valitun napin napsauttaminen ei aiheuta Click-tapahtumaa. DblClick: Tätä voi käyttää valinnan peruuttamiseen valitsematta mitään muuta vaihtoehtoa. Vrt luku 7. 7YHDISTELMÄ- JA LUETTELORUUTU Click ja DblClick: Click-tapahtuman toteuttaa, paitsi hiirellä napsauttaminen, myös kohdan merkintä nuolinäppäimellä. Varsinainen valinta suoritetaan sovelluksissa usein kaksoinapsautuksella. Yhdistelmäruutu reagoi kaksoisnapsautukseen vain, jos sen Style-arvo = 1. DropDown: Yhdistelmäruudulla, kun sen valikko vedetään alas. Esimerkiksi seuraava koodi asettaa luettelon ensimmäisen kohdan tekstiruutuun, kun luettelo avataan: Private Sub Combo1_DropDown() Combo1.Text = Combo1.List(0) Scroll: Aina, kun luettelon tai yhdistelmäluettelon avatun osan vierityspalkin hissiä vedetään hiirellä. 7VIERITYSPALKIT Change: Aina kun hissin sijainti muuttuu (katso luku 8). Scroll: Aina kun hissiä vedetään hiirellä. AJASTIN Timer: Ainoa tapahtuma, toteutuu automaattisesti Interval-arvon mukaisin välein. Katso edellinen luku. 87TIEDOSTOJEN HALLINTA Scroll: Vrt. Yhdistelmä- ja luetteloruutu. DblClick: vain Tiedostoluettelo-ohjaimessa. Kaksoisnapsautusta käytetään tyypillisesti ohjelman käynnistämiseen. Näin teemme myös Tiedostoapulainen-esimerkkiohjelmassa (luku 13). Change: Koska Asemaluettelo-ohjaimelta puuttuu sekä Click- että DblClick-tapahtuma, keskeinen koodi on liitettävä Change-tapahtumaan.

76 Visual Basic 5 -ohjelmoinnin peruskurssi PathChange: kun Tiedostoluettelon polkua (Path-arvoa) on muutettu muuttamalla FileName- tai Path-arvoja koodin avulla. PatternChange: kun Tiedostoluettelon tarkennetta (Pattern-arvoa) on muutettu muuttamalla FileName tai Pattern-arvoja koodin avulla. ESIMERKKI Piirrä kuvassa 3 tarvittavat ohjaimet ja lisää seuraavat aliohjelmat: Private Sub Command1_Click () File1.Filename = Text1.Text Private Sub File1_PathChange () If File1.Path = c:\ Then Text2.Text = Vain pääkäyttäjälle! Else Text2.text = End If Private Sub File1_PatternChange () If File1.Pattern = *.txt Then Text2.Text = Käytä tekstinkäsittelyohjelmaa Else Text2.Text = End If Text1-tekstiruutuun voi kirjoittaa joko pelkän polun tai täydellisen tiedostonimen. Text2-tekstiruudun sisältö heijastaa tehtyjä muutoksia. Tiedostojen hallinnasta tarkemmin luvussa 13. 4.3: Tiedostoluettelo

4 Tapahtumat 77 KUVIO JA VIIVA Näihin "ohjaimiin" ei voi liittää lainkaan tapahtuma-aliohjelmia. Ne eivät siis reagoi sen enempää hiireen kuin näppäimistöönkään. DATA-OHJAIN Validate: Mahdollistaa muutosten varmistamisen ennen tallentamista tietokantaan (tarkemmin luvussa 16). Data-ohjaimen vierityspainikkeisiin ei liity ohjelmoitavia tapahtumia, vaan toiminnot (tietueiden haut) ovat automaattisia. 87TAULUKKO SelChange, RowColChange: Kun käyttäjä vaihtaa hiiren tai nuolinäppäimen avulla aktiivista solua tai valitsee soluvälin hiirellä (ainoastaan SelChange-tapahtuma). Taulukolla ei ole lainkaan Change-tapahtumaa, joka reagoisi solun sisällön muutoksiin. SelChange-tapahtuman (mutta ei RowColChange-tapahtumaa) voi aiheuttaa myös koodilla (vrt. luku 8). 87OLE Updated: Kun OLE-asiakas päivitetään. VALINTAIKKUNA Ei tapahtumia. DATATAULUKKO BeforeUpdate: Sidotun data-ohjaimen päivytys voidaan estää asettamalla Cancel-arvoksi True. DATAYHDISTELMÄRUUTU Vakiotapahtumia. DATALUETTELORUUTU Vakiotapahtumia.

78 Visual Basic 5 -ohjelmoinnin peruskurssi VALIKKO Click: ainoa tapahtuma. LUOKAT Initialize, Terminate: Näihin liitetään koodia, joka halutaan suorittaa luokkaan kuuluvaa oliota luotaessa tai lopetettaessa (Tarkemmin Jatkokurssi-kirjassa). ESIMERKKI Avaa nyt yksikkölaskinprojekti Yksikko.vbp, jotta voit liittää siihen tarvittavan koodin. Muistamisen helpottamiseksi ohjaimet kannattaa nimetä. Aseta Name-arvot seuraavasti: Ylempi otsikko: Metriotsikko Alempi otsikko: Jalkaotsikko Oikeanpuoleinen otsikko: Luettelo-otsikko Ylempi tekstiruutu: Metriruutu Alempi tekstiruutu: Jalkaruutu Luetteloruutu: Luettelo Välitavoite 1: Metriruutu sisältää Jalkaruutuun kirjoitettua jalkamäärää vastaavan metrimäärän. Ratkaisu: Kaksoisnapsauta Jalkaruutua. Koodi-ikkunassa on valmiina Jalkaruutu_change-tapahtuman aliohjelmapohja. Change-tapahtuma on mikä tahansa muutos tekstiruudussa. Niinpä jos kirjoitat seuraavan koodirivin: Metriruutu.text = Val(Jalkaruutu.text) / 3 Metriruutu päivittyy välittömästi, kun Jalkaruutuun kirjoitetaan numeroita. Val-funktio palauttaa merkkijonoa vastaavan numeerisen muuttujan (ks. luvut 5 ja 12). Selkeämmin yo. koodirivin voi toteuttaa seuraavasti: Jalat = Val(Jalkaruutu.text) Metrit = jalat / 3 Metriruutu.text = metrit

4 Tapahtumat 79 Metrit ja Jalat -muuttujia ei ole pakko määritellä, koska niihin viitataan vain tässä aliohjelmassa (ks. luku 6). Kun kokeilet ohjelmaa, huomaat, että tulostusruudun (metriruudun) desimaalimerkki on sama, jonka olet määrittänyt Windowsin ohjauspaneelissa. Sen sijaan lukuja syötettäessä ja koodissa Visual Basic hyväksyy sekä pilkun että nollan. HARJOITUS Kirjoita vastaava koodi metriruudulle siten, että jalkalaatikkoon päivittyy oikea (käänteinen) arvo syötettäessä lukuja metriruutuun. Kokeile ohjelmaa ja mieti, miksi ratkaisu ei toimi. Välitavoite 2: Molemminpuoleinen muunnos. Harjoituksen ratkaisu ei toiminut, koska myös tekstiruudun päivitys koodista on Change-tapahtuma. Tietyissä tilanteissa ruudut käyttäytyvät hallitsemattomasti. Koodit on parempi liittää johonkin toiseen tapahtumaan. Ota Sub Jalkaruutu_Change esille, merkitse koodirivit ja leikkaa ne Edit - Cut -komennolla leikepöydälle. Valitse tapahtumavalikosta Key- Press, vie kohdistin Sub Jalkaruutu_KeyPress -rivin alle ja liitä leikepöydältä äsken leikkaamasi rivit koodiin. Voit antaa ohjaimen reagoida kaikkiin näppäimiin tai vain esim. Enter-näppäimeen. KeyAscii sisältää viimeksi painetun näppäimen asciiarvon. If keyascii = 13 then Jalat = Val(Jalkaruutu.text) Metrit = Jalat / 3 Metriruutu.text = Metrit end if If then -jaksosta ja muista kontrollirakenteista tarkemmin luvussa 6. Menettele nyt Metriruudun kanssa samoin kuin yllä. TAPAHTUMAN SIMULOINTI KOODISTA Tapahtuman voi simuloida yksinkertaisesti kutsumalla sen tapahtumaaliohjelmaa koodista. Lausealiohjelmaa (jollaisia kaikki tapahtuma-alioh-

80 Visual Basic 5 -ohjelmoinnin peruskurssi jelmat ovat) kutsutaan kirjoittamalla se omalle rivilleen koodiin ja mahdolliset argumentit ilman sulkuja. Aliohjelmista tarkemmin luvussa 6. Huomaa Private-avainsana aliohjelman alussa. Se merkitsee, että tapahtuma-aliohjelmaa voidaan kutsua vain sen omasta lomakkeesta käsin. Jos haluat, että aliohjelma on kutsuttavissa koko projektista, vaihda Private-sanan tilalle Public (aliohjelmista ja ohjelmointisyntaksista tarkemmin luvussa 6). Sijoita nyt Yksikkölaskin-esimerkissä tapahtuma-aliohjelmaan Sub Metriotsikko_Click seuraava rivi: Jalkaruutu_Keypress 13 Nyt käyttäjä voi päivittää Metriruudun Enter-näppäimen painamisen sijasta myös napsauttamalla Metriotsikko-otsikkoa. Normaali käytäntö on tietysti sijoittaa tämäntapainen toiminto komentopainikkeelle, jonka Caption on "OK". Emme tee sitä nyt, koska jatkossa muutamme ohjelmaa huomattavasti. Siksi sinun on nyt syytä tallentaa muokattu lomake. OMIEN TAPAHTUMIEN OHJELMOINTI Ohjelmoidessasi omia luokkia voit liittää niihin itse määrittämiäsi tapahtumia samoin kuin ominaisuuksia ja metodeitakin. Käsittelen luokkaohjelmointia Jatkokurssi-kirjassa.