|
| Nedtælling? Fra : Frank |
Dato : 15-12-01 21:10 |
|
Hvordan laver jeg en nedtælling med en timer i følgende format 2:00, 1:59
osv til 0:00?
Frank
| |
Tomas Christiansen (15-12-2001)
| Kommentar Fra : Tomas Christiansen |
Dato : 15-12-01 23:13 |
|
Frank skrev:
> Hvordan laver jeg en nedtælling med en timer i følgende format 2:00,
1:59
> osv til 0:00?
Nu havde det jo været lettere at svare, hvis du havde fortalt, om det
er timer:minutter eller minutter:sekunder, som du ønsker at tælle ned,
men jeg kommer alligevel med et bud, idet jeg antager at du ønsker at
tælle minutter:sekunder.
1. Opret et Standard EXE projekt med en form.
2. Placer en label og en timer på formen (med deres standard-navne).
3. Indsæt følgende kode i formen og kør projektet:
--- cut --- cut --- cut --- cut --- cut --- cut ---
Option Explicit
Private m_lFinalCountDown As Long
Private Sub Form_Load()
m_lFinalCountDown = 120
Display
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
m_lFinalCountDown = m_lFinalCountDown - 1
Display
If m_lFinalCountDown <= 0 Then
Timer1.Enabled = False
MsgBox "BANG!", , "End of The World..."
End If
End Sub
Private Sub Display()
Label1.Caption = Format(TimeSerial( _
0, 0, m_lFinalCountDown), "nn:ss")
End Sub
--- cut --- cut --- cut --- cut --- cut --- cut ---
Der vil nu i Label1 være en tæller, som tæller ned fra 02:00 til ...
(gæt selv).
Bemærk at der er MANGE andre måder at gøre tricket på - dette er ikke
nødvendigvis den bedste, men den første, som faldt mig ind.
-------
Tomas
| |
Carsten Jessen (15-12-2001)
| Kommentar Fra : Carsten Jessen |
Dato : 15-12-01 23:54 |
|
"Frank" <trio@tdadsl.dk> wrote in message
news:3c1baebf$0$93448$edfadb0f@dspool01.news.tele.dk...
> Hvordan laver jeg en nedtælling med en timer i følgende format 2:00, 1:59
> osv til 0:00?
> Frank
>
>
En anden mulighed kunne være at bruge computerens ur.
fx.
Definér en variabel i din forms declaration:
Dim Nulpunkt as variant
Lav en knap som starter nedtællingen med følgende kode
Private Sub Command1_Click()
Nulpunkt = Now + TimeSerial(0, 2, 0) 'læs om TimeSerial i hjælpen
Timer1.Enabled = True
End Sub
og lav en timer med interval 200 og enabled=false og indsæt følgende kode
Private Sub Timer1_Timer()
Label1 = Format(Nulpunkt - Now, "n:ss")
If Label1 = "0:00" Then
Timer1.Enabled = False
Label1 = "BANG"
End If
End Sub
Mit bud er at denne kode er mere præcis end Thomas' forslag, da en timer
event nemt kan blive forsinket af andre events i programmet. Dog skal det
siges at mit eksempel heller ikke er super præcist, men mine erfaringer
siger at det er den bedste løsning.
MVH Carsten
| |
Tomas Christiansen (16-12-2001)
| Kommentar Fra : Tomas Christiansen |
Dato : 16-12-01 23:14 |
|
Carsten Jessen skrev:
> En anden mulighed kunne være at bruge computerens ur.
Naturligvis!
> Nulpunkt = Now + TimeSerial(0, 2, 0) 'læs om TimeSerial i hjælpen
....
> Mit bud er at denne kode er mere præcis end Thomas' forslag, da en
timer
> event nemt kan blive forsinket af andre events i programmet.
Bortset fra at du ikke kan stave mit navn rigtigt, må jeg klart
anbefale din fremgangsmåde med at bruge maskinens ur, fremfor den
fremgangsmåde, som jeg skitserede, med en sekund-tæller.
Problemet er, at man KAN risikere at miste et timer-event i ny og næ.
Hvis man indstiller timeren til at køre flere gange pr. sekund, vil
man formentlig ikke opdage, hvis der mistes et event, lige når tiden
på skærmen skal opdateres - opdateringen bliver blot forsinkes en
brøkdel af et sekund.
Bemærk at events ALTID være lidt "forsinkede" (dvs. ikke 100%
realtime), idet det tager en del tid inden VB's runtime finder ud af
at "noget" er sket, og hvad det medfører (kald af procedure i ens
program). Desuden sker udførelse af events altid (med et par
undtagelser) serielt og ikke "samtidig".
-------
Tomas
| |
|
|