ukočení časovače   zodpovězená otázka

VB6/VBA

Mám jede problém. Začínám programovat ve VB. momentálně dělám odpočet času.

Řeším problém, když dojdu při odpočtu na nulový čas 0:00:00 tak potřebuji aby se program zastavil nebo nastavil do původních hodnot, Bohužel se mi to nedaří a odpočet běží dále do mínusu.

Pokud by někdo věděl jak to udělat byl bych mu velice vděčen

Private Sub Timer1_Timer()
    sekundy = sekundy - 1
              'odečítání 1 sekundy
              
    If sekundy = "-1" Then
        sekundy = "59"
        minuty = minuty - 1
    
    End If
           'když dosáhneme -1 sekundy odečteme jednu minutu
    
    If minuty = "-1" Then
        sekund = "59"
        minuty = "59"
        hodiny = hodiny - 1
    End If
    
    If sekundy = "-1" Then
        If minuty = "-1" Then
            If hodiny = "-1" Then
                sekundy.Caption = Label4.Caption
                minuty.Caption = Label5.Caption
                hodiny.Caption = Label6.Caption
            End If
        End If
    End If

End Sub

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Než se dostanu k vašemu programu, měl bych zvídavou otázku - pokud, jak sám píšete - začínáte s programováním, máte nějaký pádný důvod k tomu začínat se "starým" VB 6" (nebo alespoň do této kategorie jste svůj dotaz zařadil)? Proč raději nezačnete s něčím novějším a výrazně výkonnějším, - v neposlední řadě i Vaše případné další dotazy na těchto stránkách dojdou lepší odezvy, protože, jak můžete zjistit v právě aktuální anketě na levé straně těchto webů, většina z nás zde se scházejících je orientována právě na novější .NET platformy.

Ale k Vašemu dotazu:

Jednak není moc programátorské (i když to díky "blbuvzdornosti" a vnitřní inteligenci VB funguje) do proměnných, se kterými provádíte aritmetické operace (odčítání jedničky) přiřazovat string.

Ale Váš problém, proč se Vám to na konci odpočítávání nevynuluje do výchozích hodnot spočívá v tom, že k této operaci přistupujete ve chvíli (díky vnořeným IF-ům), kdy sekundy, minuty i hodiny se rovnají "-1". Jenomže k tomu NIKDY nemůže dojít, protože NAD tímto rozhodováním sekundy i minuty již "opravíte" na hodnotu "-59".

Proto, pokud by měla Vaše konstrukce fungovat, měla by vypadat nějak takto:

Private Sub Timer1_Timer()
  sekundy = sekundy - 1       ' odečítání 1 sekundy

  If sekundy = -1 Then          ' pokud sekundy "podtečou", posuneme čítač minut
     sekundy = 59
     minuty = minuty - 1
  End If

  If minuty = -1 Then           ' pokud minuty "podtečou", posuneme čítač hodin
     ' (sekund = "59")          ' zbytečné, protože jsme sekundy již opravili v předchozím IFu (navíc tady byl překlep v názvu proměnné)
     minuty = 59
     hodiny = hodiny - 1
  End If

If hodiny = -1 Then       ' pokud "podtečou" hodiny je jasné, že jsme na konci odpočtu
   sekundy.Caption = Label4.Caption
   minuty.Caption = Label5.Caption
   hodiny.Caption = Label6.Caption
End If

End Sub

A poslední připomínka, přečtěte si pokyny jak vkládat příspěvky - tam například zjistítte, že pro vkládání kódu je zde k dispozici speciální formátovací značka - je to pak mnohem přehlednější.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Když pomineme, že používání Timeru není přesné (zavolání funkce se může v závislosti na vytížení sytému zpomalit), tak by kód měl být cca takový:

Dim sec As Integer
Dim min As Integer
Dim hod As Integer
sec = Val(sekundy.Caption)
min = Val(minuty.Caption)
hod = Val(hodiny.Caption)

sec = sec - 1
If sec < 0 Then
    sec = sec + 60
    min = min - 1
End If

If min < 0 Then
    min = min + 60
    hod = hod - 1
End If

If hod < 0 Then
   sec = Label4.Caption 
   min = Label5.Caption
   hod = Label6.Caption
End If

hodiny.Caption = hod
minuty.Caption = min
sekundy.Caption = sec
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Používejte, prosím, k označování bloků zdrojového kódu tlačítko VB Code, aby se kód zvýraznil a obarvil.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback