在vb中写了个集合类,怎样把timer控件写入集合类中,当创建对象时timer控件开始记时???

解决方案 »

  1.   

    不知道,把他放到类的初始化的地方可以不!(initialize)
    采鸟一只,来学习了!
      

  2.   

    timer控件依附于窗体,能放在类里面吗?我很菜不会搞。但如果要在类里面搞一个同样功能的东西,可以用Api函数SetTimer,把窗体的句柄传入即可。我没有搞过,猜的。
      

  3.   

    可替代VB自带的Timer控件的Timer类
    http://blog.csdn.net/Modest/archive/2006/10/23/1346175.aspx
      

  4.   

    用下面这个类,和timer控件的用法差不多Option ExplicitPrivate Const ERRBASE = vbObjectError + 1740
    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 LongPublic Event Timer()Private m_lTimerID          As Long     ' Timer ID
    Private m_lInterval         As Long     ' Timer interval
    Private m_bEnabled          As Boolean  ' Timer enabledPublic Property Get Interval() As Long
        On Error GoTo PROC_ERR_Interval100     Interval = m_lIntervalPROC_EXIT:
            Exit Property
    PROC_ERR_Interval:
            Err.Raise ERRBASE, "CTimer.Interval", "CTimer component failure!" & vbCrLf & vbCrLf & Err.Number & ": " & Err.Description & vbCrLf & "On line: " & Erl
            Resume PROC_EXIT
    End PropertyPublic Property Let Interval(ByVal lValue As Long)
        On Error GoTo PROC_ERR_Interval100     If m_lInterval = lValue Then Exit Property
        
    102     If lValue > 0 Then
    104         Enabled = False
    106         m_lInterval = lValue
    108         Enabled = True
            Else
    110         Enabled = False
            End IfPROC_EXIT:
            Exit Property
    PROC_ERR_Interval:
            Err.Raise ERRBASE, "CTimer.Interval", "CTimer component failure!" & vbCrLf & vbCrLf & Err.Number & ": " & Err.Description & vbCrLf & "On line: " & Erl
            Resume PROC_EXIT
    End PropertyPublic Property Get Enabled() As Boolean
        On Error GoTo PROC_ERR_Enabled100     Enabled = m_bEnabledPROC_EXIT:
            Exit Property
    PROC_ERR_Enabled:
            Err.Raise ERRBASE, "CTimer.Enabled", "CTimer component failure!" & vbCrLf & vbCrLf & Err.Number & ": " & Err.Description & vbCrLf & "On line: " & Erl
            Resume PROC_EXIT
    End Property
    Public Property Let Enabled(ByVal bValue As Boolean)
        On Error GoTo PROC_ERR_Enabled100     If m_bEnabled = bValue Then Exit Property
        
    102     m_bEnabled = bValue
        
    104     If m_bEnabled Then
    106         m_lTimerID = SetTimer(0, 0, m_lInterval, AddressOf TimerProc)
    108         AddTimer Me, m_lTimerID
            Else
    110         KillTimer 0, m_lTimerID
    112         RemoveTimer m_lTimerID
            End IfPROC_EXIT:
            Exit Property
    PROC_ERR_Enabled:
            Err.Raise ERRBASE, "CTimer.Enabled", "CTimer component failure!" & vbCrLf & vbCrLf & Err.Number & ": " & Err.Description & vbCrLf & "On line: " & Erl
            Resume PROC_EXIT
    End PropertyPublic Sub RaiseTimerEvent()
        On Error Resume Next
        
        RaiseEvent Timer
    End SubPrivate Sub Class_Initialize()
        On Error Resume Next
        m_lInterval = 1000
    End SubPrivate Sub Class_Terminate()
        On Error Resume Next
        Enabled = False
    End Sub
      

  5.   

    用vb默认的事不可以的,因为timer依附窗体
    解决办法有两个,一个事用别人写的timer类(其实野就是自己用api)
    一个就是建个activeXdll,把timer和窗体弄进去,然后封装成类
      

  6.   

    我觉得你可以
    Dim x As Timer
      

  7.   

    可替代VB自带的Timer控件的Timer类用这个类可以替代VB自带的Timer控件,这样就不用在无窗体的项目中仅为了使用Timer而多加一个窗体了......http://blog.csdn.net/Modest/archive/2006/10/23/1346175.aspx
      

  8.   

    楼上提供的timer类比较好用,建议楼主采用。刚发现我上次的回复只提供了类模块的代码而忘了说明如何使用,现补充如下:
    建一个标准模块:
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSrc As Any, ByVal ByteLen As Long)
    Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As LongPrivate m_oTimers As New CollectionPublic Sub TimerProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTimer As Long)
        On Error Resume Next
        
        Dim oTimer As cTimer    If hWnd = 0 Then
            Set oTimer = m_oTimers.Item(CStr(idEvent))
            If Err.Number = 0 Then oTimer.RaiseTimerEvent
        End If
        
        Set oTimer = Nothing
    End SubPublic Sub AddTimer(ByRef oTimer As cTimer, ByVal lTimerID As Long)
        On Error Resume Next
        
        m_oTimers.Add oTimer, CStr(lTimerID)
    End SubPublic Sub RemoveTimer(ByVal lTimerID As Long)
        On Error Resume Next
        
        m_oTimers.Remove CStr(lTimerID)
    End Sub然后在窗体中或其他类中调用方法如下:
    Dim WithEvents timer1 As cTimerPrivate Sub command1_click()
        Set timer1 = New cTimer
        timer1.Interval = 1000
        timer1.Enabled = True
    End Sub
    Private Sub timer1_Timer()
        Debug.Print Now
    End Sub
    其原理与Modest(塞北雪貂)·(偶最欣赏楼主的分) 提供网址中的代码相同,楼主选择其一即可,应该可以结贴了。