Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Масштабирование PictureBox / 12 сообщений из 12, страница 1 из 1
09.09.2013, 14:09
    #38390979
KPEATOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
Строю график X-Y на PictureBox. Хочу чтобы при движении мышью по графику в строке состояния отображалось значение Y.
Вроде ничего сложного :

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
X1min = 1
         X1max = 100
    Y1min = 50
    Y1max = 5
    
    Form3.Picture3.Cls
    Form3.Picture3.Scale (X1min, Y1min)-(X1max, Y1max)
    Form3.Picture3.DrawWidth = Hplot1
    Form3.Picture3.Line (X1min, Y1min)-(X1min, Y1max)
    Form3.Picture3.Line (X1min, Y1min)-(X1max, Y1min)
    Form3.Picture3.DrawWidth = Hplot2
    Form3.Picture3.Line (X1max, Y1min)-(X1max, Y1max)
    Form3.Picture3.Line (X1min, Y1max)-(X1max, Y1max)
    
          For i = 1 To 10
             Form3.Picture3.Circle (i * 9, i * 4), Form3.Picture4.ScaleWidth / RCirclDKID, QBColor(ColCirclDKID)
         Next i



И событие мыши:

Код: vbnet
1.
2.
3.
Private Sub Picture3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
         MDIForm1.StatusBar1.Panels(1).Text = "Значение " & Y 
End Sub



Что получается: при движении мышью по графику значение отображается, вроде все нормально, НО когда я дохожу мышью до нижней границы графика, должно показывать значение 5, а у меня показывает 5,12....... А когда дохожу до верхней границы графика - все нормально, показывает 50
Почему внизу 5,1.... а не ровно 5 ?????
...
Рейтинг: 0 / 0
09.09.2013, 14:15
    #38390989
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
У меня не наблюдается, приложите тестовый проект. Возможно связано с тем, что там со ScaleMode
...
Рейтинг: 0 / 0
09.09.2013, 14:26
    #38391008
KPEATOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
ScaleMode у PictureBox = 1 , т.е. в твипах. Исходник приложить не могу. Слишком большая программа.
...
Рейтинг: 0 / 0
09.09.2013, 14:29
    #38391014
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
Никто не просит выкладывать ВЕСЬ проект. Урежьте до размеров воспроизводимости ошибки. Повторяю, я этого на своем компе на вашем коде не наблюдаю.
...
Рейтинг: 0 / 0
09.09.2013, 15:39
    #38391143
KPEATOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
приложил пример. У меня VB 5.0
...
Рейтинг: 0 / 0
09.09.2013, 15:59
    #38391174
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
Посмотрел.
Это погрешность округления при переводе из экранных пикселов в твипы.
Предлагаю работать в пикселах, все равно движение мыши точнее чем один пиксел вы не получите.
...
Рейтинг: 0 / 0
09.09.2013, 16:01
    #38391179
KPEATOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
Почему же тогда, когда мышь доходит до верхней границы PictureBox , значение в строке состояния показывает ровно 50 ???
...
Рейтинг: 0 / 0
09.09.2013, 16:12
    #38391192
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
Зато все промежуточные значения дробные
Честно говоря, я бы лично не стал возиться с Picture1.Scale и делал бы пересчет по-своему в момент движения мыши
...
Рейтинг: 0 / 0
10.09.2013, 08:31
    #38391683
KPEATOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
вообщем, никто так и не может объяснить почему на нижней границе PictureBox показывает значение 5,11.... , а не ровно 5. Жаль
...
Рейтинг: 0 / 0
10.09.2013, 08:36
    #38391688
KPEATOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Масштабирование PictureBox
Кстати также получается и со значением X. Минимум 1, максимум 100. На левой границе графика показывает нормально 1, а на правой показывает чуть меньше 99,88....
...
Рейтинг: 0 / 0
10.09.2013, 12:08
    #38391988
Масштабирование PictureBox
KPEATOP,

к сожалению кому-то лениво взять листочек в клеточку, и понять, что происходит.
В качестве подсказки:
Код: vbnet
1.
2.
3.
    Picture1.Scale (X1min, Y1min)- _
                   (X1max + (X1max - X1min) / Picture1.ScaleX(Picture1.Width, vbTwips, vbPixels), _
                    Y1max + (Y1max - Y1min) / Picture1.ScaleY(Picture1.Height, vbTwips, vbPixels))

P.S. Точности Single всё равно не хватает. А рекомендации работать в пикселах игнорируются.
...
Рейтинг: 0 / 0
10.09.2013, 12:33
    #38392045
Масштабирование PictureBox
Даже не так. А вот так:
Код: vbnet
1.
2.
3.
    Picture1.Scale (X1min, Y1min)- _
                   (X1max + (X1max - X1min) / (Picture1.ScaleX(Picture1.Width, vbTwips, vbPixels) - 1), _
                    Y1max + (Y1max - Y1min) / (Picture1.ScaleY(Picture1.Height, vbTwips, vbPixels) - 1))
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Масштабирование PictureBox / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]