Terve...
haluan etta Form1 sulkea automaattisesti 5 minuntia kultua? mutta miten?
mä haluun kans semmoisen joka räjäyttäisi kaikki maailman seinät!
Dim vanhaaika As Date, nykyinenaika As Date, erotus As Date
Dim teksti As Variant
Private Sub Form_Load()
vanhaaika = Time 'aloitusaika talteen
End Sub
Private Sub Timer1_Timer()
nykyinenaika = Time 'päivitetään aikaa
erotus = vanhaaika - nykyinenaika 'katotaas kauan on mennyt
teksti = erotus 'otetaan käyttöön väliaikainen muuttuja, suoraan erotuksella en saanut toimimaan niin pitää käyttää hömpötyksiä :(
If teksti = "0:05:00" Then 'jos teksti on tämä,
End 'sitten lopetellaan...
End If
End SubTässä tulee toisenlainen toteutus. Timer-funktio palauttaa keskiyöstä kuluneiden sekuntien määrän, ja kun tämmöisten aikojen erotus on 5 * 60 = 300 sekuntia, viisi minuuttia on kulunut. Ajan kuluminen tarkistetaan sekunnin välein Timer-kontrollissa.
Option Explicit
Dim alku As Long
Private Sub Form_Load()
Timer1.Interval = 1000
alku = Timer
End Sub
Private Sub Timer1_Timer()
If Timer - alku >= 5 * 60 Then
Unload Me
End If
End Subjumachukka taa toimi!... yeah! thx!!!! ;)
Kaikissa noissa timer-jutuissa on se ongelma et jos se käynnistetään vähä ennen keskiyötä ni voi toimia vähä kummallisesti :x
mitasitten jos kayttaisin Do While...Loopin... toimiko han se?
Timer onkin hanurista juuri tuon keskiyöstä laskun takia. Käyttää mieluummin Now-, FormatDateTime- ja DateAdd-funktioita.
Option Explicit
Private alku As Date
Private laskuri As Integer
Private Sub Form_Load()
alku = Now
Me.Timer1.Interval = 1000
laskuri = 5
Me.Timer1.Enabled = True
Me.Caption = "Laskuri(" & laskuri & ")"
End Sub
Private Sub Timer1_Timer()
If DateAdd("s", 5, alku) <= Now Then
MsgBox "viisi sekunttia sitten oli " & FormatDateTime(alku, vbLongTime) _
& vbCrLf & " ja nyt on " & FormatDateTime(Now, vbLongTime)
End
Else
laskuri = IIf(laskuri > 0, laskuri - 1, 5)
Me.Caption = "Laskuri(" & laskuri & ")"
End If
End SubMIkä vika tässä olis?
Private Sub Form_Load() Timer1.Interval = 1000 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Static i as long If i = 300 Then Timer1.Enabled = False Unload Form1 Else i = i + 1 End If End Sub
ei kai mikään =)
paitsi että sisennykset on kadonnu...
lainaus:
Käyttää mieluummin Now-, FormatDateTime- ja DateAdd-funktioita
ihan turhaa...
lainaus:
ihan turhaa...
Ehkä 5 sekunnin/minuutin vuoksi, mutta opetellaan käyttämään niitä VB:n suomia mahdollisuuksia.
Kun vertailut tekee Now:lla, niin vuorokauden vaihtumiset ei tunnu missään. DateAdd taas on todella helppo lisättäessä aikaan jotain, kun vain käyttää määreitä y(ear), m(onth), d(ay), h(our), m(inute) ja s(econd). FormatDateTime taas nimensä mukaan muuttaa ajan tai päivämäärän muotoilua.
Nämä, ja paljon muuta, löytyy myös putkan mainioista oppaista täältä.
Olen ihan samaa mieltä BadSource, noi on tosi hyviä funktioita ja säästävät paljon päänvaivaa monessa haastavammassa tilanteessa, ne nyt ei vaan mun mielestä olleet tarpeellisia tähän nimenomaiseen tapaukseen.
Microsoftin pojat on kyllä mielestäni tehneet hyvää työtä kun ovat kyseiset funktiot älynneet kirjoitella.
Lumi-ukkeli kirjoitti:
MIkä vika tässä olis?
Private Sub Form_Load() Timer1.Interval = 1000 Timer1.Enabled = True End Sub Private Sub Timer1_Timer() Static i as long If i = 300 Then Timer1.Enabled = False Unload Form1 Else i = i + 1 End If End Sub
tekisin tuon vähän eri tavalla
Private Sub Form_Load()
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Static i as long
i=i+1
select case i
case 300
unload form1
end select
End Sub
mutta sama periaate on molemmissa ;) :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.