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 Sub
Tä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 Sub
jumachukka 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 Sub
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
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.