Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
TiG
-
- Постоялец

-
-
- Сообщения: 327
- Зарегистрирован: 12.05.2003 (Пн) 12:34
- Откуда: Ростов-на-Дону
-
TiG » 15.04.2005 (Пт) 12:26
Подскажите почему через несколько минут работы программы Windows пишет что не хватает памяти. Текст программы без модулей прилагаю:
- Код: Выделить всё
Dim ii As Integer
Private Sub Command1_Click()
Call Destroy
End
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call Destroy
End Sub
Private Sub refr()
BitBlt CDC, 0, 0, 400, 400, MDC2, 0, 0, SRCCOPY
End Sub
Private Sub Create()
Dim pict As String
Select Case ii
Case 1: pict = "red.bmp"
Case 2: pict = "red1.bmp"
Case 3: pict = "red2.bmp"
Case 4: pict = "red3.bmp"
Case 5: pict = "red4.bmp"
End Select
CDC = GetDC(Form1.hwnd)
MDC2 = CreateCompatibleDC(CDC)
MBM2 = CreateCompatibleBitmap(CDC, 400, 400)
ReleaseDC Form1.hwnd, CDC
SelectObject MDC2, LoadPicture(pict)
End Sub
Private Sub Destroy()
DeleteObject MBM2
DeleteDC MDC2
End Sub
Private Sub Timer1_Timer()
ii = ii + 1
If ii > 5 Then ii = 1
Call Create
Call refr
Call Destroy
End Sub
Все мои игрушки мама разметало ураганом...
-
Inferno
-
- Продвинутый пользователь

-
-
- Сообщения: 179
- Зарегистрирован: 26.01.2005 (Ср) 1:06
Inferno » 15.04.2005 (Пт) 18:14
Странно у тебя как-то написано. Ты уж наверное обяви CDC , MDC2,MBM2 как глобальные или передавай их значения. И end в клике тоже никчему.
-
Alexanbar
-
- Продвинутый гуру

-

-
- Сообщения: 1727
- Зарегистрирован: 13.04.2004 (Вт) 23:04
- Откуда: Волгоградская обл.
-
Alexanbar » 15.04.2005 (Пт) 20:57
А что, разве нельзя заранее заготовить пять картинок, и выбирать их из ImagelIst-а? Похоже, что память не освобождается. Что-то подобное у меня было при использовании ф-й работы с памятью типа CopyMemory.
-
TiG
-
- Постоялец

-
-
- Сообщения: 327
- Зарегистрирован: 12.05.2003 (Пн) 12:34
- Откуда: Ростов-на-Дону
-
TiG » 18.04.2005 (Пн) 7:38
Все переменные у меня объявлены как глобальные в том же модуле, где я декларирую api функции.
Программа работает. Помещать картинки куда либо мне не надо. - это просто пример для отладки более крутой программы.
Что то я прописал неверно. поэтому память и не высвобождается.
Вопрос ЧТО!!!!!
Поэтому и прошу совета у спецов по блитингу.
Все мои игрушки мама разметало ураганом...
-
TiG
-
- Постоялец

-
-
- Сообщения: 327
- Зарегистрирован: 12.05.2003 (Пн) 12:34
- Откуда: Ростов-на-Дону
-
TiG » 18.04.2005 (Пн) 11:48
УРА !!!
Разобрался сам.
Для интересующихся прилагаю идеально работающий вариант программы (без модуля декларации api функций и переменных).
- Код: Выделить всё
Dim pict As String
Dim ii As Integer
Private Sub Command1_Click()
End
End Sub
Private Sub Form_Load()
ii = 1
CDC = GetDC(Form1.hwnd)
CompDC = CreateCompatibleDC(CDC) 'Создаём совместимый DC
Timer1.Enabled = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
DeleteDC CompDC 'Удаляем DC
DeleteDC CDC 'Удаляем DC
End Sub
Private Sub Timer1_Timer()
ii = ii + 1
If ii > 5 Then ii = 1
Select Case ii
Case 1: pict = "red.bmp"
Case 2: pict = "red1.bmp"
Case 3: pict = "red2.bmp"
Case 4: pict = "red3.bmp"
Case 5: pict = "red4.bmp"
End Select
Text1.Text = CStr(ii)
Call ref(pict)
End Sub
Private Sub ref(pict)
OldBM = SelectObject(CompDC, LoadPicture(pict))
BitBlt CDC, 0, 0, 400, 400, CompDC, 0, 0, vbSrcCopy
newBM = SelectObject(CompDC, OldBM)
DeleteObject newBM
End Sub
Все мои игрушки мама разметало ураганом...
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 11