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

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

02.03.2016, 14:20. Показов 1513. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru