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
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ä...
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
... Niin ja muista laittaa Timerin Interval-ominaisuudeksi esim. 1000 (1 sekunti) tai lisää Form_Loadiin seuraava:
...
Timer1.Interval = 1000
...
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.
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
Aihe on jo aika vanha, joten et voi enää vastata siihen.