VB 5/6-Tipp 0358: Längere Timerzeiten mit API-Timer
von ActiveVB
Beschreibung
Wozu ein Timer mit APIs? Die Frage ist durchaus berechtigt. Da diese Art von Timer im wesentlichen dem VB-eigenen entspricht. Zudem ist sein Handling umständlicher, da Debuggen hier gefährlich und da er nicht als Objekt bequem ansprechbar ist. In letzterem Punkt liegt aber auch sein wesentlicher Vorteil. So ist es mit ihm möglich Timerfunktionalität auch in Module einzubinden. Dies ist sinnig, wenn auf eine Oberfläche verzichtet werden soll/muß. Unter solchen Gegebenheiten ist der VB-Timer nicht nutzbar, da er ein Objekt ist das eines Formulars bedarf. Zudem hat dieser Timer den Vorteil wesentlich größere Intervalle als die standardmäßigen maximal 65,5 Sekunden zu bieten. Es sind Zeitspannen von bis zu mehreren Tagen möglich.
Schwierigkeitsgrad: | Verwendete API-Aufrufe: | Download: |
'Dieser Quellcode stammt von http://www.activevb.de 'und kann frei verwendet werden. Für eventuelle Schäden 'wird nicht gehaftet. 'Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum. 'Ansonsten viel Spaß und Erfolg mit diesem Source! '------------- Anfang Projektdatei Project1.vbp ------------- '--------- Anfang Formular "Form1" alias Form1.frm --------- ' Steuerelement: Schaltfläche "Command2" ' Steuerelement: Schaltfläche "Command1" ' Steuerelement: Beschriftungsfeld "Label1" ' Steuerelement: Beschriftungsfeld "Label2" Option Explicit Private Sub Command1_Click() If Not TimerEnabled Then Call Init(100) Command1.Enabled = False Command2.Enabled = True End If End Sub Private Sub Command2_Click() If TimerEnabled Then Call Terminate Command1.Enabled = True Command2.Enabled = False End If End Sub Private Sub Form_Unload(Cancel As Integer) If TimerEnabled Then Call Terminate End Sub '---------- Ende Formular "Form1" alias Form1.frm ---------- '--------- Anfang Modul "Module1" alias Module1.bas --------- Option Explicit Private Declare Function SetTimer Lib "user32" (ByVal hWnd As _ Long, ByVal nIDEvent As Long, ByVal uElapse As Long, _ ByVal lpTimerFunc As Long) As Long Private Declare Function KillTimer Lib "user32" (ByVal hWnd As _ Long, ByVal nIDEvent As Long) As Long Public TimerEnabled As Boolean Public Cnt& Dim hTimer& Public Sub Init(Interval&) hTimer = SetTimer(0, 0, Interval, AddressOf TimerProc) TimerEnabled = True End Sub Public Sub Terminate() Call KillTimer(0, hTimer) TimerEnabled = False End Sub Private Sub TimerProc(ByVal hWnd&, ByVal Msg&, ByVal idEvent&, ByVal dwTime&) Static Flag As Boolean If Not Flag Then Flag = True '.... Cnt = Cnt + 1 Form1.Label1.Caption = Cnt Flag = False End If End Sub '---------- Ende Modul "Module1" alias Module1.bas ---------- '-------------- Ende Projektdatei Project1.vbp --------------
Tipp-Kompatibilität:
Windows/VB-Version | Win32s | Win95 | Win98 | WinME | WinNT4 | Win2000 | WinXP |
VB4 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB5 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
VB6 | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
Ihre Meinung
Falls Sie Fragen zu diesem Artikel haben oder Ihre Erfahrung mit anderen Nutzern austauschen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.
Archivierte Nutzerkommentare
Klicken Sie diesen Text an, wenn Sie die 4 archivierten Kommentare ansehen möchten.
Diese stammen noch von der Zeit, als es noch keine direkte Forenunterstützung für Fragen und Kommentare zu einzelnen Artikeln gab.
Aus Gründen der Vollständigkeit können Sie sich die ausgeblendeten Kommentare zu diesem Artikel aber gerne weiterhin ansehen.
Kommentar von Stephan Hagenguth am 15.11.2010 um 17:26
mal eine Frage, kann man nicht einfach den Timer auf 60 sekunden stellen, dann eine Variable +1 setzen. Wenn dann die gewünschte zeit gefragt ist, z.b. Variabele = 600 also 600 minuten dann springt das entsprechende ereigniss an!
das ist doch weniger umständlich oder?
Kommentar von Daniel Greuter am 03.03.2007 um 14:35
Beim verwenden dieser Funktion schnellt die Kernel-Auslastung sofort auf das Maximum. Gibt es eine Möglichkeit das zu verhindern ? Gruss.
Kommentar von SCHASCH am 27.05.2005 um 11:49
In der Entwicklungsumgebung tritt eine Fehler auf beim Beenden mit der Stop-Schaltflaeche. Der Fehler 91 kann nicht abgefangen werden glaube ich...?
Beim setzen des Intervals auf 100 blinkt die EntUmg...
mfg Sascha
Kommentar von Lothar Hage am 22.02.2004 um 21:49
Habe das unter VBA 6 ausprobiert und hat auf Anhieb funktioniert. Eine gute Möglichkeit unter Excel usw. Daten zu aktualisieren usw.
Danke