Einzelnen Beitrag anzeigen

Thom

Registriert seit: 19. Mai 2006
570 Beiträge
 
Delphi XE3 Professional
 
#299

AW: Google Maps über COM (Component Object Model)

  Alt 1. Nov 2012, 22:08
Danke, das hört man gern!

Ja - das kann nicht funktionieren. Das API (genauer gesagt: die JavaScript-Bibliothek) muß erst von den Google-Servern geladen werden. Das dauert natürlich je nach Internetverbindung, Serverauslastung und Rechnergeschwindigkeit eine Weile.
Die Methode LoadAPIAsync() führt diesen Vorgang durch und ruft anschließend die Methode InitMapProc (die übergebene Callback-Methode) auf. Erst zu diesem Zeitpunkt wurde das API vollständig geladen und die (JavaScript-)Objekte Google und Maps angelegt. Vorher existieren sie nicht und der Zugriff darauf führt zu einer Zugriffsverletzung bzw. Exception.
Lädst Du das API asynchron, hat das den Vorteil, daß Deine Anwendung inzwischen weiter initialisiert und die Fenster angezeigt werden können.

Die zweite Möglichkeit besteht im blockierenden Laden des API's über die Methode LoadAPI() (also ohne Async). Diese Funktion kehrt erst nach der kompletten API-Initialisierung zurück und blockiert damit natürlich den Hauptthread. Das würde ich nicht empfehlen - deshalb wird in sämtlichen Demos die Methode LoadAPIAsync() verwendet.

Schreibst Du also
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if Script=nil then with TScript.Create(WebBrowser1) do LoadAPI(InitMap);
  MakeMarker;
end;
, dann sollte es funktionieren.
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat