Нахождение окружности по координатам на форме

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vlad_Ginz
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 17.04.2004 (Сб) 0:19

Нахождение окружности по координатам на форме

Сообщение Vlad_Ginz » 05.06.2004 (Сб) 1:38

Есть несколько окружностей разного диаметра на форме, созданных программой во время выполнения.
Т.к. нет обработки событий при нажатии "мышкой" на окружность, то как поймать нужную окружность для определения координат ее центра и радиуса ?

Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Сообщение Shurrik » 05.06.2004 (Сб) 5:19

Попробуй при создании своих окружностей сохранить в массиве три числа: две координаты центра и радиус. Потом при клике на форму сравниваешь в цикле все свои координаты с координатами мышки.
a=(x(i)-x)^2+(y(i)-y)^2 - это квдрат растояния от центра i-той окружности до координаты мышки и если он меньше чем r(i)^2, то мышка внутри i-той окружности.
Колесо: Хочешь жить? Умей вертеться.

Vlad_Ginz
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 17.04.2004 (Сб) 0:19

Сообщение Vlad_Ginz » 07.06.2004 (Пн) 0:55

Ответ Shurrik-у:
Дело в том, что я в программе создаю окружности
аналогично тому, как это происходит в дизайне.
Т.е. , увеличиваю или уменьшаю размеры окружностей за счет перемещения маркеров и, следовательно, заранее не знаю координат центра и радиусов.
Моя задача обнаружить Shape на форме во время выполнения программы, как это происходит при создании дизайна форм.

Shurrik
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 110
Зарегистрирован: 20.05.2004 (Чт) 5:35
Откуда: Керчь, Крым

Сообщение Shurrik » 07.06.2004 (Пн) 7:14

Вот готовый блок для тестирования:

Код: Выделить всё
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim sh As Control, r#, r2#, x0#, y0#
kk = Controls.Count ' количество ЭУ (элементов управления) на форме
For i = 1 To kk     ' перебираем их все
Set sh = Controls(i - 1) ' создали переменную
If TypeName(sh) = "Shape" Then ' проверяем тип ЭУ
    If sh.Shape = 3 Then       ' это круг, а не овал или еще что-то
        r = sh.Width / 2: r2 = sh.Height / 2
        x0 = sh.Left + r: y0 = sh.Top + r2   ' находим центр
        If r2 < r Then r = r2                ' находим радиус
        r2 = (X - x0) ^ 2 + (Y - y0) ^ 2 - r ^ 2 ' попали мышкой ?
        If r2 < 0 Then MsgBox "Круг  " & sh.Name, vbInformation
    End If
End If
Next i: Set sh = Nothing ' освободили переменную
End Sub
Колесо: Хочешь жить? Умей вертеться.

Vlad_Ginz
Новичок
Новичок
 
Сообщения: 41
Зарегистрирован: 17.04.2004 (Сб) 0:19

Сообщение Vlad_Ginz » 08.06.2004 (Вт) 11:08

Мог бы, конечно, и сам догадаться. Но всесильная вера в API, которую пока плохо знаю, подвела.
Спасибо за урок !
Тема закрыта !


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 3

    TopList