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 SubForm1: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 SubKuten 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 SubKä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 SubNyt 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.