Kirjautuminen

Haku

Tehtävät

Opasarkisto: Visual Basic -opas: Osa 7 - VB:n grafiikkakomennot

  1. Osa 1 - Johdanto
  2. Osa 2 - Käyttöliittymä
  3. Osa 3 - Muuttujat ja taulukot
  4. Osa 4 - Ehdot ja silmukat
  5. Osa 5 - Aliohjelmat ja funktiot
  6. Osa 6 - Hiiri ja näppäimistö
  7. Osa 7 - VB:n grafiikkakomennot
  8. Osa 8 - Tiedostot
  9. Osa 9 - WinAPIn käyttö

Kirjoittaja: Antti Laaksonen

⚠ Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi. ⚠


Grafiikan piirtäminen on yksi kiinnostavimmista ohjelmoinnin alueista. Tämä opas kertoo Visual Basicin omista grafiikkakomennoista, joilla onnistuu helposti pisteiden, viivojen, ympyröiden ja muiden kuvioiden piirtäminen, tekstin tulostaminen näytölle sekä valmiiden kuvatiedostojen näyttäminen. Grafiikan piirtoon liittyvät ongelmat eivät myöskään jää huomiotta. Usein ratkaisuna ongelmaan on käyttää Visual Basicin ulkopuolista kirjastoa, joita on esitelty oppaan lopussa.

Piirtoasteikko

Visual Basicin tavallinen mittayksikkö on twip, jonka pituus on 1/567 eli noin 0,002 senttimetriä. Grafiikan piirtoon tämä mittayksikkö ei kuitenkaan sovellu hyvin, vaan on parempi käyttää pikseleitä. Yksi pikseli vastaa suoraan yhtä näytöllä näkyvää kuvapistettä. Mittayksikkö valitaan lomakkeen tai kuvakehyksen ScaleMode-ominaisuuden avulla, pikselin tunnusnumero on 3. Kaikissa tämän oppaan esimerkeissä mittayksiköksi on valittu pikseli.

Ominaisuudet ScaleLeft, ScaleTop, ScaleWidth ja ScaleHeight kertovat lomakkeen tai kuvakehyksen piirtoasteikon. Näiden ominaisuuksien arvo muuttuu automaattisesti ScaleMode-ominaisuuden vaihtuessa. Joskus voi kuitenkin olla kätevää määrittää piirtoasteikko itse.

Esimerkki: Lomakkeen leveys (Width) on 4800 ja korkeus (Height) on 3600. Aluksi ScaleWidth on 4680 ja ScaleHeight on 3195. Ero lomakkeen todelliseen kokoon johtuu siitä, että reunukset ja otsikkorivi vievät jonkin verran tilaa piirtoalueelta. Vaihdetaan ScaleModeksi 3, jolloin ScaleWidth on 312 ja ScaleHeight on 213. Tämä on piirtokomentojen käyttämä uusi asteikko.

Värit

Värit ilmoitetaan tavallisesti RGB-funktion avulla, jolloin parametrina on punaisen, vihreän ja sinisen värisävyn osuus asteikolla 0 – 255. Esimerkiksi punainen väri on RGB(255, 0, 0), tummansininen RGB(0, 0, 100) ja vaaleanharmaa RGB(200, 200, 200). Samat värit kokonaislukumuodossa ovat &H0000FF, &H640000 ja &HC8C8C8; jokainen värisävy mahtuu Long-tyyppiseen muuttujaan.

Väreihin liittyy kolme ominaisuutta: taustaväriin vaikuttava BackColor, piirtoväriin vaikuttava ForeColor ja täyttöväriin vaikuttava FillColor. Kaksi ensimmäistä ominaisuutta on lomakkeen ja kuvakehyksen lisäksi monilla muillakin ohjaimilla. Useimmissa piirtokomennoissa värin voi myös määrittää erikseen, jolloin se kumoaa lomakkeen tai kuvakehyksen valmiin määrityksen.

Piirtokomennot

Tärkeimmät lomakkeen ja kuvakehyksen piirtokomennot ovat:

komentokäyttö
PSetpiirtää pisteen
Pointlukee pisteen värin
Linepiirtää viivan tai suorakulmion
Circlepiirtää ympyrän
Printkirjoittaa tekstiä

Seuraavissa esimerkeissä piirtokomennot voi kirjoittaa esimerkiksi lomakkeen Activate-tapahtumaan.

Kuvat näytöllä ja muistissa

Jos lomakkeen tai kuvakehyksen AutoRedraw-ominaisuus on False (oletus), grafiikka piirretään ainoastaan näytölle. Mutta jos AutoRedraw on True, grafiikka tallennetaan myös muistiin, jolloin se ei esimerkiksi katoa, jos ikkunan päälle tulee välillä jonkin toisen ohjelman ikkuna. Tietyissä tapauksissa AutoRedraw myös vähentää vilkkumista, mutta se myös hidastaa grafiikan piirtämistä. Jos AutoRedraw on False, ikkunan päivityksestä täytyy huolehtia itse. Aina kun päivitys on tarpeen, siirrytään Paint-tapahtumaan. Väärin asetetulla AutoRedraw-ominaisuudella on taipumus aiheuttaa mystisiä grafiikkaongelmia ohjelmassa.

Ominaisuudet Picture ja Image ovat lähellä toisiaan. Jos lomakkeeseen, kuvakehykseen tai kuvaohjaimeen ladataan valmis kuva tiedostosta, käytetään Picture-ominaisuutta. Mahdollisia kuvamuotoja ovat muiden muassa BMP, GIF ja JPG, ja kuvan voi ladata joko suunnitteluvaiheessa ominaisuuslistan kautta tai koodissa LoadPicture-funktiolla. Jos parametrina antaa tyhjän merkkijonon, kuva katoaa. Kuvakehykseen ladataan kuva näin:

pKuva.Picture = LoadPicture("oma.bmp")

Ominaisuus Image sisältää ladatun kuvan lisäksi myös jälkeenpäin piirretyn grafiikan, jos AutoRedraw on True. Komennolla SavePicture näin piirretyn grafiikan voi myös tallentaa takaisin tiedostoon. Tallennusmuoto on aina BMP. Seuraava esimerkki tallentaa tiedostoon kuvakehykseen piirretyn grafiikan.

' tätä ilman tallennus ei onnistu
pKuva.AutoRedraw = True

' piirretään grafiikkaa
pKuva.Circle (30, 30), 20
pKuva.Line (30, 30)-(60, 60), , B

' tallennetaan kuva
SavePicture pKuva.Image, "tuotos.bmp"

Viiva- ja kuvio-ohjain

Viivoja ja yksinkertaisia kuvioita voi esittää myös viiva- ja kuvio-ohjainten avulla. Ohjaimet ovat siinä mielessä poikkeuksellisia, että niillä ei ole lainkaan tapahtumia eikä toimintoja. Tärkeimmät viivaohjaimen ominaisuudet ovat viivan paikan määrittävät X1, Y1, X2 ja Y2. Kuvio-ohjaimen paikka määritetään muiden ohjainten lailla, ja Shape-ominaisuus vaikuttaa näytettävään kuvioon (suorakulmio, neliö, ympyrä). Grafiikkakomentoihin verrattuna ohjainten etuna on se, että niitä voi liikuttaa helposti taustan sotkeutumatta. Todellisuudessa viiva- ja kuvio-ohjaimelle ei kuitenkaan ole kovin usein käyttöä.

Kun Visual Basic ei riitä...

Valmiiden grafiikkakomentojen käyttäminen on helppoa, mutta ne eivät usein ole riittävän nopeita esimerkiksi peleissä tarvittavaan grafiikkaan. Toisinaan riittää, että käyttää Windows APIn grafiikkafunktioita Visual Basicin omien sijasta, mikä ei vaadi suuria muutoksia ohjelmaan. Mutta parhaimmat pelit toteutetaan kuitenkin Direct3D:n (osa DirectX:ää), OpenGL:n tai jonkin muun varta vasten grafiikkaohjelmointiin tarkoitetun kirjaston avulla. Näiden kirjastojen käyttö pitää opetella erikseen, mutta lopputulos on vaivan arvoinen.

Jos olet kiinnostunut peliohjelmoinnista, nämä Ohjelmointiputkan oppaat ovat tutustumisen arvoisia:


Kommentit

miiro [12.11.2003 19:33:06]

#

ei must toimi toi print "texti" se vaa ilmottelee erroreit.
(VB6)

zigilii [12.01.2004 16:30:55]

#

mulla se tulosti n 4000-7000 ympyrää/sec

Gaxx [15.01.2004 17:59:19]

#

Aika iso haarukka toi 4000-7000? Mulla tuli 11480-11570 ymp./s

pipopää [23.05.2004 15:08:46]

#

Lol mä sanon mulla tuli 32680 ympyrää sekassa mitäs siihen sanot!

SirDayBat [09.06.2004 16:47:49]

#

Mun """""tietokoneella""""" paras määrä oli 999.... nojaa kone on 200 megahertsiä ei siis mikään huippu XD!!

Spongi [18.11.2004 03:13:45]

#

bugi: jos maara menee yli 32767... :P

Kirjoita kommentti

Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta