При работе с Google Maps API в среде RAD Studio 10.2 на компоненте TWebBrowser пользователи могут столкнуться с проблемой, когда при попытке отобразить линии (Polyline) на карте возникает ошибка "Script Error". В данной статье мы рассмотрим, как можно решить данную проблему, основываясь на реальном случае, описанном пользователем.
Описание проблемы
Пользователи, начинающие работу с Delphi и Google Maps API, сталкиваются с трудностями при попытке отрисовки линий на карте, получая координаты из базы данных. При использовании объекта Polyline в коде JavaScript возникает ошибка, указывающая на "Script Error".
Контекст и решение проблемы
Для решения проблемы необходимо выполнить два основных шага:
Порядок загрузки скриптов: Убедитесь, что скрипт, в котором определена функция initMap, загружается перед подключением библиотеки Google Maps API. Это гарантирует, что функция будет доступна для вызова при загрузке карты.
Режим эмуляции IE 11 для TWebBrowser: В некоторых случаях для корректной работы карты необходимо установить режим эмуляции Internet Explorer 11 для встроенного компонента TWebBrowser. Это можно сделать, добавив запись в реестр Windows, где указывается имя вашего исполняемого файла и значение 11000, соответствующее режиму IE11.
Пример кода
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.OleCtrls, SHDocVw, MSHTML ;
type
TForm2 = class(TForm)
WebBrowser1: TWebBrowser;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
Doc: Variant;
HTMLWindow2: IHTMLWindow2;
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
var
HTMLStr: AnsiString =
'<!DOCTYPE html>' +
// ... (HTML код и JavaScript функция initMap)
' </html>';
procedure TForm2.FormCreate(Sender: TObject);
begin
if NOT Assigned(WebBrowser1.Document) then
WebBrowser1.Navigate('about:blank');
Doc := WebBrowser1.Document;
Doc.Clear;
// Важно: скрипт с функцией initMap должен идти перед подключением API
Doc.Write(HTMLStr);
Doc.Close;
HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;
end;
end.
Дополнительные советы
Проверьте, что ваш ключ API Google Maps действителен и правильно вставлен в код.
Убедитесь, что вы используете актуальную версию RAD Studio и всех необходимых компонентов.
В случае возникновения дополнительных ошибок, проверьте консоль разработчика в браузере на предмет сообщений об ошибках.
Заключение
Следуя этим шагам, вы сможете успешно отобразить карту Google Maps с Polyline в приложении, созданном на Delphi. Обратите внимание на порядок загрузки скриптов и настройку режима эмуляции IE 11 для TWebBrowser, что является ключевым для решения описанной проблемы.
Проблема отображения карты Google Maps с Polyline в Delphi связана с некорректным порядком загрузки скриптов и возможной необходимостью эмуляции IE 11 для TWebBrowser.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.