Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Aloittelijan kuvanpalautus ongelma

Ville [13.08.2002 12:09:03]

#

Täällä aloittelija kyselee... joten yrittäkää olla kuolematta nauruun...

Eli, tein tuossa vb:llä mousedown ja mouseup harjoituksia, kun päähän pälkähti kokeilla jotain omaa juttua vastapainoksi.
Käytin seuraavaa koodia saadakseni image1:sen vaihtumaan image2:seen ja laskurin luvun lisääntymään yhdellä. Tähän asti homma toimi ok, mutta kun yritin saada timerillä image1:stä palaamaan, niin en onnistunut. Ja onko tuota Tag ominaisuutta käytettävä pakosti.

Ja tässä tekele...

 Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim pisteet As Integer
 pisteet = 0
 Label1 = pisteet + 1
If Image1.Tag = "Visible" Then
  Image1.Picture = Image2.Picture
  Image1.Tag = "Unvisible"
End If

End Sub

Vilikki [14.08.2002 15:18:15]

#

Label1 = pisteet + 1 ???
Siitä on suhteellisen pitkä aika kun viimeksi käytin vb:tä, mutta muistaakseni tuollainen ei toimi. En oikein älynnyt, mitä tuon lauseen on tarkoitus tehdä... selitä...

(nimetön) [14.08.2002 16:43:02]

#

Toi homma ei alkuunkaan toimi noin...

Jos haluat vaihtaa kuvaa kannattaa käyttää kuviin suhteellista polkua (App.Path & "/kuva.jpg") ja asettaa tämä kuvaksi.

Toinen tapa on ladata kuvat valmiiksi muistiin käyttämällä ImageList-ActiveX objectia. (Menuista: Project->Components ja rullaat alas kunnes näet "Microsoft Common Controls 6.0" Rasti ruutuun ja OK)

Lataa formiin Image, ImageList ja Timer controllit. Valitse ImageList vasemmalla hiiren namikalla ja valitse: Properties. Lisää kaksi kuvaa kontrolliin ja sulje ominaisuusikkuna.

Lomakkeen koodi-ikkunaan seuraava:

Dim iCnt, iPisteet As Integer
Private Sub Form_Load()
    iCnt = 0
    iPisteet = 0
    Image1.Picture = ImageList1.ListImages(1).Picture
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Image1.Picture = ImageList1.ListImages(2).Picture
    iPisteet = iPisteet + 1
End Sub

Private Sub Timer1_Timer()
    iCnt = iCnt + 1
    If iCnt = 3 Then
        iCnt = 0
        Image1.Picture = ImageList1.ListImages(1).Picture
    End If
End Sub

(nimetön) [14.08.2002 16:45:21]

#

... Niin ja muista laittaa Timerin Interval-ominaisuudeksi esim. 1000 (1 sekunti) tai lisää Form_Loadiin seuraava:
...
Timer1.Interval = 1000
...

Ville [15.08.2002 10:32:47]

#

Niin hei vaan.Siis alkuperäinen ajatus oli että kun image1:stä klikkaa hiirellä niin se vaihtuu image2:seen.Ja samalla label1 toimisi jonkinlaisena "laskurina"klikkauksien määrästä.
Ja se toimi sen yhden kerran (koska en saanut image1:stä enään palaamaan , niin en tiedä olisiko toiminut uudelleen).
Antamastasi esimerkistä Antti.Ensiksikin kiitos ja täytyy sanoa että se menee alueille joita en vielä ole harjoitellut,mutta eipä se mitään.Oikeastaan pystyn jollain tavalla hahmottamaan melkein kaikki ,mutta paria asiaa täytyy kysyä,toivottavasti et tuskastu kun täytyy "rautalangasta" vääntää...
Eli,mikä on iCnt ja miksi timerissa lause If iCnt = 3 Then.

(nimetön) [15.08.2002 11:00:16]

#

Koska Timerin intervalli on 1000 eli sen tapahtumakäsittelijä käynnistyy sekunnin välein ja iCnt:llä säädin kuvan palautumaan automaattisesti 1-3 sekunnin päästä. iCnt toimii sekuntien laskurina. Jos säädät sen pienemmäksi kuva palaa takaisin nopeammin.

Nykyinen koodi palauttaa kuvan Image1 automaattisesti 3 sekunnin välein ja se tietysti rassaa resursseja hieman koska Timeri raksuttaa koko ajan ja lataa kuvaa koko ajan Image1 kontrolliin, mutta seuraava koodi ei sitä tee. Lisäsin lisäksi kontrollin Label1 lomakkeelle, joka näyttää pisteet...

Dim iCnt, iPisteet As Integer
Private Sub Form_Load()
    iCnt = 0
    iPisteet = 0
    Image1.Picture = ImageList1.ListImages(1).Picture
    Timer1.Interval = 1000
    Timer1.Enabled = False
End Sub

Private Sub Image1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Image1.Picture = ImageList1.ListImages(2).Picture
    Timer1.Enabled = True
    iPisteet = iPisteet + 1
    Label1.Caption = iPisteet
End Sub

Private Sub Timer1_Timer()
    iCnt = iCnt + 1
    If iCnt = 3 Then
    iCnt = 0
    Timer1.Enabled = False
    Image1.Picture = ImageList1.ListImages(1).Picture
    End If
End Sub

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta