Einzelnen Beitrag anzeigen

HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#292

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

  Alt 30. Okt 2012, 16:11
Hallo Thom!


Ich habe ein paar Anfängerfragen zu dem genialen Framework. Leider begreife ich das Konzept dahinter noch nicht ganz. Vielleicht hast Du Zeit und Lust, ein paar Grundlagen zu erklären?

Mein Unverständnis fängt schon an beim FormShow der Demo-Routinen. Basierend auf der Demo "Overlay / Marker Simple":

Code:
procedure TForm1.FormShow(Sender: TObject);
begin
  if Script=nil then with TScript.Create(WebBrowser1) do LoadAPIAsync(InitMap);
end;
Wieso gibt die Funktion Script hier nil zurück, so dass der WebBrowser1 korrekt zugeordnet wird? Die Funktion scheint doch ein TCustomScript-Objekt zu erzeugen und zurückzugeben?

Ich verstehe auch nicht, was beim Aufruf "LoadAPIAsync(InitMap)" der Prozedur InitMap als Sender übergeben wird, so dass die Anweisung "with TScript(Sender)" mit Sinn erfüllt wird. Sehr kryptisch für mich.

In den Demo-Routinen werden die mit New() erzeugten Objekte MyMap oder Marker nur lokal verwendet und nicht freigegeben. Muss man auch zusätzlich erzeugte TMarker-Objekte nicht freigeben? Kümmert sich darum wirklich das Framework vollautomatisch?

Wäre die folgende Routine so korrekt in Deinem Sinne programmiert, um einen weiteren Marker einzufügen:

Code:
TForm1= ...
  private
    MyMap : TMap;
    Marker2 : TMarker;

procedure TForm1.Button1Click(Sender: TObject);
  var MarkerOptions: TMarkerOptions;
begin
  with Script do begin
    MarkerOptions := TMarkerOptions.Create;
    with MarkerOptions do begin
 Position:=New(Google.Maps.LatLng(-25.363882,131.044922));
      Map:=MyMap;
    end;
    Marker2 := New(Google.Maps.Marker(MarkerOptions));
  end;
end;
Muss ich auch Marker2 nicht selbst freigeben?

Wie würde ich die FormShow-Routine erweitern müssen, um ZWEI separate TWebBrowser-Objekte gleichzeitig verwenden zu können? Geht das überhaupt?
  Mit Zitat antworten Zitat