Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
0 / 0 / 1
Регистрация: 02.03.2016
Сообщений: 5

Процедура: при клике на изображение найти расстояние между центром этого и центром другого изображения

02.03.2016, 14:20. Показов 1475. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
При клике на изображение1 высчитывается длина между центром этого изображения и центром изображения2.
Если расстояние между 2я точками меньше определенного, то изображение2 помещается на изображение1.
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
'______________________________________________________________________
Function XYlong(ByVal Xa As Integer, ByVal Ya As Integer, ByVal Xb As Integer, ByVal Yb As Integer) As Integer
XYlong = Int(Sqr(Abs(((Xb - Xa) ^ 2) + ((Yb - Ya) ^ 2))))
End Function
'____________________________________________________________________________________
Function centr(ByVal a As Integer, ByVal b As Integer) As Inte
centr = (a - b) / 2
End Function
'__________________________________________________________________________
 
Private Sub p11_Click() ' p11 - изображение1
Dim a, b, c, d, i As Integer
 
a = Int((pp.Left + pp.Width / 2))   ' координата Х точки в центре второго изображения
b = Int((pp.Top + pp.Height / 2))   ' координата У точки в центре второго изображения
c = Int((p11.Left + p11.Width / 2)) ' координата Х точки в центре первого изображения
d = Int((p11.Top + p11.Height / 2)) ' координата У точки в центре первого изображения
k = Val(Text1.Text)
Text2.Text = XYlong(a, b, c, d) ' функция, высчитывающая расстояние между двумя точками по координатам
 
 
If k > 0 Then
    If XYlong(a, b, c, d) < 1600 Then
        k = k - 1
        pp.Left = p11.Left + centr(p11.Width, pp.Width) '| Перемещение изображения2 на изображение 1
        pp.Top = p11.Top + centr(p11.Height, pp.Height) '| --------------------------------------------------------
    End If
Text1.Text = k
Else
MsgBox ("нет хода")
End If
 
End Sub
'______________________________________________________________________
И вопрос у меня такой: Как сделать, что б не пришлось прописывать событие каждого изображения? Изображение2 будет в зависимости от расстояния перемещаться на другие изображения (а их может быть много).
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2016, 14:20
Ответы с готовыми решениями:

Определить функцию, возвращающую расстояние между центром окружности и началом координат
Разработать класс Point для задания координаты точки на плоскости. Выбирая этот класс в качестве базового, разработать производный класс...

Ссылка на изображение внутри объекта массива и отображение этого изображения при клике на кнопку VUE JS
Есть массив объектов, при клике на кнопку РАНДОМ который перебирается и отображает в отдельном блоке картинку. Ожидалось поведение такое,...

Массив: Найти точку из этого множества, которая являлась бы центром окружности с минимальным радиусом.
Дано множество A из N точек с координатами (x,y). Найти точку из этого множества, которая являлась бы центром окружности с минимальным...

8
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
02.03.2016, 15:20
Вариантов много, первое что приходит на ум-загнать их в массив, и написать универсальную функцию.
1
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
03.03.2016, 12:18
Или методом перебора контролов
Visual Basic
1
For each c in controls
перебирать все контолы и выпонять процедуру для избранных ( удовлетворяющих какому-то критерию: типу, части имени, значению Tag...)
1
0 / 0 / 1
Регистрация: 02.03.2016
Сообщений: 5
03.03.2016, 21:40  [ТС]
Я написал процедуру, для всех этих действий:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub Perenos(ctrl As Control, pp As Control)
Dim a, b, c, d, dl As Integer
 
    
    If TypeOf ctrl Is Image Then
        a = Int((pp.Left + pp.Width / 2))   ' координата Х точки в центре первого изображения
        b = Int((pp.Top + pp.Height / 2))   ' координата У точки в центре первого изображения
        c = Int((ctrl.Left + ctrl.Width / 2)) ' координата Х точки в центре второго изображения
        d = Int((ctrl.Top + ctrl.Height / 2)) ' координата У точки в центре второго изображения
        dl = XYlong(a, b, c, d)
        If k > 0 Then
            If dl < 1600 Then
                k = k - 1
                pp.Left = ctrl.Left + centr(ctrl.Width, pp.Width) ' Перемещение изображения 1 на изображение 2
                pp.Top = ctrl.Top + centr(ctrl.Height, pp.Height) '
            End If
            Text1.Text = Str(k)
        Else
            MsgBox ("Нет свободных ходов!")
        End If
    End If
End Sub
На событие клика по изображению прописываю:
Visual Basic
1
2
3
Private Sub p11_Click()
  Call Perenos(Form1.p11, Form1.pp)
End Sub
Мне нужно именно событие по клику на различные изображения.
В этом случае мне придется для всех 30-100 изображений прописывать событие клика...
Есть ли вариант определения контрола, на который пришелся клик мышки?
0
 Аватар для Alex77755
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
03.03.2016, 22:36
Есть ли вариант определения контрола,
Это же не VBA! там сложнее.
В бейсике достаточно создать массив контролов.
И тогда сам бейсик укажет индекс контрола, на который пришелся клик мышки?
и создаст процедуру для массива контролов типа:
Visual Basic
1
2
3
Private Sub Рисунок1_Click(Index As Integer)
 
End Sub
Добавлено через 3 минуты
А вообще лучше выложил бы сюда свой проект и уже давно бы помогли. А так сложно понять
2
70 / 62 / 19
Регистрация: 03.05.2013
Сообщений: 397
03.03.2016, 22:43
Цитата Сообщение от dima10021992 Посмотреть сообщение
В этом случае мне придется для всех 30-100 изображений прописывать событие клика...
-если это самоцель, то можно создать класс с твоими 100 изображениями и райзить свой эвент в их эвентах, будет те "Мультисобытие".
Цитата Сообщение от dima10021992 Посмотреть сообщение
Есть ли вариант определения контрола, на который пришелся клик мышки?
так же в классе делается.
0
0 / 0 / 1
Регистрация: 02.03.2016
Сообщений: 5
04.03.2016, 00:24  [ТС]
Прикрепляю исходник
Вложения
Тип файла: zip project.zip (31.3 Кб, 5 просмотров)
0
es geht mir gut
 Аватар для SoftIce
11274 / 4760 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
04.03.2016, 05:42
Лучший ответ Сообщение было отмечено The trick как решение

Решение

project.rar
1
0 / 0 / 1
Регистрация: 02.03.2016
Сообщений: 5
04.03.2016, 10:37  [ТС]
Спасибо за помощь! Элементарного не увидел, так и тупил бы дальше)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.03.2016, 10:37
Помогаю со студенческими работами здесь

Найти кратчайшее расстояние от произвольной точки плоскости с координатами X, Y до контура четвертинки окружности с центром в начале координат
«Программы разветвленной структуры» Найти кратчайшее расстояние от произвольной точки плоскости с координатами X, Y до контура...

Найти площадь между кругами радиусов r1 и r2 с общим центром
только начали изучать php, а уже дают такие задание, я да не пойму что от меня требуеться, и если разобратся то в С++ можно то сделать а...

Найти площадь кольца, заключенного между двумя окружностями с общим центром
Описать функцию RingS(R1, R2) вещественного типа, находящую площадь кольца, заключенного между двумя окружностями с общим центром и ...

Найти разность потенциалов между центром шара и точками,лежащими на поверхности
Сплошной шар радиусом 10 см заряжен равномерно зарядом 2 нКл. Найти разность потенциалов между центром шара и точками,лежащими на...

Найти площади кругов с общим центром, а так же площадь кольца между ними
Вот само задание: Даны два круга с общим центром и радиусами R1 R2(R1&gt;R2).Найти площади этих кругов S1 и S2 а так же площадь S3 кольца,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru