vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Eventgesteuert das Ganze (Teil 1) 
Autor: Drapondur
Datum: 12.12.04 00:00

Hallo,

wenn man das Ganze eventgesteuert haben will, muss man das mit einem API-Timer mit den API-Funktionen "SetTimer" und "KillTimer" erledigen, da ein API-Timer nicht auf die lächerlichen 65535 Millsekunden des VB-Timer-Controls begrenzt ist, sondern einen Long-Wert annehmen kann. Damit er dann theoretisch fast 50 Stunden laufen kann. Das sollte reichen, denke ich

Am besten kapselt man den ganzen Code gleich in eine eigene Dll, da der API-Timer eine Rückruffunktion verwendet, die einem andernfalls schnell mal die IDE zum Crashen oder Spinnen bringen kann.

Ein weiterer Vorteil der Klasse: man braucht kein Fenster, um einen Timer zum Laufen zu bringen.

Ich stelle hier mal Code eines Timers rein, den ich mir vor längerem mal zusammengebastelt habe.

Im Dll-Projekt ein Modul namens "modTimer"
Option Explicit
 
Public Declare Function SetTimer _
                          Lib "user32" _
                          (ByVal hwnd As Long, _
                           ByVal nIDEvent As Long, _
                           ByVal uElapse As Long, _
                           ByVal lpTimerFunc As Long) As Long
 
Public Declare Function KillTimer _
                          Lib "user32" _
                          (ByVal hwnd As Long, _
                           ByVal nIDEvent As Long) As Long
 
Private Declare Sub CopyMemory Lib "kernel32" Alias _
        "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, _
        ByVal cbCopy As Long)
 
'Die Collection myColPtrs speichert die Pointer
'auf alle Klassen, die einen API-Timer aktiviert
'haben. Anhand dieser Pointer wird
'in TimerProc das Objekt ermittelt, das diesen
'API-Timer erzeugt hat
Private myColPtrs As Collection
 
Public Sub TimerProc(ByVal hwnd&, ByVal uMsg&, ByVal idEvent&, ByVal dwTime&)
   Dim oTimer As ApiTimer
   Dim ptr&
   On Error Resume Next
   'wir holen den Pointer auf das Objekt, die diesen
   'Timer erzeugt hat
   ptr = GetPtr(idEvent)
   If ptr <> 0 Then
      'wir holen einen Verweis auf das Objekt...
      Set oTimer = PtrToObject(ptr)
      If Not oTimer Is Nothing Then
         '...und rufen seien Callback-Funktion auf
         oTimer.TmrCallBack
         Set oTimer = Nothing
      End If
   End If
 
End Sub
 
 
'Startet den API-Timer und gibt im Erfolgsfall die Timer-Id zurück
'bei Mißerfolg: Rückgabe von 0
'Funktion will den Pointer auf das aufgerufende ApiTimer-Objekt
Public Function VBStartTimer(ByVal ptrObject&, ByVal timeOut&)
   Dim id&
 
   id = SetTimer(0, 0, timeOut, AddressOf TimerProc)
   VBStartTimer = id
   If id <> 0 Then
      'wenn der Timer erfolgreich gestartet wurde:
      'den Pointer auf das aufrufende Objekt merken
      'damit es später in TimerProc ermittelt werden
      'kann
      On Error Resume Next
      If myColPtrs Is Nothing Then
         Set myColPtrs = New Collection
      End If
      myColPtrs.Add ptrObject, Hex(id)
   End If
 
End Function
 
Public Function VBKillTimer(ByVal id&)
   On Error Resume Next
   VBKillTimer = KillTimer(0, id)
   myColPtrs.Remove Hex(id)
   If myColPtrs.Count = 0 Then
      Set myColPtrs = Nothing
   End If
End Function
 
Private Function GetPtr(id&) As Long
   Dim idx&, ptr&
   On Error Resume Next
   ptr = myColPtrs(Hex(id))
   GetPtr = ptr
End Function
 
Public Function PtrToObject(ByVal lngPtr As Long) As Object
   Dim nObj As Object
 
   If lngPtr <> 0 Then
      CopyMemory nObj, lngPtr, 4
   End If
   Set PtrToObject = nObj
 
   CopyMemory nObj, 0&, 4
End Function
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
zeit berechnung1.178vbmomo09.12.04 09:48
Re: zeit berechnung823TCPR09.12.04 17:45
Re: zeit berechnung748Doom09.12.04 18:00
Re: zeit berechnung791mm78pr09.12.04 18:07
Re: zeit berechnung 839Doom09.12.04 18:20
Re: zeit berechnung791TCPR10.12.04 12:05
Re: zeit berechnung721Doom11.12.04 16:08
Re: zeit berechnung737Kinman11.12.04 20:41
Eventgesteuert das Ganze (Teil 1)1.093Drapondur12.12.04 00:00
Re: Eventgesteuert das Ganze (Teil 2)831Drapondur12.12.04 00:01
Re: Eventgesteuert das Ganze (Teil 3)816Drapondur12.12.04 00:09
Re: Eventgesteuert das Ganze (Teil 3)771Kinman12.12.04 02:08

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel