• 没有一个计时器控制在VB6计时器功能


    介绍 认为你有一个Microsoft Excel应用程序(VBA),你必须使用计时器功能。没有这样的本地控制在Excel中称为“定时器”。你会做什么?也认为你在一个情况下你不能使用“形式”,您可以在“把”一个计时器控制。但是仍然需要一个计时器功能,将定时器控件完全一样。它会触发一个事件及时成形,可以启动和停止,等。如果你在这种情况下,下面的这篇文章是给你的。 背景 我看过很多文章在互联网上解决定时器功能没有一个计时器控制使用一组复杂的Win32 api。代码是非常危险的使用和应用程序可以随时崩溃。也在大多数情况下,没有像计时器控制事件触发选项。在这篇文章中,我展示了一个非常简单的方法实现定时器功能没有一个计时器控制只使用一个Win32 API。它是一个类AxtiveX DLL项目。 使用的代码 这个应用程序的主要棘手的方式使用Win32API名叫“GetTickCount”。GetTickCount函数检索后经过的毫秒数,Windows就开始了。使用该API,您可以编写一个ActiveX DLL将为您服务需要一个计时器。我已经将该项目命名为“TimerLib”,它只有一个类TimerEx.cls命名。看下面的代码: 隐藏,收缩,复制Code

    Option Explicit
    
    '* The GetTickCount function retrieves the number of milliseconds
    '* that have elapsed since Windows was started.
    Private Declare Function GetTickCount Lib "kernel32" () As Long
    
    Private mblnEnabled             As Boolean
    Private mlngInterval            As Long
    Private mstrTag                 As String
    Private mlngTickCount           As Long
    Private mtypIntervalType        As IntervalData
    
    '* This is the timer event that will fire in a given interval
    Public Event OnTimer()
    
    '* A type that will hold the extended information about the interval you want to set
    '* If you set different types of intervals, the total interval will
    '* be calculated combining all types
    Public Type IntervalData
        MilliSecond As Long
        Second As Long
        Minute As Long
        Hour As Long
    End Type
    
    '* You can see whether the timer is Enabled by this property
    Public Property Get Enabled() As Boolean
        Enabled = mblnEnabled
    End Property
    
    '* You can start / stop the timer by this property
    Public Property Let Enabled(blnEnabled As Boolean)
        mblnEnabled = blnEnabled
        If blnEnabled Then
            mlngTickCount = GetTickCount
            Call TimerLoop
        End If
    End Property
    
    '* Conventional Interval property of the timer, you can check how many milliseconds
    '* have been set for the timer
    Public Property Get Interval() As Long
        Interval = mlngInterval
    End Property
    
    '* Conventional Interval property of the timer, you can set interval of the timer
    '* in milliseconds
    Public Property Let Interval(lngInterval As Long)
        mlngInterval = lngInterval
    End Property
    
    '* Extended Interval property of the timer, you can check how many
    '* milliseconds / seconds / minutes / hours have been set for the timer
    Public Property Get IntervalInfo() As IntervalData
        IntervalInfo = mtypIntervalType
    End Property
    
    '* Extended Interval property of the timer, you can set the interval in
    '* milliseconds / seconds / minutes / hours
    Public Property Let IntervalInfo(typIntervalType As IntervalData)
        mtypIntervalType = typIntervalType
        mlngInterval = mtypIntervalType.MilliSecond + typIntervalType.Second * 1000 + _
    	typIntervalType.Minute * 60 * 1000 + typIntervalType.Hour * 60 * 60 * 1000
    End Property
    
    '* Check what info is in the Tag property in the timer, you can store any string data
    '* into this property
    Public Property Get Tag() As String
        Tag = mstrTag
    End Property
    
    '* You can store any string data into this property as extra info of your timer
    Public Property Let Tag(strTag As String)
        mstrTag = strTag
    End Property
    
    '* Core of the timer. It fires the OnTimer event in a timely fashion according to
    '* the Interval / IntervalInfo you have set
    Private Sub TimerLoop()
        Do While Not mblnEnabled = False
            If GetTickCount - mlngTickCount >= mlngInterval Then
                RaiseEvent OnTimer
                mlngTickCount = GetTickCount
            '* Like GetTickCount has exceeded its capacity,
            '* run over from the beginning
            ElseIf GetTickCount = 0 Then
                mlngTickCount = 0
            ElseIf GetTickCount < mlngTickCount Then
                mlngTickCount = 0
            End If
            DoEvents
        Loop
    End Sub
    
    '* ENJOY!!	

    如何使用图书馆吗 您可以使用这个库从任何COM兼容的高级语言。在示例代码中,我采取了一个标准的VB6 EXE应用程序有两个按钮的形式命名“cmdEnableTimer”和“cmdDisableTimer”。我已经从Project>计时器库的引用;引用。和TimerEx类使用…… 隐藏,复制Code

    WithEvents

    …关键字的计时器事件可以被跟踪。在我的图书馆,定时计时器事件。看下面的代码: 隐藏,收缩,复制Code

    Option Explicit
    
    Private WithEvents myTimer  As TimerEx
    Private mlngTick            As Long
    Private myIntervalInfo      As IntervalData
    
    Private Sub cmdDisableTimer_Click()
        myTimer.Enabled = False
    End Sub
    
    Private Sub cmdEnableTimer_Click()
        myTimer.Enabled = True
    End Sub
    
    Private Sub Form_Load()
        myIntervalInfo.Second = 5
        Set myTimer = New TimerLib.TimerEx
        myTimer.IntervalInfo = myIntervalInfo
    End Sub
    
    Private Sub Form_Unload(Cancel As Integer)
        myTimer.Enabled = False
        Set myTimer = Nothing
    End Sub
    
    Private Sub myTimer_OnTimer()
        mlngTick = mlngTick + 1
        Me.Caption = mlngTick
    End Sub

    的兴趣点 您可以使用任何COM TimerLib兼容的语言。你会看到从我的代码扩展VB6定时器的间隔属性控制从传统毫秒到秒/分钟,即使在小时。希望你会喜欢使用这段代码。 历史 2008年9月14日:初始post  本文转载于:http://www.diyabc.com/frontweb/news2257.html

  • 相关阅读:
    ASP.NET 中JSON的序列化和反序列(抄的别人的,为了自己收藏)
    Javascript DOM动态添加表格
    Jquery应用技巧
    福克斯驾驶技巧(手动挡)
    肾盂分离来判断肾积水的程度
    降低车辆使用成本——节油
    青岛手精白重磅整合、横空出世申请长期置顶
    福克斯保养注意事项及驾驶技巧
    轻度肾积水怎么办?
    新手车主看过来 保养方法开车技巧全解析(求精)
  • 原文地址:https://www.cnblogs.com/Dincat/p/13457391.html
Copyright © 2020-2023  润新知