Карта
Как сделать чтобы если пользователь щелкунл по Египту выделялись границы Египта, если по Каиру - границы Каира.
Желательно пример или соответствующая дкументация.
Допустим есть карта Африки
Как сделать чтобы если пользователь щелкунл по Египту выделялись границы Египта, если по Каиру - границы Каира.
Желательно пример или соответствующая дкументация.
Я такое делал с картой Москвы. Может не очень эфективно, но работает.
1. В программе MapEdit (она шариварная можно найти в инете) обрисовал все районы и сохранил в текстовом файле координаты углов получившихся полигонов (многоугольников)
2. Для каждого района сделал картинку с выделением и загрузил их в ImageList
3. Далее обрабатывал сообщение на компоненте OmMouseMove и в зависимости от положения мышки менял картинку на компоненте. В вашем случае, на сколько я понял, надо обрабатывать сообщение OnClick.
P.S. Если надо могу дать алгоритм как определить, на каком полигоне в данный момент находится мышка.
Угу если нетрудно можно с маленьким примером
Пример великоват будет. Пэтому если хочешь его лицезреть, долбись мне на мыло я тебе вышлю.
А идея примерно такая. Полигоны описываются массивом точек
A[0].X := 0;
A[0].Y := 0;
A[1].X := 5;
....
A[n].X := A[0];
A[n].Y := A[0];
Массив можно читать из файла. Далее берем произвольную точку, которая ну никак не может находиться в полигоне и проводим прямую между этой точкой и положением указателя мышки. Далее
считаем сколько раз эта прямая пересечет отрезки:
A[0]-A[1], A[1]-A[2],... A[n-1]-A[n]
Если получим четное число, то курсор находится все этого полигона и переходим к следующему. А если нечетное, то курсор находится в полигоне.
Пример великоват будет. Пэтому если хочешь его лицезреть, долбись мне на мыло я тебе вышлю.
А идея примерно такая. Полигоны описываются массивом точек
A[0].X := 0;
A[0].Y := 0;
A[1].X := 5;
....
A[n].X := A[0];
A[n].Y := A[0];
Массив можно читать из файла. Далее берем произвольную точку, которая ну никак не может находиться в полигоне и проводим прямую между этой точкой и положением указателя мышки. Далее
считаем сколько раз эта прямая пересечет отрезки:
A[0]-A[1], A[1]-A[2],... A[n-1]-A[n]
Если получим четное число, то курсор находится все этого полигона и переходим к следующему. А если нечетное, то курсор находится в полигоне.
Это классическая задача теории фрактальных множеств. Поиск по инету со словом фрактал даст большой объем литературы и примеров.