Amir Ghasemiyan
2014/12/01, 01:22
سلام دوستان
تو اين تاپيك ميخوام براتون نحوه ساخت يك درصد پيشرفت فرايند رو بهتون آموزش بدم
خب اول نتيجه نهايي رو بهتون نشون ميدم.
5120
خب حالا بريم مرحله به مرحله اين درصد پيشرفت رو بسازيم.
اول از همه يك فرم ميسازيم با دوتا ليبل و يك فريم. فريم براي كادر، يك ليبل براي نشون دادن ميزان پيشرفت (قسمت آبي رنگ) يك ليبل براي نشون دادن درصد (قسمت عددي)
حالا روي فرم كليك ميكنيم و F7 رو ميزنيم. تمامي كدها رو حذف كرده و كدهاي زير رو بهش اضافه ميكنيم
'Hide a UserForm's Close Button
'Find the userform's Window
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Get the current window style
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'Set the new window style
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = -16
Const WS_SYSMENU = &H80000
Private Sub UserForm_Initialize()
Dim hWnd As Long, lStyle As Long
'Which type of userform
If Val(Application.Version) >= 9 Then
hWnd = FindWindow("ThunderDFrame", Me.Caption)
Else
hWnd = FindWindow("ThunderXFrame", Me.Caption)
End If
'Get the current window style and turn off the Close button
lStyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, (lStyle And Not WS_SYSMENU)
End Sub
اين كد باعث ميشه كه دكمه خروج از بالاي فرم حذف بشه و پنجره قابل بسته شدن نباشه كه البته ضروري هم نيست. من ترجيح دادم دكمه حذف بشه
بعد در ادامه اين كد رو اضافه ميكنيم:
Private Sub UserForm_Activate()
code
End Sub
اين كد باعث ميشه بعد از فعال شدن فرم درصد پيشرفت يكسري كد اجرا بشه
خب حالا يك ماژول ميسازيم و اين كدها رو داخل ماژول ميذاريم:
Sub code()
Dim i As Integer, j As Integer, pctCompl As Single
For i = 1 To 100
pctCompl = i
progress pctCompl
Application.Wait Now() + TimeSerial(0, 0, 1)
Next i
Unload UserForm1
End Sub
Sub progress(pctCompl As Single)
UserForm1.Text.Caption = pctCompl & "%"
UserForm1.Bar.Width = pctCompl * 2
DoEvents
End Sub
اين كد همان فرايندي هست كه قرار هست انجام بشه و ما درصد پيشرفت اين فرايند رو متوجه بشيم.
قسمت هايي كه با سبز مشخص كردم اجباري هست و بايد وجود داشته باشه. بقيش با توجه به كاري كه ميخوايم انجام بديم تغيير ميكنه
خب در آخر هم كد زير رو در ادامه كدهاي قبل اضافه ميكنيم
Sub CallFrom()
UserForm1.Show
End Sub
اين كد براي شروع فرايند هست و درواقع با اجراي اين كد فرايند استارت ميخوره
به همين راحتي يك فرم درصد پيشرفت ساختيم. من يك نمونه هم پيوست ميكنم كه بهتر بتونين استفاده كنيد
تو اين تاپيك ميخوام براتون نحوه ساخت يك درصد پيشرفت فرايند رو بهتون آموزش بدم
خب اول نتيجه نهايي رو بهتون نشون ميدم.
5120
خب حالا بريم مرحله به مرحله اين درصد پيشرفت رو بسازيم.
اول از همه يك فرم ميسازيم با دوتا ليبل و يك فريم. فريم براي كادر، يك ليبل براي نشون دادن ميزان پيشرفت (قسمت آبي رنگ) يك ليبل براي نشون دادن درصد (قسمت عددي)
حالا روي فرم كليك ميكنيم و F7 رو ميزنيم. تمامي كدها رو حذف كرده و كدهاي زير رو بهش اضافه ميكنيم
'Hide a UserForm's Close Button
'Find the userform's Window
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
'Get the current window style
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
'Set the new window style
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = -16
Const WS_SYSMENU = &H80000
Private Sub UserForm_Initialize()
Dim hWnd As Long, lStyle As Long
'Which type of userform
If Val(Application.Version) >= 9 Then
hWnd = FindWindow("ThunderDFrame", Me.Caption)
Else
hWnd = FindWindow("ThunderXFrame", Me.Caption)
End If
'Get the current window style and turn off the Close button
lStyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, (lStyle And Not WS_SYSMENU)
End Sub
اين كد باعث ميشه كه دكمه خروج از بالاي فرم حذف بشه و پنجره قابل بسته شدن نباشه كه البته ضروري هم نيست. من ترجيح دادم دكمه حذف بشه
بعد در ادامه اين كد رو اضافه ميكنيم:
Private Sub UserForm_Activate()
code
End Sub
اين كد باعث ميشه بعد از فعال شدن فرم درصد پيشرفت يكسري كد اجرا بشه
خب حالا يك ماژول ميسازيم و اين كدها رو داخل ماژول ميذاريم:
Sub code()
Dim i As Integer, j As Integer, pctCompl As Single
For i = 1 To 100
pctCompl = i
progress pctCompl
Application.Wait Now() + TimeSerial(0, 0, 1)
Next i
Unload UserForm1
End Sub
Sub progress(pctCompl As Single)
UserForm1.Text.Caption = pctCompl & "%"
UserForm1.Bar.Width = pctCompl * 2
DoEvents
End Sub
اين كد همان فرايندي هست كه قرار هست انجام بشه و ما درصد پيشرفت اين فرايند رو متوجه بشيم.
قسمت هايي كه با سبز مشخص كردم اجباري هست و بايد وجود داشته باشه. بقيش با توجه به كاري كه ميخوايم انجام بديم تغيير ميكنه
خب در آخر هم كد زير رو در ادامه كدهاي قبل اضافه ميكنيم
Sub CallFrom()
UserForm1.Show
End Sub
اين كد براي شروع فرايند هست و درواقع با اجراي اين كد فرايند استارت ميخوره
به همين راحتي يك فرم درصد پيشرفت ساختيم. من يك نمونه هم پيوست ميكنم كه بهتر بتونين استفاده كنيد