2017-10-12 1 views
0

私はDelphiでプログラミングを開始したばかりで、Google Map Apiに問題があります。私はGoogleマップでフォームを持って、それに線を描きたい(dbからの座標)。残念なことに、マップに「ポリライン」を配置しようとすると、エラーが発生します。Delphi + Google Map Api:ポリラインを使用すると「スクリプトエラー」が発生する

Line: 0

Char: 0

Error: Script error

Code: 0

Url: 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. 
+1

の値にDWORD値を追加します。動作しません。ここでは、デルファイアプリケーションでGoogleマップを使用する方法の例をいくつか挙げてお答えします:https://stackoverflow.com/questions/10843029/google-maps-non-web-access私は、ラッパーを使用することを提案する答えの1つをエコーし​​ます。個人的に私は市販のTMS WebGMapsラッパーを使用します。 –

+0

GmLibを使用していますか? –

+0

@ MarkElderコードのサンプルを提供していないのは残念です。それは今終わった。 –

答えて

0

2つの必要な変更がある実行するためにあなたのサンプルを取得するには:

1)
スクリプトタグを交換= "httpsのラインスクリプトsrcを置きます: //maps.googleapis.com/....次のスクリプトブロックの後initMap関数をロードしてからGoogleマップAPIを読み込む必要があります。そうでない場合は、initMap関数を探して見つけられません。

この変更を行うと、地図が線なしで読み込まれます。しかし、地図の上にブラウザがサポートされていないというエラーが表示されます。

これをDelphiで実行すると、エラーメッセージがクリアされません。しかし、埋め込みHTMLテキストをファイルに保存してChromeで開くと、javascriptコンソールにこのエラーメッセージが表示されます。

2)埋め込みTWebBrowserのIE 11モードを有効にします。
私のプロジェクトでは、doctypeやmetaタグを取得してIEを正しく動作させることができませんでした。ただし、エミュレーションモードのレジストリフラグを設定しても機能しませんでした。フラグは、実行可能ファイル名に基づいて設定する必要があります。 Internet Feature Controls (B..C)、ブラウザのエミュレーション]セクションの下:私は

"11000": IE11. Webpages containing standards-based !DOCTYPE directives are displayed in IE11 edge mode. Default value for IE11.

レジストリキーに関する情報はMDSNのヘルプページにあるの値を使用します。

はまた、あなたがレジストリの場所に注意を払うことを確認してくださいこのStackOverflowのポスト「How to have Delphi TWebbrowser component running in IE9 mode?

にいくつかの議論を見ることができます。これはローカルマシンであるため、アプリケーションが64ビットOS上で32ビットで動作する場合は、WOW6432Nodeの下にある必要があります。

HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 

あなたはそのコードの完全な例を掲示せず、ここで答えを取得する可能性はありませんあなたのexe(「Project1.exeの」など)の名前と11000

+0

答えてくれてありがとうございます@MarkElder。私はあなたが提案した変更を行い、それは働いています!もちろん、私は間違った場所にレジストリを置いていましたが、2番目のアプローチでは正しく作っています! :) –

関連する問題