Неточные координаты при рисовании Line на PictureBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Неточные координаты при рисовании Line на PictureBox

Сообщение TAlex » 09.12.2004 (Чт) 16:44

Рисую, например, четыре пересекающиеся линии (решетка). Затем с теми же координатами рисую прямоугольник на их пересечении. И он вылазит за края линий.
Рисую все методом Line. Настроил ScaleHeight и ScaleWidth.
Надеюсь понятно объяснил :wink:

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 09.12.2004 (Чт) 18:59

Объяснил понятно! Но если моно, код пожалуста
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 09.12.2004 (Чт) 20:35

Рисую линии:
Код: Выделить всё
    ' горизонтальные линии
    posXR = japWidth
    For i = 1 To japHeight + 1
        posXL = 0       
        posYT = i - 1
        Main.pictJap.Line (posXL, posYT)-(posXR, posYT), colorLine
    Next i

    ' вертикальные линии
    posYB = japHeight
    For j = 1 To japWidth + 1
        posYT = 0
        posXL = j - 1
        Main.pictJap.Line (posXL, posYT)-(posXL, posYB), colorLine
    Next j

Теперь рисую квадратик:

Код: Выделить всё
    posXL = j - 1
    posYT = i - 1
    posXR = posXL + 1
    posYB = posYT + 1
   
    Main.pictJap.Line (posXL, posYT)-(posXR, posYB), QBColor(0), BF


По идее должен получиться прямоугольник в линиях, а он "вылазит" за линии:

Изображение

CORBA
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 22.11.2003 (Сб) 13:41
Откуда: Ukraine-Crimea-Feodosia

Сообщение CORBA » 10.12.2004 (Пт) 0:48

Код: Выделить всё
picN - это PictureBox, n число клеток по горизонт. , m - по вертикали, dl-длина между граней сетки
Sub DrawPole(n As Integer, m As Integer, dl As Integer)
Dim x_start As Integer
Dim y_start As Integer
Dim x_end As Integer
Dim y_end As Integer
Dim X As Integer, Y As Integer

x_start = picN.Width / 2 - n * dl / 2
x_end = picN.Width / 2 + n * dl / 2
y_start = picN.Height / 2 - m * dl / 2
y_end = picN.Height / 2 + m * dl / 2

For X = x_start To x_end Step dl
picN.Line (X%, y_start)-(X%, y_end)
Next X
For Y = y_start To y_end Step dl
picN.Line (x_start, Y%)-(x_end, Y%)
Next Y
End Sub

авось пригодится :)

SHURUP
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 440
Зарегистрирован: 15.09.2004 (Ср) 14:24
Откуда: Ирпень, Украина

Сообщение SHURUP » 10.12.2004 (Пт) 1:51

Пример в непонятных переменных, а проверить твой пример - не представляется возможным. Но по моему проблема не в графике.
Не забывай, что в
Код: Выделить всё
For i=A to B
Next i
PRINT i
- результатом будет B+1, может в этом фишка…
Нам чужого не надо, но своё мы возьмем, чьё бы оно ни было...

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 10.12.2004 (Пт) 3:32

Ну предположим такую ситуацию:
Код: Выделить всё
' горизонтальная линия
posXL = 1       
posXR = 3
posYT = 2
Main.pictJap.Line (posXL, posYT)-(posXR, posYT), colorLine

' вертикальная линия
posYT = 1
posYB = 3
posXL = 2
Main.pictJap.Line (posXL, posYT)-(posXL, posYB), colorLine

Линии пересекаются в координате 2,2

Теперь рисую квадратик с углом в этой же координате:
Код: Выделить всё
posXL = 2
posYT = 2
posXR = 3
posYB = 3
Main.pictJap.Line (posXL, posYT)-(posXR, posYB), QBColor(0), BF


О! Оказывается "сдвиг" происходит после события Form_Resize в котором и отрисовывается квадратик с линиями. То есть при запуске все нормально рисуется а после Form_Resize - сдвигается. Хотя и линии, и квдратик рисуются по тем же координатам... :? :shock:
день пpошел безpазвpатно...

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

Сообщение alibek » 10.12.2004 (Пт) 12:13

Во-первых, убедись что у тебя ScaleMove=vbPixels. Во-вторых учитывай, что когда рисуется линия, а не прямоугольник (,BF), то последний пиксел линии не рисуется. В-третьих, покажи код Form_Resize.
Lasciate ogni speranza, voi ch'entrate.

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 10.12.2004 (Пт) 20:34

Еще раз все проверил-переписал. Все равно квадратик рисуется не точно. :x
В аттаче полная и тестовая версии. В полной нужно открыть файл .cwd.
В тестовой можно менять на 1 элементы массива Jap_Answer...
Вложения
Grid_Test.rar
Тестовая версия
(7.67 Кб) Скачиваний: 27
Grid_Full.rar
Полная версия
(10.47 Кб) Скачиваний: 48
день пpошел безpазвpатно...

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 10.12.2004 (Пт) 20:58

Поменяй с
Код: Выделить всё
Main.pictJap.Line (posXL, posYT)-(posXR, posYB), QBColor(0), BF

на
Код: Выделить всё
Main.pictJap.Line (posXL + 1, posYT + 1)-(posXR, posYB), QBColor(0), BF

:wink:

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

TAlex
Новичок
Новичок
Аватара пользователя
 
Сообщения: 35
Зарегистрирован: 16.06.2003 (Пн) 11:39
Откуда: г.Харьков, Украина

Сообщение TAlex » 10.12.2004 (Пт) 23:07

Получилось. Сенкс.

Поменяй на
Код: Выделить всё
Main.pictJap.Line (posXL + 1, posYT + 1)-(posXR, posYB), QBColor(0), BF


Но откуда эти пикселя взялись?!

И при уменьшении формы крайние колонки/строки начинают "вылезать" за край формы.
день пpошел безpазвpатно...


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

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

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

    TopList  
cron