Непонятная работа PictureBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Непонятная работа PictureBox

Сообщение alibek » 06.04.2008 (Вс) 15:01

Подумывал в Трепе тему создать, но помоему это все-же больше VB.

Есть у меня в проекте самодельный прогрессбар-форма.
Используется она так:
Код: Выделить всё
...
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
...


И на первый взгляд тут все правильно.
Однако при работе верхний прогрессбар (прогресс текущей стадии) очень странно себя ведет. Как он себя ведет - на скриншоте.

Может я чего не замечаю?
Вложения
pb.gif
Форма прогресса в работе.
(9.08 Кб) Скачиваний: 61
Lasciate ogni speranza, voi ch'entrate.

burik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 514
Зарегистрирован: 03.11.2005 (Чт) 22:04
Откуда: Беларусь, Рогачев

Сообщение burik » 06.04.2008 (Вс) 16:21

Очисти прогресс перед перерисовкой:
Код: Выделить всё

Private Sub SetProgressGraph(ByVal Progress As Single, Graph As PictureBox, Field As Label)
Graph.Cls '<<<<<<<<<<<<<<<<
If Progress < 0 Then
  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

Так все работает..
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.04.2008 (Пн) 7:44

Да... Это я хорошо стормозил :)
Что называется, в упор не вижу.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 82

    TopList