Как ускорить процедуру?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Как ускорить процедуру?

Сообщение Matew » 13.10.2004 (Ср) 4:51

Код: Выделить всё
Private Sub draw(cvet As Long, cvetZal As Long, pt1() As POINTAPI, aa As Integer)
Dim hPen As Long
Dim hOldPen As Long
Dim retval As Long
Dim hBrush As Long
Dim hOldBrush As Long

If cvetZal <> Pic.BackColor Then ' åñëè ïîëèãîí âûäåëåí, òî îí íå çàëèâàåòñÿ
    hBrush = CreateSolidBrush(cvetZal)
    hOldBrush = SelectObject(Pic.hdc, hBrush)
End If

hPen = CreatePen(0, 2, cvet)
hOldPen = SelectObject(Pic.hdc, hPen)
retval = polygon(Pic.hdc, pt1(1), aa)
retval = DeleteObject(hPen)

If cvetZal <> Pic.BackColor Then
    retval = DeleteObject(hBrush)
End If
End Sub

1.Можно ли как-нить ускорить эту процедуру?(она у меня самая медленная)
2.Помойму я не возвращаю все на место. Надо ли здесь возвращать Pic кисти и перья?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 13.10.2004 (Ср) 10:49

Помнится, как-то мы вышли на тот факт, что рисование пером шириной 1 существенно быстрее, чем любой другой ширины...

Ну а насчёт утечек - да, есть.
Код: Выделить всё
Private Sub draw(cvet As Long, cvetZal As Long, pt1() As POINTAPI, aa As Integer)
  Dim hOldPen As Long, hOldBrush As Long
 
  If cvetZal <> Pic.BackColor Then hOldBrush = SelectObject(Pic.hdc, CreateSolidBrush(cvetZal))
  hOldPen = SelectObject(Pic.hdc, CreatePen(0, 2, cvet))
  polygon Pic.hdc, pt1(1), aa
  DeleteObject SelectObject(Pic.hDC, hOldPen)
  If hOldBrush Then DeleteObject SelectObject(Pic.hDC, hOldBrush)
End Sub
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 14.10.2004 (Чт) 15:15

В моем случае (я замерял время) все таки быстрее получается рисовать пером 2 т.к. я сначала отсекаю регион по этому же поинтапи. И если потом рисую пером 1, то границ полигона не видно. За утечки спасибо, тока я несовсем понял почему так-DeleteObject SelectObject это удаляется выбраный объект? В других примерах я такого не видел...
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.10.2004 (Чт) 16:31

Selectobject возвращает предыдущий, заменённый объект. Его и удаляем.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 19

    TopList