Einzelnen Beitrag anzeigen

Thom

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

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

  Alt 29. Aug 2012, 14:35
Ja, Du hast vollkommen Recht:
Momentan hat die New-Funktion keinerlei Bedeutung - sie gibt lediglich den Eingangsparameter als Resultat zurück. Sie dient hier nur dazu, den Quelltext etwas leserlicher zu gestalten, indem darauf hingewiesen wird, daß ein neues Objekt angelegt wird/wurde. So erstellt die Funktion Google.Maps.LatLng(...) ein neues TLatLng-Objekt, was aber nicht sofort offensichtlich ist.
Insofern kann die New-Funktion momentan auch ohne Bedenken weggelassen werden.

Das wird sich aber in der kommenden Version grundlegend ändern: Dann wird das Objekt wirklich erst von der New-Funktion erstellt, die dann etwa wie der New-Operator in JavaScript arbeitet.
So liefert - um bei dem Beispiel zu bleiben - Google.Maps.LatLng nur die Klasse und New() erstellt eine Instanz. Das Ganze dient - wie schon erwähnt - der Lesbarkeit des Quelltextes.
Auch Hilfsobjekte werden dann über die New-Funktion erstellt, so daß der Delphi-typische Syntax TObject.Create bei der Verwendung des Frameworks überflüssig wird:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  with Script(WebBrowser1) do
    if not APILoaded
      then LoadAPIAsync(InitMap);
end;

procedure TForm1.InitMap(Sender: IObject);
var
  MapOptions: IMapOptions;
begin
  with Sender as IScript do
  begin
    MapOptions:=New(Google.Maps.MapOptions);
    with MapOptions do
    begin
      Zoom:=8;
      Center:=New(Google.Maps.LatLng(-34.397,150.644));
      MapTypeID:=Google.Maps.MapTypeID.Roadmap;
    end;
    New(Google.Maps.Map(MapOptions));
  end;
end;
Zu beachten ist hier, daß die Objekte nur noch über Interfaces angesprochen werden, was der besseren Speicherverwaltung dient.
Thomas Nitzschke
Google Maps mit Delphi

Geändert von Thom (29. Aug 2012 um 14:44 Uhr)
  Mit Zitat antworten Zitat