[VB] Timer

joni

Mitglied
Hallo

Ich möchte einen Timer in VisualBasic schreiben, kenne mich aber mit Programmieren nicht gut aus. Habe schon gegoogelt, aber ich wurde nicht schlau.

So soll es funktionieren:
→ Man gibt die Zeit ein (Beispiel 45 min.)
→ dann auf "Go!" klicken
→ die Zeit (45 min) geht bis auf null zurück
→ ein akustisches Signal

Ich habe auf dem PC Microsoft Visual Basic Express Edition 08 installiert.

Da nicht nur die Applikation funktionieren soll, sondern ich auch etwas lernen möchte bitte wenn möglich so angeben. Beispiel:

Dim Ergebnis as integer / Wert Ergebnis merken

Ergebnis = Zahl1+zahl2 / Wert „Ergebnis“ ist gleich zahl1 plus zahl 2
 

Officer

Stammgast
Hallo Joni

Habe leider kein VB in der Nähe, deshalb aus Access und aus dem Gedächniss heraus:

Ich nehme an Du hast in deinem Formular schon ein Textfeld, eine Schaltfläche und ein Timer-Controll eingefügt, oder?

Das Timer-Objekt hat ein TimerIntervall-Eigenschaft (oder sehr ähnlicher Name). Wenn Dein Timer-Objekt 'Timer1' heisst, dann kannst Du bei der Schaltfläche dies ungefähr so einstellen:

Timer1.TimerInterval = 60000

Das Intervall wird in Milisekunden angegeben. 60000 entspricht einer Minute. Das heisst, Jede Minute wird der Timer etwas ausführen.

Das Timer-Objekt hat dann eine Einstellung 'OnTimer'. Dort kannst Du programmieren, was der Timer dann machen soll.

Den Wert im Textfeld um 1 (Eine Minute) verringern. Wenn das Textfeld 0 ist (Die Zeit ist abgelaufen) dann ein Beep ausgeben und den Timer Beenden.

Sub Timer1_OnTimer()
Textfeld1 = Textfeld1-1
If Textfeld1 = 0 Then
Beep
Timer1.TimerIntervall = 0
End If
End Sub

So ungefähr müsste es gehen. Wie gesagt: Der genaue Name der Befehle kann ich nicht nachschauen, aber so ungefähr müsste es gehen.
 

Remo999

Mitglied
Timer

Ich kann folgende Lösung anbieten:

Sub LaufendeUhr ()
Application.OnTime Now + TimeValue ("00:00:01"), "CountDown"
End Sub

Sub CountDown ()
Calculate
If Sheets("Joni").Range("A1").Value > 0 Then
Sheets("Joni").Range("A1").Value = _
Sheets("Joni").Range("A1").Value - 1
Else
End If
Call LaufendeUhr
End Sub

Es sind 2 (!) Codes, die sich gegenseitig aufrufen (bei Namensänderungen beachten!).
Das Zeitintervall ("00:00:01") kann beliebig angepasst werden. In meinem Beispiel zählt es im Sekundentakt rückwärts.

Remo
 
Hi,
hier eine einfache und unkomplizierte Lösung :

Du suchst in der Toolbox (Ansicht >> Toolbox) nach
der Komponente "Timer".

Danach ziehst du eine Textbox ins Formular.
Dasselbe machst du mit einem Button.

Schreibe nun den Text - Wert um auf "O.k." !

Jetzt gehst du in die SubMethode Button1_Click; indem du
doppelt auf den Button klickst.

Zuoberst siehst du nun "Public Class Form1"

Eine Zeile darunter definierst du nun die variable Zeit :

Code:
Dim Zeit As Integer
Diese ist nützlich um die eingegebene Zeit zu verarbeiten.

Nun fügst du unter der Zeile
Code:
Private Sub Button1_Click
die Zeilen

Code:
Zeit = Int(TextBox1.Text)
Timer1.Interval = Zeit * 60 * 10 * 10 * 10
Die Erste beider Zeilen gibt Zeit den Wert,
der in der Textbox steht an. Diese wir durch Int(...) in eine
Ganzzahl (Integer) umgewandelt.

Das * 60 * 10 * 10 * 10 ist nötig damit die
Minuten in Milisekunden umgewandelt werden wie es
der Timer wünscht.

Jetzt klickst du im Formular doppelt auf den Timer1.


Ergänze nun die folgenden Zeilen :

Code:
MsgBox("Die Zeit ist abgelaufen !")
ShowInTaskbar = False
Da ich nicht weiss, wie man ein akustisches Signal
abspielt könntest du eine Meldungsbox ausgeben.

Wenn das Programm aber gerade minimiert ist siehst du die Box gar nicht.
Es wäre möglich, dass in der Taskleiste, sobald die Zeit abgelaufen ist,
das Programm verschwindet.

Noch ein Verbesserungsvorschlag :

Ergänze das Formular mit Labels oder anderen Objekten
die für das Aussehen des Programmes sorgen !

:D
 
Zuletzt bearbeitet:

joni

Mitglied
Sorry, das ich erst jetzt wieder Antworte hatte viel todo.

@Entwicklungsumgebungapi

Vielen Dank für deine Info. Du erklärst gut. So sieht meine Applikation jetzt aus:

<code>
Public Class Form1

Private Sub GO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GO.Click
Dim Zeit As Integer
Zeit = Int(TextBox1.Text)
Timer1.Interval = Zeit * 60 * 10 * 10 * 10
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
MsgBox("Die Zeit ist abgelaufen !")
ShowInTaskbar = False
End Sub
End Class
</code>

Zeiteingeben und Go drücken kann ich, aber die Zeit läuft nicht. Währe froh um noch eine so gute Erklärung.
 
Ich depp !

Danke erst mal für dein Lob !!! ;)
Ich hoffe du hast nicht etwas verpasst !

Also :
du tust dies folgendermasen :

-- Klicke doppelt auf den O.K Button.
-- Füge nun folgendes unten ein :

Code:
 Timer1.Enabled = true()
Mit dieser Funktion musst du die Zeit
noch "starten".

Nun :

-- Kehre zurück zur Formularansicht,
in dem du oben in dem "Formularreiter" "Form1.vb (Entwurf)"
auswählst.
-- Klicke doppelt auf den Timer1.

-- Füge zu unterst hinzu :
Code:
Timer1.Enabled = false()

Dies beendet den Timer nachdem die Zeit abgelaufen ist.
Sonst würde der Timer jede Minute ein "Die Zeit ist abgelaufen" ausgeben !

-- Dann klickst du dich wieder zu Form1.vb (Entwurf) zurück.

-- Klicke doppelt auf den O.K - Button !

-- Ändere die Intervallangabe von
Code:
 Timer1.Interval = Zeit * 60 * 10 * 10 * 10

in

Code:
Timer1.Interval = Zeit * 60 * 100()
um.

Wir müssen ja die Zeit in Hunderstelsekunden haben und nicht in Millisekunden.

Das währe alles !
Bei mir funktioniert es jetzt.

Falls es bei dir immer noch nicht klappt, melde dich !

:rolleyes:
 

Anhänge

  • joni_alert.jpg
    joni_alert.jpg
    6,8 KB · Aufrufe: 13
Zuletzt bearbeitet:

joni

Mitglied
@Entwicklungsumgebung

Vielen Dank für alle bisherigen Tipps.

So sieht es jetzt aus:

Public Class Form1

Private Sub GO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GO.Click
Dim Zeit As Integer
Timer1.Enabled = True() !!!
Zeit = Int(TextBox1.Text)
Timer1.Interval = Zeit * 60 * 100()
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
MsgBox("Die Zeit ist abgelaufen !")
ShowInTaskbar = False
Timer1.Enabled = False() !!!
End Sub
End Class


Dort wo ich "!!!" gemacht habe ist false/true unterstrichen und bei den Fehlern steht: "Der Ausdruck ist kein Array oder keine Methode, und kann keine Argumentliste haben"

ps. Wie muss ich den code eingeben, damit es ihn in einem solchen blauen Quadrat anzeigt?
 
A

abu

Guest
Dort wo ich "!!!" gemacht habe ist false/true unterstrichen und bei den Fehlern steht: "Der Ausdruck ist kein Array oder keine Methode, und kann keine Argumentliste haben"

Das liegt daran, dass True keine Methode ist, sondern eine simple Konstante. Lässt du die () weg, sollte es funktionieren.

Timer1.Enabled = True

bzw.

Timer1.Enabled = False
 

joni

Mitglied
@abu

Danke für den Tipp. Funktioniert jetzt.

Ich musste aber bei Timer1.Interval = Zeit * 60 * 100 noch * 10 eingeben, damit es auch stimmt. Was muss ich einfügen, damit ich die Zeit runterlaufen sehe?
 

froeschli

Stammgast
Oben