Подскажите, как устранить проблему...

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

Подскажите, как устранить проблему...

Сообщение el-niko » 18.09.2004 (Сб) 14:36

Написал свою прогу для перевода картинок в 2-чный а затем в 16-чный код. Всё вроде гладно, НО когда вставляешь на маленькую картинку (32х32) а чуть юольше выпадает ошибка, типа Вышло за пределы. Может кто сможет подсказать, в чёми причина
Код: Выделить всё
'ПЕРЕВОД КАРТИНКИ В КОД

Dim res As String
With P
.ScaleMode = vbPixels
.AutoRedraw = True
.AutoSize = True
    For Y = 0 To .ScaleHeight - 1
        For X = 0 To .ScaleWidth - 1
            tmpColor = .Point(X, Y)
            If tmpColor = vbBlack Then res = res & "1" Else res = res & "0"
        Next
    Next
End With

On Error GoTo Error1_1
For Z = 1 To Len(res)
    tmpDec = tmpDec + Val(Mid(res, Z, 1)) * 2 ^ (Z - 1)
Next

txtCOD.Text = res

Dim Binary As String: Binary = txtCOD.Text
Dim Hex As String, i As Long
For i = 1 To Len(Binary) Step 4
Select Case Mid$(Binary, i, 4)
Case "0000": Hex = Hex & "0"
Case "0001": Hex = Hex & "1"
Case "0010": Hex = Hex & "2"
Case "0011": Hex = Hex & "3"
Case "0100": Hex = Hex & "4"
Case "0101": Hex = Hex & "5"
Case "0110": Hex = Hex & "6"
Case "0111": Hex = Hex & "7"
Case "1000": Hex = Hex & "8"
Case "1001": Hex = Hex & "9"
Case "1010": Hex = Hex & "A"
Case "1011": Hex = Hex & "B"
Case "1100": Hex = Hex & "C"
Case "1101": Hex = Hex & "D"
Case "1110": Hex = Hex & "E"
Case "1111": Hex = Hex & "F"
End Select
Next
Debug.Print Hex

ww = P.Width - 2
hh = P.Height - 2

txtCOD.Text = q1.Caption & ww & q2.Caption & hh & q3 & Hex & q4.Caption

If Ch.Value = 1 Then
  Open Dir.Path & "\" & "Коды картинок тут.txt" For Append As 1
  Print #1, Fil.FileName & "|||" & txtCOD.Text
  Close
End If

'END ПЕРЕВОД КАРТИНКИ В КОД
Exit Sub

Error1_1:
If Ch.Value = 1 Then
  Open Dir.Path & "\" & "Коды картинок тут.txt" For Append As 1
  Print #1, Fil.FileName & "|||" & "Ошибка в кодировании"
  Close
End If

Error1: txtCOD.Text = "Произошла ошибка в кодировании файла"

End Sub

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

Сообщение GSerg » 18.09.2004 (Сб) 14:45

Неее...
Пока Option Explicit не поставишь и все переменные не объявишь, даже не надейся :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

el-niko
Новичок
Новичок
Аватара пользователя
 
Сообщения: 44
Зарегистрирован: 17.09.2004 (Пт) 20:15
Откуда: Елец

Сообщение el-niko » 18.09.2004 (Сб) 14:48

Ну тут, как я понял, трабл вызывает эта строчка
tmpDec = tmpDec + Val(Mid(res, Z, 1)) * 2 ^ (Z - 1)
Но что с ней - незнаю....
=)

PATRIOT_kz
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 105
Зарегистрирован: 14.09.2004 (Вт) 21:09
Откуда: Павлодар, Казахстан

Сообщение PATRIOT_kz » 19.09.2004 (Вс) 18:18

И не только!

Переменные: X , Y - у тебя не опубликованы как личности!
Т.е. короче они у тя идут как Integer = -32767 до 32767, запалуй их
как Long или Double
Press any key . . .

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 19.09.2004 (Вс) 18:20

PATRIOT_kz писал(а):И не только!

Переменные: X , Y - у тебя не опубликованы как личности!
Т.е. короче они у тя идут как Integer = -32767 до 32767, запалуй их
как Long или Double
Учите матчасть, товарищ. Переменные без объявления идут как Variant, который расширяеться по мере надобности... вроде...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.09.2004 (Вс) 20:12

Variant не расширяется, а хранит то, что в него положили. Кладёт функция Val значение типа Double. Никаких проблем. Откуда переполнение - х.з.

Кстати, кто-нибудь про операторы DefType ещё помнит? DefInt A-Z в начале модуля - и все необъявленные переменные стали Integer...
Изображение

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

Сообщение GSerg » 19.09.2004 (Вс) 20:53

Я вот про GoSub помню...
Но юзать его никогда никому не посоветую :)
option explicit - наш выбор... а в .net - ещё и option strict :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

PATRIOT_kz
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 105
Зарегистрирован: 14.09.2004 (Вт) 21:09
Откуда: Павлодар, Казахстан

Сообщение PATRIOT_kz » 19.09.2004 (Вс) 20:57

Ужас! Своего-же солдата на фронте бомбят ! :lol:

ХеХе! Вот есть такая хрень "Option Explicit", а есть интересно вот это
"Option Exploit"
Press any key . . .

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.09.2004 (Вс) 22:05

GSerg писал(а):Я вот про GoSub помню...
Но юзать его никогда никому не посоветую :)

Кстати, зря: это быстрее, чем вызов процедуры. Если в одной процедуре кусок кода повторяется много раз - лучше вынести его в GoSub, чем в отдельную процедуру.
Разумное чередование процедур и GoSub-ов рулит.
Изображение

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

Сообщение GSerg » 19.09.2004 (Вс) 22:19

Из .NET GoSub порезали как динозавровый способ :)
Хотя да, если бы можно было указывать для процедуры callinc convention, вот тогда точно не нужен был бы gosub...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.09.2004 (Вс) 22:59

Если бы в Бейсике всё было как надо, то проги бы писались сами, и программисты остались бы без работы.
Согласись, если бы в VB не было столько quirk-ов, было бы гораздо скучнее жить и работать.
Изображение


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

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

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

    TopList