Einzelnen Beitrag anzeigen

Thom

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

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

  Alt 20. Nov 2011, 20:16
Hallo Stefan,

vielen Dank für das Lob und die Spende! Ich werde so schnell wie möglich die Bonus-Units an Dich abschicken.

Delphi-Quellcode:
function Script(Browser: TOleControl = nil): TScript;
//...
ist eine Funktion aus der Unit gmAPI, die das aktuelle Script-Objekt liefert (falls der Aufruf ohne Parameter erfolgt - das reicht aus, wenn nur eine TWebBrowser-Komponente verwendet wird) oder das zu einem bestimmten IE-ActiveX gehörende Script-Objekt.
Dadurch braucht dieses Objekt nicht lokal gespeichert zu werden.
Wird jetzt
Delphi-Quellcode:
if Script=nil then [...];
if assigned(Script(WebBrowser1)) then [...];
//oder
Script.xxx;
verwendet, darf keine lokale Variable mit diesem Namen existieren oder es muß der Unitname angegeben werden:
Delphi-Quellcode:
if gmAPI.Script=nil then [...];
if assigned(gmAPI.Script(WebBrowser1)) then [...];
//oder
gmAPI.Script.xxx;

Die Methode InitMap (kann auch beliebig anders heißen) ist - zumindest bis Delphi 2007 - ein reguläres TNotifyEvent mit folgendem Aufbau:
Delphi-Quellcode:
procedure TForm1.InitMap(Sender: TObject);
begin
  with TScript(Sender) do
  begin
    Google.Maps.xxx; //-> Zugriff auf das Script-Objekt
  end;
  [...]
  TScript(Sender).Google.Maps.xxx; //-> Zugriff ohne with-Statement
end;
Die Funktionsweise kann man sich so vorstellen:
Um Zugriff zur JavaScript-Engine des Browsers zu erhalten, muß ein TScript-Objekt angelegt werden. Das geschieht unter Angabe der Browser-Komponente:
Delphi-Quellcode:
TScript.Create(WebBrowser1);
//...
Über dieses Script-Objekt erfolgen dann alle weiteren Zugriffe auf das Google Maps API. Das muß aber erst noch geladen werden:
Wird eine der Funktionen LoadAPI(InitMap) oder LoadAPIAsync(InitMap) des Script-Objektes aufgerufen, lädt das Framework das JavaScript-API unter Verwendung der gewünschten Parameter von den Google-Servern. Wurde das API von der Browser-Komponente vollständig geladen, wird vom Framework die angegebene Methode InitMap aufgerufen und als Parameter Sender das Script-Objekt übergeben, damit die Karte erstellt werden kann. Das entspricht zum Beispiel dem Verhalten eines Buttons, wenn durch Doppelklick oder im Objekt-Inspektor eine OnClick-Methode angelegt wurde und der Button zu Laufzeit betätigt wird.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (21. Nov 2011 um 13:21 Uhr)
  Mit Zitat antworten Zitat