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.