ProgressDialog.bas 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. Attribute VB_GlobalNameSpace = False
  2. Attribute VB_Creatable = False
  3. Attribute VB_PredeclaredId = False
  4. Attribute VB_Exposed = False
  5. Option Compare Database
  6. Option Explicit
  7. ' ** Access Toolbox Module **
  8. ' on 2017-02-28,
  9. ' @author: Olivier Massot
  10. ' V 1.0
  11. ' Progress Dialog
  12. ' ! Requires the 'zf_progress' form
  13. ' usage:
  14. '
  15. ' Dim pdial As New ProgressDialog
  16. '
  17. ' pdial.show "My progress bar", "Operation running...", 100, False
  18. '
  19. ' For i = 0 To 100
  20. '
  21. ' ' ongoing work...
  22. '
  23. ' pdial.update i, "Operation running..."
  24. ' Next i
  25. Private Const fname = "zf_progress"
  26. Private total_prog, current_prog As Double
  27. Private auto_close As Boolean
  28. Public Sub show(title As String, Optional msg As String = "", Optional v_total_prog As Double = 100, Optional v_auto_close As Boolean = False)
  29. auto_close = v_auto_close
  30. total_prog = IIf(v_total_prog > 0, v_total_prog, 100)
  31. DoCmd.OpenForm fname, acNormal
  32. With forms(fname)
  33. .txt_title.Caption = title
  34. .txt_msg.Visible = (Len(msg) > 0)
  35. If Len(msg) > 0 Then .txt_msg.Caption = msg
  36. .prog.Width = 1
  37. .prog.BackColor = RGB(23, 55, 94)
  38. End With
  39. DoCmd.Hourglass True
  40. End Sub
  41. Public Sub update(ByVal prog As Double, ByVal msg As String)
  42. Dim ratio As Double
  43. If prog >= 0 Then
  44. If prog <= total_prog Then
  45. current_prog = prog
  46. Else
  47. current_prog = total_prog
  48. End If
  49. Else
  50. current_prog = 0
  51. End If
  52. With forms(fname)
  53. .SetFocus
  54. .txt_msg.Visible = (Len(msg) > 0)
  55. If Len(msg) > 0 Then .txt_msg.Caption = CStr(msg)
  56. ratio = current_prog / total_prog
  57. .prog.Width = 5137 * ratio
  58. If ratio = 1 Then
  59. If auto_close = True Then
  60. Call close_
  61. Exit Sub
  62. End If
  63. DoCmd.Hourglass False
  64. .prog.BackColor = RGB(23, 55, 94)
  65. .btn_ok.Visible = True
  66. .SetFocus
  67. End If
  68. End With
  69. end_:
  70. Exit Sub
  71. End Sub
  72. Public Sub close_()
  73. DoCmd.Hourglass False
  74. DoCmd.Close acForm, fname, acSaveNo
  75. End Sub
  76. Private Sub class_Terminate()
  77. Call close_
  78. End Sub