Есть у меня в проекте самодельный прогрессбар-форма.
Используется она так:
- Код: Выделить всё
...
Public WithEvents ProgressForm As frmProgress
...
Set ProgressForm = New frmProgress
...
For C = 1 To FormData.Cities.Count
...
ProgressForm.SetProgress 100! * C / FormData.Cities.Count, 85, 10
DoEvents
If ProgressForm.FailOperation Then 'сбой
If ProgressForm.CancelOperation Then 'отмена
Next C
Здесь в ProgressForm.SetProgress 100! * C / FormData.Cities.Count, 85, 10 задается, что текущий прогресс будет отображаться на интервале общего прогресса от 85% до 95% (85% - начало, 10% - длительность).
Форма прогресса устроена так:
- Код: Выделить всё
...
Public InProgress As Boolean
Public FailOperation As Boolean
Public CancelOperation As Boolean
Private OverallProgress As Single
...
Public Sub SetProgress(ByVal StageProgress As Single, ByVal StageStart As Single, ByVal StageLength As Single)
OverallProgress = StageStart + StageLength * (StageProgress / 100!)
SetProgressGraph StageProgress, picProgressStage, fldProgressStage
SetProgressGraph OverallProgress, picProgressOverall, fldProgressOverall
End Sub
...
Private Sub SetProgressGraph(ByVal Progress As Single, Graph As PictureBox, Field As Label)
If Progress < 0 Then
Graph.Cls
Graph.Refresh
Field.Caption = vbNullString
Field.Refresh
Exit Sub
End If
Graph.Line (0, 0)-Step(Graph.ScaleWidth * Progress / 100, Graph.ScaleHeight), SystemColorConstants.vbHighlight, BF
Graph.Refresh
Field.Caption = Format$(Progress, "0.0\%")
Field.Refresh
End Sub
...
И на первый взгляд тут все правильно.
Однако при работе верхний прогрессбар (прогресс текущей стадии) очень странно себя ведет. Как он себя ведет - на скриншоте.
Может я чего не замечаю?