Action List Komponentin Taikavoima. New Action ja New Standard Action

img
Jan
28

Edellisen työvaiheen jäljiltä esille tulleessa valikossa on valinnat New Action ja New Standard Action. Valitse jälkimmäinen, jolloin seuraava dialogi avautuu:


Kuva 1. Standard Action -valintaikkunasta valitaan jokin vakiotoiminnoista. Shift-näppäintä alhaalla pitäen voi valita yhtä aikaa useita toimintoja.

Ole huoleti, vaikka valintalista olisikin erilainen kuin oheisen kuvan lista. Listan sisältöön vaikuttaa, mitä kolmansien osapuolten komponentteja on käytettävissä. Osa listalla näkyvistä toiminnoista on luokiteltu edit-tyyppisiksi.

Valitse kaikki Edit-toiminnot shift-painike alas painettuna, kuten oheisessa kuvassa on tehty.

Edit-toimintoja määrä riippuu siitä, mikä C++ Builderin versio on käytössä. Versiossa 4.0 on kolme toimintoa ja versiossa 5.0 kuusi toimintoa. Käytössä on nyt Action List, joka sisältää vakiot edit-tyyppiset toiminnot. Palaa takaisin ominaisuusikkunaan, valitse edit-kategoria vasemmasta ruudusta ja saat valitut toiminnot näkyviin. Siirry nyt komponenttipaletin Win32-sivulle ja pudota työkalurivi lomakkeelle. Napsauta kakkospainikkeella riviä, valitse New Button ja lisää painike riville. Toista tämä kolme kertaa tai kuusi kertaa riippuen siitä, onko käytössäsi Builderin versio 4.0 vai 5.0.

Muokkaa jokaista painiketta vuoron perään ja liitä niihin yksi toiminnoista kuhunkin. Toiminnot näkyvät alasvetovalikossa. Varmista, että jokainen painike on liitetty eri toimintoon. Nyt on vuorossa ensimmäinen yllätys. Valitse painikerivi (ei yksittäistä painiketta) ja aseta sen ShowCaptions-ominaisuudelle arvoksi True. Nyt painikkeet muuttuvat toimintojen mukaisiksi niin, että niiden nimiksi tulee Copy, Cut, Paste ja niin edelleen. Lisäksi niiden koko muuttuu


Kuva 2. Action-toimintojen avulla saadaan Copy, Cut ja Paste -painikkeet automaattisesti käyttöön tai käytöstä pois sen mukaan, mikä on editoitavan komponentin tila. (Delete, Select All ja Undo ovat käytössä vain Builderin versiossa 5.0.)

otsikkotekstiin sopivaksi. Mutta lisää yllätyksiä on luvassa. Pudota pari tavallista tekstikenttää lomakkeelle, käynnistä sovellus ja kokeile käyttää näitä kenttiä.

Näin siinä kävi! Kirjoittamatta riviäkään koodia saimme painikerivin toimimaan kuten pitääkin sen mukaan, missä tilassa editoinnin kohteena oleva komponentti on. Esimerkiksi Copy- ja Cut-painikkeet ovat käytössä vain, jos tekstiä on valittu. Paste-painike on käytössä, jos leikepöydällä on tekstiä. Undo-painike toimii, jos valittuna oleva edit-komponentti kykenee perumaan edellisen siihen kohdistuneen toimenpiteen. Select All valitsee tietenkin koko tekstin. Näin ollen jokainen painike toimii juuri sillä tavalla kuin se otsikkotekstissään lupaa. Osaat varmasti arvostaa tätä, jos olet joskus ohjelmoinut nämä toiminnot käsin. Tämä on Action List -komponentin antama hyöty.

Onko sitten oikein päätellä, että Action List -komponentti tekee tarpeettomaksi kaiken koodin kirjoittamisen? Luonnollisesti näin ei ole, mutta niistä on toki paljon apua. Siitähän sujuvassa sovelluskehityksessä on kyse.

Valmiiksi tehtyjen komponenttien käyttäminen nopeuttaa sovelluksen valmistumista.

Automaattiset valikot

Edellisestä esimerkistä saa käsityksen, että Action List -komponentti on tarkoitettu vain painikerivejä varten. Näin ei kuitenkaan ole asian laita, vaan sillä on paljon laajempi soveltamisala.

Tarkastellaan esimerkiksi TtoolButton-, TspeedButton-, Tbutton-, TcheckBox-, TradioButton- ja TmenuItem-komponentteja. Niillä kaikilla on action-ominaisuus, joka voidaan määrittää toiminnoksi. Ne julkaisevat action-ominaisuutensa, joten se on käytettävissä ohjelmaa rakennettaessa. Itse asiassa kaikilla C++ Builderin komponenteilla on tämä ominaisuus. Jos sitä ei näy ohjelmaa rakennettaessa, on se poimittava ajon aikana.

Oletetaan, että teemme sovellusta, jossa sama toiminto on mahdollista käynnistää monin eri tavoin. Käytössä on esimerkiksi painikerivi, jonka yksi painike zoomaa näytöllä olevaa kuvaa, ja toinen painike, joka pienentää sitä. Samat toiminnot voi valita myös valikosta. Kuten hyvin tiedät, tämä voidaan toteuttaa yhden tapahtumakäsittelijän avulla, joka reagoi sekä painikkeeseen että valikkoon.

Mutta mitä tehdään, kun esimerkiksi halutaan muuttaa kummankin valintatavan opastekstiä tai pikavalintaa? Molempia on muutettava erikseen, mikä on työlästä ja voi aiheuttaa virheitä. Onneksi Action List tulee apuun.

Action List -komponentin perusajatus on, että sen avulla voidaan keskittää käyttäjän toimenpiteiden käsittely. Kun yksi tai useampi käyttöliittymän komponentti kytketään samaan Action List -komponenttiin, voidaan keskitetysti hallita toiminnon käytettävyys, nimiteksti ja pikavalinta. Tätä menettelyä kannattaa käyttää. Se edellyttää, että painikkeessa tai muussa komponentissa tapahtumakäsittely annetaan Execute-metodin hoidettavaksi.

Execute käynnistyy, kun painiketta painetaan, valikosta tehdään valinta ja niin edelleen.

Yksinkertainen esimerkki

Tutustutaan nyt tapaan, jolla Action List -komponenttia käytetään todellisessa sovelluksessa. Oheisella CD-levyllä on pieni sovellus nimeltä Action-Demo. Sen ikkunasta on kuva alla.

Sovelluksessa on kolme valikkoa View, Edit ja Email. Ne ovat reitti samoihin toimintoihin, jotka ovat käytettävissä myös painikerivin painikkeiden kautta. Edellä tutustuimme jo tapaan, jolla tavalliset edit-toiminnot käyttäytyvät. Tässä sovelluksessa on lisäksi räätälöidyt Zoom in ja Zoom out -toiminnot sekä sähköpostin lähettämistoiminto.

Näitä toimintoja ei todellisuudessa ole toteutettu sovellukseen, sillä kyseessä on ainoastaan Action List -komponentin toiminnan esittely. Kolmelle räätälöitävälle toiminnolle on toteutettu kullekin oma Execute-käsittelijä, jotka nyt ainoastaan kuittaavat, että painiketta on painettu tai valinta on tehty valikosta.

Todellisessa sovelluksessa tämän tilalle tulisi koodi, joka toteuttaisi kyseisen toiminnon, esimerkiksi lähettäisi sähköpostiviestin.

Kannattaa pitää mielessä, että räätälöityä toimintoa rakennettaessa painike tai valikon valinta eivät ole käytössä ennen kuin niitä vastaava Execute-metodi on käytettävissä. Tämä johtuu tietenkin siitä, että C++ Builder ei voi tietää, miten toiminto tulisi hoitaa ennen kuin se löytää Execute-tapahtumakäsittelijän. Vastaavasti on varottava kirjoittamasta Execute-metodia vakiotoiminnoille. Se nimittäin poistaa käytöstä valmiiksi purkitetun toiminnon, minkä jälkeen Cut, Copy, Paste ja niin edelleen eivät ole käytettävissä.

Kuten huomaat, tämä ohjelmointiartikkeli on sikäli tavallisuudesta poikkeava, että siinä ei ole riviäkään koodia! Tämä onkin Action List -komponentin idea. Se säästää vaivaa. Toivottavasti olet saanut ahaa-elämyksen ja lähdet nyt innolla lisäämään Action List -komponentteja omiin sovelluksiisi. Nauti siitä!

Kuva 3. Oheisella CD-levyllä on tämän pienen sovelluksen koodi ja ajettavat ohjelmat. Siinä käytetään sekä vakiotoimintoja että räätälöitäviä toimintoja.

Leave a Reply

Your email address will not be published. Required fields are marked *