Форум Енот  

Вернуться   Форум Енот > Тематический > База Знаний
Изображения All Albums Справка Пользователи Календарь Сообщения за день

База Знаний Тематика: технические вопросы, нанотехнологии, инновации
Температура кипения: низкая
Запас прочности: практический опыт
Степень защиты: жесткая модерация

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Непрочитано 05.02.2011, 12:43   #1
Генералиссимус
Site Admin
енот-старожил
 
Аватар для масон
 
Регистрация: 18.01.2007
Адрес: В ЦРУ
Сообщений: 19,658
Репутация 672 [+/-]
По умолчанию Использование google maps API в GUI приложениях windows

Совсем недавно столкнулся с необходимостью использовать карты google в приложениях windows. Долго рыл мануалы, ибо задачка была не тривиальной. На сайте google.com много материала по данной тематике. Однако, в основном google maps API используется для добавления требуемого функционала на свой сайт. Здесь потребовалось добавить функционал в GUI приложение windows. Причем разработка ведется в среде RAD Studio 2009.

Я не буду останавливаться на инициализации карт google и особенностях библиотеки javascript от google. Я хочу коснуться только особенностях использования javascript в RAD Studio с помощью компоненты WebBrowser.

...
link href="http://code.google.com/apis/maps/documentation/javascript/examples/standard.css" rel="stylesheet" type="text/css"> /link
script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> script
...
div id="map_canvas" style="position:absolute; width:100%; height:100%; left:0px; top:0px;" /div

Инициализация карты:
//lon - долгота
//lat - широта
//obsrv - ссылка на Dispatch интерфейс, который передается в момент инициализации со стороны программы
function MapInit(lon, lat, obsrv)
{
var canvas = document.getElementById("map_canvas");
var myOptions =
{
zoom: 8,
center: new google.maps.LatLng(lat, lon),
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(canvas, myOptions);
google.maps.event.addListener(map, 'mousemove', map_mousemove);
google.maps.event.addListener(map, 'click', map_click);
observer = obsrv;
return 0;
}

Пусть, к примеру, требуется добавить объект "Точка" на карту. Это можно сделать следующим образом:

//id - идентификатор объекта (используется для управления объектом из вне)
//lon - долгота
//lat - широта
//text - текст, который отображается при наведении на маркер мышкой
function createMarker(id,lon,lat,text)
{
if (!map) return;
var myLatlng = new google.maps.LatLng(lat,lon);
var marker = new google.maps.Marker({
clickable:true,
draggable:true,
position: myLatlng,
map: map,
title:text

});
marker.type = "poly";
marker.markerdrag = markerdrag;
marker.id = id;
marker.markerclick = markerclick;
google.maps.event.addListener(marker,'drag',marker drag);
google.maps.event.addListener(marker,'click',marke rclick);
map.setCenter(myLatlng);
listmark.push(marker);
}


В RAD Studio, соответственно, необходимо определить dispatch интерфейс, который мы передаем скрипту что бы иметь возможность обратного вызова для обработки событий google maps.

Для вызова функций javascript можно использовать такую конструкцию:

CComPtr<IHTMLDocument2> doc;
CComPtr<IHTMLWindow2> win;
Variant ctrl;
HRESULT hr = WebBrowser2->Document->QueryInterface(&doc);
if (SUCCEEDED(hr)) hr = doc->get_parentWindow(&win); else return;
ctrl = (IDispatch*)win;
//Добавляем маркер на карту
ctrl.OleProcedure("createMark",id,lon,lat,Name);

Вот собственно и все
масон вне форума   Ответить с цитированием
Непрочитано 25.02.2011, 16:54   #2
Генералиссимус
енот-старожил
 
Регистрация: 20.01.2007
Сообщений: 12,435
Репутация 356 [+/-]
По умолчанию

забуть о винде со второго квартала раша централлизовано перезжает на линух.
------------
уже указ готов..на подписи лежит.
__________________
еще пока даже не-распяли..
поэтому и воскрешаться не буду...
Санечка вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 18:27.


Email связь: admin@moemnenie.club
Художники в Instagram:
    Дарья Сетевинец         Eve_Farb Ирина Дрозд        

Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
VBSilver style released under GPL by TC
Port of subSilver released by and copyright of phpBB
Рейтинг@Mail.ru