Einzelnen Beitrag anzeigen

Thom

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

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

  Alt 22. Nov 2012, 15:47
Da mußt DU nichts aufrufen sondern das funktioniert nach dem Motto: Ruf' mich nicht an, ich rufe Dich an.
Du stellst nur das Interface bereit, das dann vom WebBrowser abgefragt wird, wenn es dem IE danach ist.

Die Exceptions werden ausgelöst, weil ein Objekt aus WebBrowser2 im WebBrowser1 genutzt werden soll. Das geht aber nicht, da die Gültigkeit der verwendeten Interfaces auf den jeweiligen Browser beschränkt ist.

Ein Beispiel dazu:
Wird mit TMarkerOptions.Create ein Objekt erstellt, geschieht das im Kontext des zuletzt erstellten Script-Objektes (was dann wahrscheinlich WebBrowser2 ist). Wird jetzt der Marker im WebBrowser1 mit New(Script(WebBrowser1).Google.Maps.Marker(MarkerO ptions)) oder implizit mit with Script(WebBrowser1) do New(Google.Maps.Marker(MarkerOptions)) erstellt, geht das aus den anfangs geschilderten Gründen schief.
Hier muß also auch das MarkerOptions-Objekt im entsprechenden Kontext erstellt werden. Um das zu steuern, muß in der Create-Methode das entsprechende Script-Objekt angegeben werden: TMarkerOptions.Create(Script(WebBrowser1)).

Da das mächtig umständlich ist, werden in Version 3 auch für alle Hilfsobjekte entsprechende New()-Funktionen eingeführt:
Delphi-Quellcode:
with Script(WebBrowser1) do
begin
  MarkerOptions:=New(Google.Maps.MarkerOptions);
  [...]
  New(Google.Maps.Marker(MarkerOptions));
end;
Damit "wissen" alle Objekte, zu welchem WebBrowser sie gehören sollen.

Bis dahin muß leider noch das entsprechende Script-Objekt als Parameter an den Constructor übergeben werden, wenn Objekte auf die herkömmliche Delphi-Art erstellt werden.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (22. Nov 2012 um 15:51 Uhr)
  Mit Zitat antworten Zitat