Аватар для aptos
13 / 13 / 3
Регистрация: 04.06.2013
Сообщений: 156

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

19.04.2014, 22:32. Показов 1503. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru