在vb中写了个集合类,怎样把timer控件写入集合类中,当创建对象时timer控件开始记时???
解决方案 »
- 同样的SQL语句,在ACCESS里可以查出,在VB6里就查不出来
- 请教VB中大量数据打印问题
- 我的一个小程序,在一些机子上运行时显示“类型不匹配”,是不面这个引起的吗?
- 一个陌生的dll文件,知道接口函数但是不知道类型!如何在VB中调用!
- 如何实现,鼠标经过ListView第一列时,鼠标变为“等待”状态?经过其它列时,又恢复为默认!
- StrConv
- Vb调用Sql2k自定义存储过程,如何屏蔽sql自动返回的错误
- 窗口始终可见的问题!!
- 又是菜题:有关查询的问题.(100分)
- 如何在一个form的控件中显示另一个form
- 真是怪了,我的一个项目组,每次打开后,什么也不同直接关闭,还是提示是否保存项目组和项目,这是为什么呀?
- 怎么动态给数据库 添加 ,删除 表
采鸟一只,来学习了!
http://blog.csdn.net/Modest/archive/2006/10/23/1346175.aspx
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
解决办法有两个,一个事用别人写的timer类(其实野就是自己用api)
一个就是建个activeXdll,把timer和窗体弄进去,然后封装成类
Dim x As 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(塞北雪貂)·(偶最欣赏楼主的分) 提供网址中的代码相同,楼主选择其一即可,应该可以结贴了。