- 浏览: 176061 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
xiangyufangai:
很好很强大膜拜中哈哈!!
VB 两个字符串处理函数(类似Left/Mid/Right/Split的结合) -
hellohank:
这个……叫摘要算法,不叫加密算法~
Java实现的加密工具类(支持MD5和SHA) -
NIUCH1029291561:
接口有问题奥
网银在线支付接口和应用 -
yeuego:
能幫你就行了
MySQL索引分析 -
ForgiDaved:
很给力的介绍。记得前段时间给一个系统加功能,设计的表没有 ...
MySQL索引分析
本博客有一篇类似的文章《VB 中运用 TimeSetEvent 代替 Timer 控件》与这篇不同。
本篇展示了另外两种方法,具体如下文所示。
方法1:
用这个类可以替代VB自带的Timer控件,这样就不用在无窗体的项目中仅为了使用Timer而多加一个窗体了。我一般用在ActiveX exe中用来分离系统控制权,用Timer的好处是避免控制权死锁,这样也就模拟出了多线程(实际上是多进程),能给用户更好的体验。代码如下:
标准模块(mTimer.bas)
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Public TimerColl As New VBA.Collection
Public Sub TimeProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)
Dim Timer As Timer, lpTimer As Long
lpTimer = TimerColl("ID:" & idEvent)
CopyMemory Timer, lpTimer, 4&
Timer.PulseTimer
CopyMemory Timer, 0&, 4&
End Sub
类模块(Timer.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
Private m_TimerID As Long
Private m_Interval As Long
Private m_Enabled As Boolean
Public Tag As Variant
Public Event Timer()
Public Property Get Interval() As Long
Interval = m_Interval
End Property
Public Property Let Interval(ByVal Value As Long)
m_Interval = Value
Enabled = m_Enabled
End Property
Public Property Get Enabled() As Boolean
Interval = m_Enabled
End Property
Public Property Let Enabled(ByVal Value As Boolean)
If Value Then
m_Enabled = StartTimer
Else
Call StopTimer
End If
End Property
Private Function StartTimer() As Boolean
If m_TimerID = 0 Then
If m_Interval > 0 Then
m_TimerID = SetTimer(0, 0, m_Interval, AddressOf TimeProc)
If m_TimerID <> 0 Then
TimerColl.Add ObjPtr(Me), "ID:" & m_TimerID
StartTimer = True
End If
Else
m_Enabled = True
End If
End If
End Function
Friend Sub PulseTimer()
RaiseEvent Timer
End Sub
Private Sub StopTimer()
If m_TimerID <> 0 Then
KillTimer 0, m_TimerID
TimerColl.Remove "ID:" & m_TimerID
m_TimerID = 0
m_Enabled = False
End If
End Sub
Private Sub Class_Terminate()
Call StopTimer
End Sub
使用方法:
Private WithEvents Timer1 As Timer
Private Sub Form_Load()
Set Timer1 = New TimerLib.Timer
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Debug.Print Now
End Sub
方法2:
用SetTimer函数定义一个ID,并标志一个触发时间(以MS为单位)和回调函数地址.
当指定的触发时间到了,系统就会调用那个指定的回调函数,并以你在SetTimer时定义的ID为参数,这样就可以区别多个定时器了.
当不需要使用某个定时器时,就使用KillTimer函数把指定ID的定时器干掉就可以了.
窗体代码:
Option Explicit
Const GWL_WNDPROC = (-4)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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
Private Sub Form_Load()
glngFuncAdd = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WndProc_TimerTest)
Call SetTimer(hWnd, TIMERID, 500, 0&)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If glngFuncAdd > 0 Then Call SetWindowLong(hWnd, GWL_WNDPROC, glngFuncAdd)
Call KillTimer(hWnd, TIMERID)
End Sub
模块代码:
Option Explicit
Const WM_TIMER = &H113
Public Const TIMERID = &H100 '自定义Timer的ID号
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public glngFuncAdd As Long
Public Function WndProc_TimerTest(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If wMsg = WM_TIMER Then
If wParam = TIMERID Then
Debug.Print Timer
End If
End If
WndProc_TimerTest = CallWindowProc(glngFuncAdd, hWnd, wMsg, wParam, lParam)
End Function
发表评论
-
vb 启动外部程序并且模拟鼠标点击
2011-03-09 13:28 1176Imports System.Runtime.InteropS ... -
VB 列出SQL数据库中所有表及字段信息
2011-03-09 13:24 1163程序思想:用Select name From sysobje ... -
VB 控制音量
2011-03-09 13:22 1242'按钮一是音量增加,按钮二是音量减少,按钮三是静音切换. ... -
拦截 VB TextBox 双击消息
2011-03-09 13:22 954我们都知道在VB中TextBox默认是没有双击消息过程的(也就 ... -
VB 获取/设置屏幕分辨率
2011-03-09 13:21 1125Option ExplicitPrivate Decla ... -
VB 将数据快速导入EXCEL
2011-03-09 13:21 1047Public Function ToExcel()On ... -
VB 建立快捷方式
2011-03-09 13:20 790Private Declare Function fCr ... -
VB 获取快捷方式原文件路径
2011-03-09 13:20 932'此方法不需要引用IShellLink.Private ... -
VB 的一组字符串转换函数
2011-03-09 13:20 795Public Function chrConvert(s ... -
VB 在浏览目录时指定初始目录
2011-03-09 13:19 1083'VB也可以使用CallBack,下面是一个例子: '先 ... -
VB 获得鼠标滚轮的事件
2011-03-09 13:18 1006'窗体代码Private Sub Form_Load() ... -
VB 比较两组字符串
2011-03-09 13:18 1300【方法一】 StrComp(string1, Stri ... -
VB 用API下载文件实例
2011-03-09 13:17 807'########################### ... -
VB 窗口处理技巧大全
2011-03-09 13:17 793VB提供了API函数SetWindowLong和GetWind ... -
VB 实现屏幕右下角浮出式消息窗口,透明淡出效果。
2011-03-09 13:16 1005'任务栏高度[此部分相关代码转载自 枕善居]Privat ... -
VB Filter 函数用法
2011-03-09 13:16 1965例子1:Dim aa(10) As StringDim bbD ... -
VB 在EXPLORER进程崩溃之后重建托盘图标
2011-03-09 13:15 855重点为:向系统注册“TaskbarCreated”消息 ... -
Shell 调用程序后等待该程序结束后返回继续
2011-03-09 13:15 1235方法1: Private Declare Functi ... -
VB 最简单的WAV声音或音乐文件播放的代码
2011-03-09 13:14 1383'最简单的WAV声音或音乐文件播放的代码'API声明Pr ... -
VB 实现保存 Direct3D 游戏截图
2011-03-09 13:13 1515Written By Microsoft MVP: Eric ...
相关推荐
首先,VB中的时钟功能主要依赖于Timer控件。Timer控件在设定的间隔(如1秒)内触发事件,我们可以利用这个事件来更新时钟的显示。在VB中,创建一个时钟控件的基本步骤如下: 1. **添加Timer控件**:打开VB项目,在...
总的来说,"vb6_高精度Timer控件"是VB6开发者在处理高精度计时任务时的一个强大工具,通过API调用来克服内置Timer控件的精度限制,为应用程序带来了更精准的定时功能。在实际项目中,合理运用此控件,能够提升程序的...
VBA中大家都在被需要定时器的困扰,这个控件是从VB6中的timer控件输出的,可以在EXCEL里定时啦
在VB(Visual Basic)编程中,我们经常使用Timer控件来实现定时功能,但有时由于特定的需求或环境限制,可能需要避免使用Timer控件。本模块介绍了一种方法,即如何在VB中创建一个自定义的定时器,不依赖于Timer控件...
我们将深入探讨异步编程、VB(Visual Basic)中的Timer控件以及它们如何协同工作。 首先,异步编程是现代应用程序开发的核心,尤其是在多任务和UI(用户界面)响应性方面。在传统的同步编程中,代码会按顺序执行,...
这个“vb6.0实现定时器功能源代码”应该包含了一个简单的VB6程序,演示了如何利用Timer控件来实现定时触发的事件。 首先,我们需要了解VB6中的Timer控件。Timer控件并不像其他控件那样在用户界面上可见,它是一个...
在VB(Visual Basic)编程中,常常...VB自带的Timer控件简单易用,但对于复杂的定时任务,使用Timer类或API则能提供更强大的功能和更高的灵活性。在实际开发中,我们需要根据项目的需求来选择最适合的定时器实现方式。
【VB编写的小游戏,窗体透明、动态窗体显示、Timer控件应用等源代码】 在VB(Visual Basic)编程环境中,开发小游戏是一项常见的实践,它可以帮助初学者掌握基础编程概念,同时也能让有经验的开发者尝试实现更复杂...
3. **动画效果**:为了增加交互性,可能会有按钮按下、释放时的动画效果,这需要控制定时器(Timer控件)并在每个时间间隔内更新控件的状态。 4. **属性和方法**:用户自定义控件通常会包含一些特殊的属性,如菜单...
在VB(Visual Basic)编程环境中,控件的`Left`和`Top`属性是用于设置控件相对其容器(如Form或Panel)左边缘和上边缘的距离,通过改变这两个属性值,可以实现控件在界面上的位置变化。本篇文章将深入探讨如何利用`...
3. **Timer控件应用**:Timer控件是VB中的一个重要组件,用于在指定的时间间隔内执行特定的代码块。在小游戏开发中,Timer控件通常用于控制游戏的帧率,更新游戏状态,或者处理定时事件,如计时器结束、角色移动等。...
9. Timer控件:实现定时任务,例如每隔一定时间执行某个事件。 10. ActiveX控件:来自第三方的组件,如Flash Player,提供更丰富的功能。 在VB编程中,理解每个控件的属性是至关重要的。属性决定了控件的行为和外观...
VB源码在这个上下文中意味着包含了实现该功能的具体代码,这可能包括类模块、标准模块或者窗体模块中的函数和过程。代码可能包含以下关键部分: 1. **控件创建**:定义一个自定义控件,继承自标准的VB控件,比如...
在VB6.0(Visual Basic 6.0)中,Timer控件是一个非常重要的工具,它可以在指定的时间间隔内触发事件,以此来实现一系列连续的动作,比如在屏幕上滚动文字、闪烁图像或播放动画等。这种技术广泛应用于多媒体软件、...
以上就是使用VB6.0的Timer控件和Line控件数组实现简单钟表功能的详细过程。通过这样的实践,不仅可以加深对VB6.0控件的理解,还能锻炼到时间和角度计算的逻辑思维能力。在实际开发中,这样的技巧还可以应用到其他...
使用方法和 vb 的Timer控件一样,只是增加了一个 AsynExecute 属性,当设置此属性 = true 的时候, Timer 是以异步的方式运行的, 比如,第 1 次timer事件代码未运行完,第2次就开始了,那么第1次事件代码将暂停,第 3 次.....
在VB.NET代码中,我们需要使用`System.Windows.Threading.DispatcherTimer`来实现计时功能。创建一个`DispatcherTimer`实例,设置间隔时间,然后设置事件处理程序更新UI。 ```vbnet Dim timer As New ...
4. **使用Timer控件实现动画效果** 如果希望平滑地移动控件,可以结合使用`Timer`控件和递增的偏移量。 源代码示例: ```vb Private moveOffset As Integer = 0 Private Sub MoveControl_Click() Timer1....