Kirjautuminen

Haku

Tehtävät

Opasarkisto: Visual Basic -opas: Osa 6 - Hiiri ja näppäimistö

  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.

Tässä osassa käydään ensin läpi hiiren ja näppäimistön käsittely perustasolta ja sitten tutustutaan VB:n monipuolisiin merkkijonofunktioihin.

Hiiren käsittely

Hiiren käsittelyyn on kolme tapahtuma-aliohjelmaa, jotka löytyvät useimmista komponenteista. Ne ovat MouseDown, MouseMove ja MouseUp. Aliohjelmilla on seuraava tarkoitus:

MouseDownaktivoituu, kun hiiren nappi painetaan pohjaan komponentin päällä
MouseMoveaktivoituu, kun hiirtä liikutetaan komponentin päällä
MouseUpaktivoituu, kun hiiren nappi vapautetaan komponentin päällä

Tapahtuma-aliohjelmissa on lisäksi käytössä seuraavat erikoismuuttujat:

Button

hiiren nappien tila:

1vasen nappi pohjassa
2oikea nappi pohjassa
3vasen ja oikea nappi pohjassa
4keskimmäinen nappi pohjassa
5vasen ja keskimmäinen nappi pohjassa
6oikea ja keskimmäinen nappi pohjassa
7vasen, oikea ja keskimmäinen nappi pohjassa
Shiftnäppäimistön erikoisnäppäinten tila, ks. Näppäimistön käsittely
Xosoittimen x-koordinaatti komponentin vasemmasta yläkulmasta mitattuna
Yosoittimen y-koordinaatti komponentin vasemmasta yläkulmasta mitattuna

Seuraava esimerkki luo yksinkertaisen piirto-ohjelman. Piirtokomennot PSet ja Line käsitellään oppaan seuraavassa osassa.

Private Sub Form_Load
    Me.DrawWidth = 4 'viivan paksuus 4
End Sub

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    PSet (X, Y)
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Static vx As Single, vy As Single 'muuttujat osoittimen vanhalle paikalle
    If Button = 1 Then
        If vx <> 0 And vy <> 0 Then
            Line (vx, vy)-(X, Y)
        End If
        vx = X
        vy = Y
    Else
        vx = X
        vy = Y
    End If
End Sub

Näppäimistön käsittely

Näppäimistön käsittely on hyvin samantapaista kuin hiiren käsittely. Näppäimistöaliohjelmia on kolme, KeyDown, KeyPress ja KeyUp. Aliohjelmilla on seuraava tarkoitus:

KeyDownaktivoituu, kun näppäin painetaan alas
KeyPressaktivoituu, kun näppäintä painetaan
KeyUpaktivoituu, kun näppäin nostetaam ylös

KeyPress on ylemmän tason käsittelijä, ja se aktivoituu vain, jos KeyDownissa ei ole tehty mitään. Aliohjelmilla on lisäksi seuraavat erikoismuuttujat:

KeyCodepainetun näppäimen koodi (KeyDown ja KeyUp)
KeyAsciipainetun näppäimen ASCII-koodi (KeyPress)
Shift

Shift-, Alt- ja Control-näppäinten tilat:

1painettu Shift
2painettu Alt
3painettu Shift ja Alt
4painettu Control
5painettu Shift ja Control
6painettu Alt ja Control
7painettu Shift, Alt ja Control

Käytännössä KeyPress on melko turha aliohjelma, samat asiat saa tehtyä KeyDownilla. Jos formilla on komponentteja, KeyPreview-ominaisuus määrittää, että kaikki näppäinpainallukset kulkevat ensin formin näppäimistöaliohjelmille.

Seuraava esimerkki näyttää näppäimistöstä painettaessa näppäinkoodin ja Shift-muuttujan arvon:

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    MsgBox "Näppäinkoodi: " & KeyCode & vbCrLf & "Shift: " & Shift
End Sub

VB sisältää useimmille näppäimille vakion, joka korvaa vaikeasti muistettavan KeyCoden. Esimerkiksi näppäimen A vakio on vbKeyA, näppäimen Shift vbKeyShift, näppäimen Esc vbKeyEsc jne. eli vbKey + näppäimen nimi englanniksi.

Merkkijonofunktiot

Visual Basic sisältää monipuoliset merkkijonofunktiot. Tässä kappaleessa käsitellään niistä tärkeimmät.

Lenpalauttaa merkkijonon pituudenLen("Testi") on 5
Leftpalauttaa tietyn määrän merkkejä merkkijonon alustaLeft("Testi", 3) on "Tes"
Rightpalauttaa tietyn määrän merkkejä merkkijonon lopustaRight("Testi", 3) on "sti"
Midpalauttaa tietyn määrän merkkejä merkkijonon keskeltäMid("Testi", 2, 3) on "est"
UCasemuuttaa merkkijonon suuriksi kirjaimiksiUCase("Testi") on "TESTI"
LCasemuuttaa merkkijonon pieniksi kirjaimiksiUCase("Testi") on "testi"
LTrimpoistaa välilyönnit merkkijonon alustaLTrim(" Testi ") on "Testi "
RTrimpoistaa välilyönnit merkkijonon lopustaLTrim(" Testi ") on " Testi"
Trimpoistaa välilyönnit merkkijonon molemmilta puoliltaTrim(" Testi ") on "Testi"
InStrpalauttaa merkkijonon paikan toisessa merkkijonossaInStr("Testi", "st") on 3
InStr("Testi", "sv") on 0
Ascpalauttaa merkin ASCII-koodinAsc("A") on 65
Chrpalauttaa ASCII-koodin merkinChr(65) on "A"
Spacepalauttaa tietyn määrän välilyöntejäSpace(5) on "     "
Stringpalauttaa tietyn määrän samoja merkkejäString(5, "A") on "AAAAA"

Lopuksi

Kuudes osa alkaa olla lopussa, mutta ei hätää: jatkoa on luvassa. Miten nopeasti, se riippuu oppaasta saamastani palautteesta, jota voi lähetellä keskustelualueelle tai sähköpostilla.

Seuraavassa osassa käsitellään VB:n grafiikkakomentoja ja ehkä jotain muutakin.


Kommentit

makeuu [14.02.2004 21:15:03]

Lainaa #

kunhan jostaki vain sais sellaisen scriptin joka liikuttas bmp-kuvaa nuolinäppäimistä :D

Pasikki [14.03.2004 11:50:19]

Lainaa #

Niin, minäkin tarvisin sellaista. Eiks sitä ole missään?

tuomas [21.03.2004 13:22:46]

Lainaa #

Se kuvan liikutus onnistuu näin:
-Tee pictureboxi formille.
-formin keydown tapahtumaan seuraava:
if keycode = 37 then picture1.left = picture1.left - 5
if keycode = 38 then picture1.top = picture1.top - 5
if keycode = 39 then picture1.left = picture1.left + 5
if keycode = 40 then picture1.top = picture1.top + 5

jos ei toimi kokeilkaa vaihtaa keypreview trueksi.

SirDayBat [09.06.2004 12:05:00]

Lainaa #

UCase muuttaa merkkijonon suuriksi kirjaimiksi
UCase("Testi") on "TESTI"

LCase muuttaa merkkijonon pieniksi kirjaimiksi
UCase("Testi") on "testi"

alemman pitäisi olla Lcase eikä Ucase

Tumppu [05.09.2005 12:02:29]

Lainaa #

tai keycodea käyttäen..
- formin keydown komennon alle:
_______________________________________________
select case keycode
case vbkeyup: picture1.top=picture1.top - 5
case vbkeydown: picture1.top=picture1.top + 5
case vbkeyrigth: picture1.left=picture1.left + 5
case vbkeyleft: picture1.left=picture1.left - 5
end case
_______________________________________________

tuohon voi lisätä myös esim.:
_______________________________________________
case vbkeyspace:
'nämä tapahtuu painamalla space (välilyöntiä)
'rivejä voi olla useampikin, kuin
'nämä kaksi
_______________________________________________

NanoSoft [23.02.2006 20:56:20]

Lainaa #

niin ja olisi myös melko ovelaa jos tekisi tuon
case vbkeyup: picture1.top=picture1.top - 5
näin:
case vbkeyup: picture1.top -= 5

ErroR++ [30.04.2011 12:15:11]

Lainaa #

Ei pelaa hirveesti mikään tossa visual studio.netissä.

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