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
Kuten olet jo ehkä huomannut, ikkunoita on erityylisiä. Ohjelma voi koostua yhdestä tai useammasta ikkunasta. Jos ohjelmalla on enemmän kuin yksi ikkuna yhtäaikaa käytössä, voivat ikkunat olla erillisiä jolloin puhutaan ns. SDI -mallista (Single Document Interface) tai yhden pääikkunan sisällä jolloin puhutaan ns. MDI -mallista (Multi Document Interface). Tämän lisäksi on yleistymässä ns. resurssienhallinta - tyyli. Alla kuvat kunkin tyylisestä ikkunointimallista.

SDI -tyyli.

MDI -tyyli.

Resurssienhallinta -tyyli.
Ikkunoita voi siis näyttää useammalla eri tyylillä ja lisäksi ikkuna itsessään voi olla oman
tyylisensä. Käymme seuraavaksi läpi yleisimmät tyylit. "Perusikkuna" on ikkuna, jonka kokoa voi muuttaa
ja siinä on ikkunan pienennyspainike
, ikkunan koon
muutospainike
ja ikkunan sulkupainike
.

Normaali ikkuna.
Ikkunan BorderStyle- ja ControlBox- ominaisuuksia muuttamalla voit vaikuttaa ikkunan ulkoasuun merkittävästi. Ensimmäinen määrittää millainen reunus ikkunalla on ja voiko ikkunan kokoa muuttaa (toki voit estää koon muutoksen vaikka ikkuna sen sallisi). Toinen ominaisuus määrittää näytetään edellä mainittuja kolmea painiketta ikkunan oikeassa yläkulmassa.

Erikoisikkuna.
Tässä kappaleessa harjoittelemme SDI- ja MDI -tyyppisten ikkunoiden ja BorderStyle- ja ControlBox -ominaisuuksien käyttöä.
SDI -ikkunointimallisen ohjelman teko on helppoa, tarvitset vain lomakkeita ja näytät niitä. Teemme nyt esimerkin vuoksi SDI -ikkunointimallisen ohjelman joka koostuu kahdesta ikkunasta. Luo uusi Standard EXE -projekti ja lisää siihen yksi ikkuna, jolloin sinulla pitäisi olla kaksi ikkunaa kuten alla olevassa kuvassa on esitetty:

SDI -ikkunointimalliesimerkki.
Lisää Form1:n Load -tapahtumaan seuraava ohjelmakoodi:
Private Sub Form_Load()
Form2.Show
End Sub
Form1:n latautuessa ladataan samalla Form2 ja näytetään se samantien. Lopputuloksena molemmat
ikkunat näkyvät näytöllä. Tämä on SDI -ikkunointimallin käyttöä. Ongelmana on se, että ikkunat
ovat erillisiä ja käyttäjän voi olla hankala hahmottaa lomakkeiden kuuluvan samaan ohjelmaan.
SDI -mallissa voit "ohjata" käyttäjää käyttämään tiettyä lomaketta asettamalla sen modaaliseksi.
Seuraavaksi muutamme ohjelmakoodia siten, että Form2 näytetään modaalisena, joka pakottaa sulkemaan
Form2:n jotta voisi nähdä/käyttää Form1:stä:
Private Sub Form_Load()
Form2.Show vbModal
End Sub
Kuten ehkä huomasit, ainoa ero edelliseen ohjelmakoodiin on vbModal -parametri joka asettaa
lomakkeen (Form2) näytettäväksi modaalisena eli muiden VB -lomakkeiden yläpuolella. Huomaa, että
kyseessä ei ole systeemitason modaalisuus eli voit käyttää muita ohjelmia (ikkunoita) normaalisti.
VB:ssä voi tehdä myös systeemitason modaalisen ikkunan mutta siihen pitää käyttää Windows API
-kutsuja.
Yhteenvetona SDI:stä voisi todeta sen, että em. ikkunointimallia kannattaa käyttää pienissä, muutaman ikkunan sisältävissä ohjelmissa (projekteissa). Jos lomakkeiden määrä ylittää puolenkymmenen, kannattaa miettiä MDI -mallin käyttöönottoa.

MDI -ikkunointimalliesimerkki.
Lisää nyt MDIForm1:n Load -tapahtumaan seuraava ohjelmakoodi:
Private Sub MDIForm_Load()
Form2.Show
Form3.Show
End Sub
Käynnistä ohjelma ja - Form1 käynnistyy! Miksi? Form1 käynnistyy ensimmäisenä koska se on
määritelty Project -valikon Project1 Properties -toiminnosta aukeavassa
asetusikkunassa aloitusobjektiksi. Muuta aloitusobjektiksi
MDIForm1 ja käynnistä ohjelma uudestaan. Kuten ehkä huomasit, MDIForm1:n sisään avautuu
kaksi lomaketta Form2 ja Form3. Nämä ovat ns. lapsilomakkeita jotka toimivat äitilomakkeen
sisällä. Muutetaanpa ohjelmakoodi seuraavanlaiseksi:
Private Sub MDIForm_Load()
Form2.Show
Form3.Show
Form1.Show vbModal
End Sub
Nyt lataamme MDI -ikkunan kuten ennenkin ja sen sisään kaksi ikkunan (Form2 ja Form3).
Tämän jälkeen lataamme (SDI -ikkunointimallin mukaisen) ikkunan Form1 (tällä kertaa
modaalisena). Tuloksena meillä on samassa ohjelmassa molempia ikkunointimalleja käyttävä
ohjelma.

MDI- ja SDI -ikkunointimallit.
| BorderStyle | Selite |
|---|---|
| 0 - None | Ikkunalla ei ole reunuksia eikä myöskään ControlBox:ia, ikkunan paikkaa ei voi muuttaa. Kätevä jos haluat näyttää esim. kuvan. |
| 1 - Fixed Single | Ikkunalla on reunukset ja sulkupainike, ikkunan kokoa ei voi muuttaa. Voit lisätä ikkunan pienennys- ja koonmuutospainikkeet käyttämällä MinButton- ja MaxButton -ominaisuuksia. |
| 2 - Sizable | "Normaali" ikkuna, ikkunan kokoa voi muuttaa, sisältää kaikki ControlBox:n ominaisuudet (joita voi tosin ottaa pois käytöstä em. ominaisuutta muuttamalla). |
| 3 - Fixed Dialog | Kuten Fixed Single -ikkuna mutta et voi lisätä ikkunan pienennys- ja koonmuutospainikkeita. |
| 4 - Fixed ToolWindow | Näyttää ns. työkaluikkunan, joka ei näy alapalkissa eikä kokoa voi muuttaa. Ikkunan fonttikoko on pienempi. |
| 5 - Sizable ToolWindow | Näyttää ns. työkalurivin jonka koon voi muuttaa, ikkuna ei näy alapalkissa. Ikkunan fonttikoko on pienempi. |
Huom! Voit lisätä tai poistaa (ikkunasta riippuen) ikkunan pienennys- ja koonmuutospainikkeita käyttämällä MaxButton ja MinButton -ominaisuuksia. ShowInTaskbar -ominaisuudella voit määrittää näkyykö lomake alapalkissa.
Tehdäänpä nyt esimerkin vuoksi ohjelma, joka käyttää em. ominaisuuksia. Luo uusi Standard EXE -projekti ja muuta lomakkeen BorderStyle -ominaisuuden arvoksi 4 - Fixed ToolWindow. Aseta ControlBox -ominaisuuden arvoksi False ja ShowInTaskbar -ominaisuuden arvoksi True. Tuloksena seuraavan näköinen ohjelma:

Työkaluikkuna.