Etusivu Aloitus Kontrollit Metodit Muuttujat Ohjausrakenteet Silmukat Matematiikka Debuggaus Virheenkäsittely Vuorovaikutus Valikot Tiedostonkäsittely Ikkunat Leikepöytä Drag and Drop Tiedostopäätteet Linkkejä Harjoitukset

Johdanto ja tavoite

Tässä osiossa opetellaan käyttämään leikepöytää. Tämän osion jälkeen opiskelija tietää miten leikepöytää käytetään ja osaa soveltaa oppimaansa omissa ohjelmissaan. Leikepöydän käyttö on tärkeää Windows -sovelluksissa.

Leikepöytä

Jotta leikepöytää voisi ja ymmärtäisi käyttää, on hyvä tietää mikä se oikein on. Englanninkielinen termi leikepöydälle on Clipboard. Leikepöydän voi ajatella olevan ohjelmien välinen tietovarasto. Leikepöydälle voidaan tallentaa erimuotoista tietoa, mm. tekstiä ja kuvadataa. Ohjelma voi (jos ohjelmoija ohjelmoi ohjelmaansa em. toiminnot) lisätä, lukea ja poistaa tietoa leikepöydältä.

VB -ohjelmoijan kannalta leikepöytä on joukko komentoja ja viestejä joilla voidaan siirtää tietoa leikepöydältä ohjelmaan tai päinvastoin. Leikepöydän tiedot voivat olla useaa eri formaattia ja on ihan ohjelmasta kiinni mitä formaattia ohjelma "osaa lukea".

Ohjelman käyttäjälle leikkauspöydän käyttö on kopiointia, leikkausta ja liitä. Ohjelmoijalla tulee kirjoittaa näihin komentoihin ohjelmakoodi joka tekee tarvittavat siirrot.

Kopioi

Käytännössä kopiointi on tiedon siirtämistä käyttäjän haluamasta kohteesta leikepöydälle. Kopiointi voidaan tehdä eri tavoin. Otetaan esimerkki tekstikentästä, jonka tekstin annamme kopioida. Teksti voidaan kopioida "puhtaana" tekstinä, toisaalta jos tekstikenttä sisältääkin linkin, voimme kopioida sen linkkinä tai jos teksti on RTF -muotoista, voimme kopioida sen RTF -muotoisenakin. Lisäksi voimme kopioida leikepöydälle jopa kuvan tekstistä jos haluamme. Tällöin käyttäjä voi liittää tekstitiedon tai kuvan toiseen ohjelmaan.

Seuraavassa esimerkissä luomme uuden Standard EXE -projektin, johon lisäämme kolme painiketta, Kopioi, Leikkaa ja Liitä. Lisäksi lisäämme ikkunaan tekstilaatikon, jonka tekstiä kopioimme, leikkaamme ja liitämme. Voit kopioida malliohjelman täältä.

Leikepöytä
Esimerkkiohjelma leikepöydän käytöstä.

Esimerkkiohjelmassamme suoritamme kopioinnin eli asetamme leikepöydälle tekstimuotoista tietoa:

Clipboard.SetText txtTieto.Text, vbCFText
Sinun kannattaa tyhjentää leikepöytä Clear -metodilla ennen uuden tiedon laittamista leikepöydälle. Tosin meidän esimerkissämme asetamme vain tekstitietoa, joten haluamme jättää muut tiedot ennalleen. Tilanteesta riippuen kannattaa tyhjentää leikepöytä tai jättää se tyhjentämättä. Kannattaa huomioida myös se, että "vanha" leikepöydän tieto jää "uuden" tiedon alle jos tieto on samaa tyyppiä. Alla olevassa taulukossa on listattu Clipboard -olion metodit ja niiden selitykset:

KomentoSelite
ClearTyhjentää leikepöydän
GetDataOttaa parametrina määritellyn formaatin mukaisen tiedon leikepöydältä
GetFormatPalauttaa totuusarvon kertoen onko parametrina annetun formaatin mukaista tietoa leikepöydällä
GetTextPalauttaa tekstimuotoista tietoa, palauttaa "" jos leikepöytä on tyhjä. Parametrina annetaan haluttu tekstiformaatti
SetDataAsettaa parametrina annetun formaatin mukaisen kuvan/tiedon leikepöydälle
SetTextAsettaa parametrina annetun formaatin mukaista tekstitietoa leikepöydälle

Alla olevassa taulukossa on esitelty eri formaatit joita GetData -metodille voidaan antaa:

FormaattiSelite
vbCFBitmapBittikarttakuva, BMP -formaatti
vbCFMetafileVektorikuva, WMF (perus) tai EMF (laajennettu) -formaatti
vbCFDIBLaitteistoriippumaton bittikarttakuva, DIB -formaatti
vbCFPaletteVäripaletti

Alla olevassa taulukossa on esitelty eri formaatit joita GetFormat -metodille voidaan antaa:

FormaattiSelite
vbCFLinkDDE tieto
vbCFTextTekstitieto
vbCFBitmapBittikarttakuva, BMP formaatti
vbCFMetafileVektorikuva, WMF (perus) tai EMF (laajennettu) -formaatti
vbCFDIBLaitteistoriippumaton bittikarttakuva, DIB -formaatti
vbCFPaletteVäripaletti

Alla olevassa taulukossa on esitelty eri formaatit joita GetText -metodille voidaan antaa:

FormaattiSelite
vbCFLinkDDE tieto
vbCFTextTekstitieto
vbCFRTFRTF -muotoinen teksti

Alla olevassa taulukossa on esitelty eri formaatit joita SetData -metodille voidaan antaa:

FormaattiSelite
vbCFBitmapBittikarttakuva, BMP -formaatti
vbCFMetafileVektorikuva, WMF (perus) tai EMF (laajennettu) -formaatti
vbCFDIBLaitteistoriippumaton bittikarttakuva, DIB -formaatti
vbCFPaletteVäripaletti

Alla olevassa taulukossa on esitelty eri formaatit joita SetText -metodille voidaan antaa:

FormaattiSelite
vbCFLinkDDE tieto
vbCFTextTekstitieto
vbCFRTFRTF -muotoinen teksti

Leikkaa

Leikkaaminen ei eroa kopioimisessa muuten kuin siinä, että leikatessa poistamme tiedon, joka asetetaan leikepöydälle:
' Kopioidaan tekstikentän tieto leikepöydälle puhtaana tekstinä.
Clipboard.SetText txtTieto.Text, vbCFText
' Koska kyse on leikkaamisesta, täytyy tyhjentää tieto joka leikattiin
txtTieto.Text = ""
Kuten ehkä huomasit, siirsimme tiedon leikepöydälle ja poistimme sen alkuperäisestä paikasta eli tekstikentästä.

Liitä

Liittäminen tarkoittaa tiedon siirtämistä leikepöydältä sovellukseen. Tässä kannattaa pohtia miten käyttäjä voi valita tiedon "kohteen". Esimerkkiohjelmassamme vaihtoehtoa ei ole, ainoa kohde on tekstilaatikko. Entäpä jos meillä olisi kaksi tekstilaatikkoa? Silloin kannattaa selvittää mikä on aktiivinen kontrolli ja jos se on oikea, kopioida siihen.
' Otetaan tieto leikepöydältä
txtTieto.Text = Clipboard.GetText
' Hienompi tapa
'txtTieto.SelText = Clipboard.GetText
Huomaa, että esimerkkiohjelmassamme teksti kopioidaan vanhan tekstin päälle. "Hienompi" tapa olisi kopioida teksti leikepöydältä valitun tekstin päälle tekstilaatikossa eli käyttää tekstilaatikon SelText -metodia.
Tehtävä 24