Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для aptos
13 / 13 / 3
Регистрация: 04.06.2013
Сообщений: 156

Как в графическом компоненте контролировать положение картинки?

19.04.2014, 22:32. Показов 1481. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это либо PictureBox, либо Image, не так важно. Как в компоненте контролировать положение картинки? Именно загруженной картинки, а не самого компонента.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.04.2014, 22:32
Ответы с готовыми решениями:

Как контролировать положение кнопки на форме
моя первая програма на С(шарп), так что прошу не слишком критиковать...проблема в том что я не могу добится что б кнопка не у бигала за...

Как задать положение картинки внутри другой картинки? CSS, HTML
Добрый день. Начинаю учить веб-разработку и решил написать простенький сайт. В общем, нужно вставить изображение внутрь другого изображения...

Как вывести картинки на экран В графическом режиме pascal abc
например если ваш знак овен ,вывести эту картину uses graphABC; const kol=1000; cl:arrayof...

6
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
20.04.2014, 02:17
Лучший ответ Сообщение было отмечено aptos как решение

Решение

Например так.
Вложения
Тип файла: rar MovePicture.rar (4.0 Кб, 13 просмотров)
2
 Аватар для aptos
13 / 13 / 3
Регистрация: 04.06.2013
Сообщений: 156
20.04.2014, 13:23  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
Например так.
Здорово, код такой простой... Можно немножко подробнее об функциях, использованных в подпрограмме?
Visual Basic
1
2
3
4
5
Private Sub Update()
    pic.Line (0, 0)-(pic.ScaleWidth, pic.ScaleHeight), pic.BackColor, BF    
    pic.PaintPicture pic.Picture, hsbPos, vsbPos     ' вот тут... что PaintPicture делает со скроллбоксами и picturebox'ом?
    pic.Refresh
End Sub
Мне просто надо более гибкий код, потому что изображение могу загрузить любое, и независимо от размера, нужно чтобы при необходимости все изображение можно было просмотреть, пролистывая скроллбоксы.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
20.04.2014, 13:36
Метод PaintPicture рисует картинку по заданным координатам. Соответственно я задаю координаты в зависимости от положения скролбаров
1
 Аватар для aptos
13 / 13 / 3
Регистрация: 04.06.2013
Сообщений: 156
20.04.2014, 14:18  [ТС]
Спасибо!

Но я не могу учесть размеры картинки, не зная нужного метода... Как можно определить размеры загруженной картинки?
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
20.04.2014, 14:52
Лучший ответ Сообщение было отмечено The trick как решение

Решение

PictureBox.Picture.Width/Height (это в твипах), используй метод ScaleX(Y) для перевода в пиксели и т.д.
Вот тебе еще пример я как-то делал кому-то по скроллингу картинки.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Option Explicit
 
Private Type XFORM
    eM11 As Single
    eM12 As Single
    eM21 As Single
    eM22 As Single
    eDx As Single
    eDy As Single
End Type
 
Private Declare Function SetGraphicsMode Lib "gdi32" (ByVal hdc As Long, ByVal iMode As Long) As Long
Private Declare Function SetWorldTransform Lib "gdi32" (ByVal hdc As Long, lpXform As XFORM) As Long
Private Declare Function ModifyWorldTransform Lib "gdi32" (ByVal hdc As Long, lpXform As XFORM, ByVal iMode As Long) As Long
 
Private Const MWT_IDENTITY = 1
Private Const MWT_LEFTMULTIPLY = 2
Private Const MWT_RIGHTMULTIPLY = 3
 
Private Const GM_ADVANCED = 2
Private Const GM_COMPATIBLE = 1
 
Dim Value As Single
 
Private Sub Form_Load()
    SetGraphicsMode picDisp.hdc, GM_ADVANCED
End Sub
Private Sub picDisp_Paint()
    Update
End Sub
 
Private Sub hsbScroll_Change(): picDisp.Refresh: End Sub
Private Sub hsbScroll_Scroll(): picDisp.Refresh: End Sub
 
Private Sub picKnob_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Static oy As Single
    If Button = vbLeftButton Then
        Value = Value + Y - oy
        If Value < 0 Then Value = 0 Else If Value > 6.28 Then Value = 6.28
        picDisp.Refresh
    End If
    oy = Y
End Sub
 
Private Sub vsbScroll_Change(): picDisp.Refresh: End Sub
Private Sub vsbScroll_Scroll(): picDisp.Refresh: End Sub
Private Sub hsbShear_Change(): picDisp.Refresh: End Sub
Private Sub hsbShear_Scroll(): picDisp.Refresh: End Sub
Private Sub vsbShear_Change(): picDisp.Refresh: End Sub
Private Sub vsbShear_Scroll(): picDisp.Refresh: End Sub
Private Sub hsbScale_Change(): picDisp.Refresh: End Sub
Private Sub hsbScale_Scroll(): picDisp.Refresh: End Sub
Private Sub vsbScale_Change(): picDisp.Refresh: End Sub
Private Sub vsbScale_Scroll(): picDisp.Refresh: End Sub
 
Private Sub Update()
    Dim Mtx1 As XFORM, Mtx2 As XFORM, Mtx3 As XFORM, v As Single, c As Single, s As Single
    
    picKnob.Cls
    v = Value * 0.75
    picKnob.Circle (0, 0), 0.9, vbButtonShadow, 5.498, 3.927
    If v > 0 Then picKnob.Circle (0, 0), 0.8, vbButtonText, -IIf(v > 3.927, 10.21 - v, 3.927 - v), -3.927
    
    Mtx1.eDx = -hsbScroll.Value
    Mtx1.eDy = -vsbScroll.Value
    Mtx1.eM11 = hsbScale.Value / 100
    Mtx1.eM22 = vsbScale.Value / 100
    Mtx1.eM12 = hsbShear.Value / 100
    Mtx1.eM21 = vsbShear.Value / 100
 
    c = Cos(Value): s = Sin(Value)
    Mtx2.eM11 = c: Mtx2.eM12 = s: Mtx2.eM21 = -s: Mtx2.eM22 = c
    Mtx2.eDx = picDisp.ScaleWidth / 2: Mtx2.eDy = picDisp.ScaleHeight / 2
    
    Mtx3.eM11 = 1: Mtx3.eM22 = 1
    Mtx3.eDx = -picDisp.ScaleWidth / 2
    Mtx3.eDy = -picDisp.ScaleHeight / 2
    
    ModifyWorldTransform picDisp.hdc, Mtx1, MWT_IDENTITY
    picDisp.Line (0, 0)-(picDisp.ScaleWidth, picDisp.ScaleHeight), picDisp.BackColor, BF
    
    
    ModifyWorldTransform picDisp.hdc, Mtx3, MWT_RIGHTMULTIPLY
    ModifyWorldTransform picDisp.hdc, Mtx2, MWT_RIGHTMULTIPLY
    ModifyWorldTransform picDisp.hdc, Mtx1, MWT_RIGHTMULTIPLY
End Sub
Миниатюры
Как в графическом компоненте контролировать положение картинки?  
Вложения
Тип файла: rar GdiTransform.rar (12.0 Кб, 13 просмотров)
1
 Аватар для aptos
13 / 13 / 3
Регистрация: 04.06.2013
Сообщений: 156
20.04.2014, 16:07  [ТС]
Цитата Сообщение от The trick Посмотреть сообщение
PictureBox.Picture.Width/Height (это в твипах), используй метод ScaleX(Y) для перевода в пиксели и т.д.
Вот тебе еще пример я как-то делал кому-то по скроллингу картинки.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Option Explicit
 
Private Type XFORM
    eM11 As Single
    eM12 As Single
    eM21 As Single
    eM22 As Single
    eDx As Single
    eDy As Single
End Type
 
Private Declare Function SetGraphicsMode Lib "gdi32" (ByVal hdc As Long, ByVal iMode As Long) As Long
Private Declare Function SetWorldTransform Lib "gdi32" (ByVal hdc As Long, lpXform As XFORM) As Long
Private Declare Function ModifyWorldTransform Lib "gdi32" (ByVal hdc As Long, lpXform As XFORM, ByVal iMode As Long) As Long
 
Private Const MWT_IDENTITY = 1
Private Const MWT_LEFTMULTIPLY = 2
Private Const MWT_RIGHTMULTIPLY = 3
 
Private Const GM_ADVANCED = 2
Private Const GM_COMPATIBLE = 1
 
Dim Value As Single
 
Private Sub Form_Load()
    SetGraphicsMode picDisp.hdc, GM_ADVANCED
End Sub
Private Sub picDisp_Paint()
    Update
End Sub
 
Private Sub hsbScroll_Change(): picDisp.Refresh: End Sub
Private Sub hsbScroll_Scroll(): picDisp.Refresh: End Sub
 
Private Sub picKnob_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Static oy As Single
    If Button = vbLeftButton Then
        Value = Value + Y - oy
        If Value < 0 Then Value = 0 Else If Value > 6.28 Then Value = 6.28
        picDisp.Refresh
    End If
    oy = Y
End Sub
 
Private Sub vsbScroll_Change(): picDisp.Refresh: End Sub
Private Sub vsbScroll_Scroll(): picDisp.Refresh: End Sub
Private Sub hsbShear_Change(): picDisp.Refresh: End Sub
Private Sub hsbShear_Scroll(): picDisp.Refresh: End Sub
Private Sub vsbShear_Change(): picDisp.Refresh: End Sub
Private Sub vsbShear_Scroll(): picDisp.Refresh: End Sub
Private Sub hsbScale_Change(): picDisp.Refresh: End Sub
Private Sub hsbScale_Scroll(): picDisp.Refresh: End Sub
Private Sub vsbScale_Change(): picDisp.Refresh: End Sub
Private Sub vsbScale_Scroll(): picDisp.Refresh: End Sub
 
Private Sub Update()
    Dim Mtx1 As XFORM, Mtx2 As XFORM, Mtx3 As XFORM, v As Single, c As Single, s As Single
    
    picKnob.Cls
    v = Value * 0.75
    picKnob.Circle (0, 0), 0.9, vbButtonShadow, 5.498, 3.927
    If v > 0 Then picKnob.Circle (0, 0), 0.8, vbButtonText, -IIf(v > 3.927, 10.21 - v, 3.927 - v), -3.927
    
    Mtx1.eDx = -hsbScroll.Value
    Mtx1.eDy = -vsbScroll.Value
    Mtx1.eM11 = hsbScale.Value / 100
    Mtx1.eM22 = vsbScale.Value / 100
    Mtx1.eM12 = hsbShear.Value / 100
    Mtx1.eM21 = vsbShear.Value / 100
 
    c = Cos(Value): s = Sin(Value)
    Mtx2.eM11 = c: Mtx2.eM12 = s: Mtx2.eM21 = -s: Mtx2.eM22 = c
    Mtx2.eDx = picDisp.ScaleWidth / 2: Mtx2.eDy = picDisp.ScaleHeight / 2
    
    Mtx3.eM11 = 1: Mtx3.eM22 = 1
    Mtx3.eDx = -picDisp.ScaleWidth / 2
    Mtx3.eDy = -picDisp.ScaleHeight / 2
    
    ModifyWorldTransform picDisp.hdc, Mtx1, MWT_IDENTITY
    picDisp.Line (0, 0)-(picDisp.ScaleWidth, picDisp.ScaleHeight), picDisp.BackColor, BF
    
    
    ModifyWorldTransform picDisp.hdc, Mtx3, MWT_RIGHTMULTIPLY
    ModifyWorldTransform picDisp.hdc, Mtx2, MWT_RIGHTMULTIPLY
    ModifyWorldTransform picDisp.hdc, Mtx1, MWT_RIGHTMULTIPLY
End Sub
Как всегда, спасибки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.04.2014, 16:07
Помогаю со студенческими работами здесь

Как поставить изначальное положение картинки слайдера?
Недавно установил сладер на JS, всё красиво, всё работает, но я хотел бы чтобы при запуске страницы, изначальное положение картинки...

Как передать через сокеты положение картинки на форме?
мне нужно постоянно передавать положения перемещающейся по форме картинки (мячик). делаю так сервер: procedure...

Компонент частично находится на другом компоненте, надо изменить визуальное положение
Нормальный заголовок сформулировать не смог &gt;_&gt; В общем, создаю динамически PictureBox'ы и присваиваю им картинки, создаю их сверху...

Посоветуйте пожалуйста! Как мне в компоненте ComboBox2 Организовать смену шрифтов в компоненте Memo1?
Всем заранее спасибо!!!!!!! void __fastcall TForm1::ComboBox2Change(TObject *Sender) { }

Положение картинки
Добрый вечер. Подскажите, пожалуйста. Есть табличка. Необходимо вставить в ячейку этой таблицы картинку, что бы она была в правом нижнем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru