我刚刚开始使用Delphi进行编程,我对Google Map Api有疑问。我想要一个带有谷歌地图的表格并在其上绘制线条(来自数据库的坐标)。不幸的是,当我尝试将Polyline'在地图上错误发生错误。
行:0
Char:0
错误:脚本错误
代码:0
网址:https://maps.googleapis.com/maps-api-v3/api/js/29/14b/intl/pl_ALL/poly.js
不知道如何修复它。
仅供参考我使用RAD Studio 10.2并使用TWebBrowser组件。
我的代码:
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 xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">' +
' <head>' +
' <meta http-equiv="X-UA-Compatible" content="IE=edge" /> ' +
' <style>' +
' #map {' +
' height: 400px;' +
' width: 100%;' +
' }' +
' </style>' +
' </head>' +
' <body>' +
' <h3>My Google Maps Demo</h3>' +
' <div id="map"></div>' +
' <script src="https://maps.googleapis.com/maps/api/js?v=3&key=***&callback=initMap"></script>'+
' <script>'+
' function initMap() {' +
' var map = new google.maps.Map(document.getElementById("map"), {' +
' zoom: 3,' +
' center: {lat: 0, lng: -180},' +
' mapTypeId: "terrain"' +
' });' +
' var flightPlanCoordinates = [' +
' {lat: 37.772, lng: -122.214},' +
' {lat: 21.291, lng: -157.821},' +
' {lat: -18.142, lng: 178.431},' +
' {lat: -27.467, lng: 153.027}' +
' ];' +
' var flightPath = new google.maps.Polyline({' +
' path: flightPlanCoordinates,' +
' geodesic: true,' +
' strokeColor: "#FF0000",' +
' strokeOpacity: 1.0,' +
' strokeWeight: 2' +
' });' +
' flightPath.setMap(map);' +
' }' +
' </script>' +
' </body>' +
'</html>';
procedure TForm2.FormCreate(Sender: TObject);
begin
if NOT Assigned(WebBrowser1.Document) then
WebBrowser1.Navigate('about:blank');
Doc := WebBrowser1.Document;
Doc.Clear;
Doc.Write(HTMLStr);
Doc.Close;
HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;
end;
end.
答案 0 :(得分:1)
要让您的样本运行,需要进行两项更改:
1)交换脚本标签
在下一个脚本块之后放行脚本src =&#34; https://maps.googleapis.com / .... 。在加载google maps api之前,需要加载initMap函数。否则它会查找initMap函数并找不到它。
进行更改后,您将看到没有该行加载的地图。但是,您会在地图上看到错误,指出浏览器不受支持。
在Delphi中运行此错误时,错误消息不明确。但是,如果您将嵌入的HTML文本保存到文件并在Chrome中打开,则可以在javascript控制台中看到此错误消息。
2)为嵌入式TWebBrowser启用IE 11模式。
在我的项目中,我永远无法获得doctype或meta标签以使IE正常运行。但是,设置仿真模式注册表标志确实有效。需要根据可执行文件名设置标志。我使用值
&#34; 11000&#34;:IE11。包含基于标准的网页!DOCTYPE指令是 以IE11边缘模式显示。 IE11的默认值。
有关注册表项的信息位于MDSN帮助页面中:Internet Feature Controls (B..C),位于浏览器仿真部分下。
您还可以在此StackOverflow帖子中看到一些讨论&#34; How to have Delphi TWebbrowser component running in IE9 mode?&#34;
确保注意注册表位置。因为这是本地计算机,如果您的应用程序在64位操作系统上运行32位,则需要在WOW6432Node下。
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION
使用您的exe名称添加DWORD值(例如&#34; project1.exe&#34;)和值11000。