用VB实现状态栏上的进度条 ------------------------------------------以下为程序内容Option Explicit Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPublic Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePublic Const SB_GETRECT As Long = &H40A ---------------------------------------------------添加如下的窗体代码: --------------------------------------------------- Option Explicit Private Sub Command1_Click() Command1.Enabled = False ProgressBar1.Min = 0 ProgressBar1.Max = 100 '设置进度条的最大和最小值 ShowProgressInStatusBar True Timer1.Enabled = True '启动定时器模拟一项任务 End SubPrivate Sub ShowProgressInStatusBar(ByVal bShowProgress As Boolean) Dim tRC As RECT
If bShowProgress Then SendMessage StatusBar1.hwnd, SB_GETRECT, 1, tRC '状态栏的第一栏为0 ,第二栏为1 With ProgressBar1 SetParent .hwnd, StatusBar1.hwnd .Move tRC.Left, tRC.Top, tRC.Right - tRC.Left, tRC.Bottom - tRC.Top '移动进度条到状态栏 .Visible = True .Value = 0 End With Else SetParent ProgressBar1.hwnd, Me.hwnd ProgressBar1.Visible = False End If End SubPrivate Sub Form_Load() ProgressBar1.Visible = False Timer1.Enabled = False Timer1.Interval = 20 End SubPrivate Sub Form_Unload(Cancel As Integer) ShowProgressInStatusBar False '把进度条控件的容器还原为窗体 End SubPrivate Sub Timer1_Timer() Static lNum As Long lNum = lNum + 5 If lNum > 100 Then Timer1.Enabled = False ShowProgressInStatusBar False Command1.Enabled = True lNum = 0 End If ProgressBar1.Value = lNum End Sub
------------------------------------------以下为程序内容Option Explicit
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPublic Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePublic Const SB_GETRECT As Long = &H40A
---------------------------------------------------添加如下的窗体代码:
---------------------------------------------------
Option Explicit
Private Sub Command1_Click()
Command1.Enabled = False ProgressBar1.Min = 0
ProgressBar1.Max = 100
'设置进度条的最大和最小值 ShowProgressInStatusBar True
Timer1.Enabled = True
'启动定时器模拟一项任务
End SubPrivate Sub ShowProgressInStatusBar(ByVal bShowProgress As Boolean)
Dim tRC As RECT
If bShowProgress Then
SendMessage StatusBar1.hwnd, SB_GETRECT, 1, tRC
'状态栏的第一栏为0 ,第二栏为1
With ProgressBar1
SetParent .hwnd, StatusBar1.hwnd
.Move tRC.Left, tRC.Top, tRC.Right - tRC.Left, tRC.Bottom - tRC.Top '移动进度条到状态栏
.Visible = True
.Value = 0
End With
Else
SetParent ProgressBar1.hwnd, Me.hwnd
ProgressBar1.Visible = False
End If
End SubPrivate Sub Form_Load()
ProgressBar1.Visible = False
Timer1.Enabled = False
Timer1.Interval = 20
End SubPrivate Sub Form_Unload(Cancel As Integer)
ShowProgressInStatusBar False
'把进度条控件的容器还原为窗体
End SubPrivate Sub Timer1_Timer()
Static lNum As Long
lNum = lNum + 5
If lNum > 100 Then
Timer1.Enabled = False
ShowProgressInStatusBar False
Command1.Enabled = True
lNum = 0
End If
ProgressBar1.Value = lNum
End Sub