Hallo mischo22,
Du speicherst die Script-Objekte nicht in den Variablen:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
// Einmalig die Maps initialisieren
if MapScript1=nil then
TScript.Create(WebBrowser1).LoadAPIAsync(InitMap); //<- Script wird erstellt, aber nicht in MapScript1 gespeichert
if MapScript2=nil then
TScript.Create(WebBrowser2).LoadAPIAsync(InitMap); //<- selbe Problem
end;
Die Lösung sollte sein:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
// Einmalig die Maps initialisieren
if MapScript1=nil then
begin
MapScript1:=TScript.Create(WebBrowser1);
MapScript1.LoadAPIAsync(InitMap);
end;
if MapScript2=nil then
begin
MapScript2:=TScript.Create(WebBrowser2);
MapScript2.LoadAPIAsync(InitMap);
end;
end;
Allerdings kannst Du Dir auch das Speichern der Script-Objekte sparen - das erfolgt schon frameworkintern:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
// Einmalig die Maps initialisieren
if Script(WebBrowser1)=nil then
with TScript.Create(WebBrowser1) do
LoadAPIAsync(InitMap);
if Script(WebBrowser2)=nil then
with TScript.Create(WebBrowser2) do
LoadAPIAsync(InitMap);
end;
Um später auf das Objekt zugreifen zu können, reicht
Delphi-Quellcode:
with Script(WebBrowser1) do
begin
Maps[0].Zoom:=17;
Maps[0].Center:=New(Google.Maps.LatLng(50,10)); //<- New-Funktion verwenden
Maps[0].MapTypeID:=Google.Maps.MapTypeId.SATELLITE;
end;
Wer Angst vor dem angeblich bösen "with" hat, macht es so:
Delphi-Quellcode:
Script(WebBrowser1).Maps[0].Zoom:=17;
Script(WebBrowser1).Maps[0].Center:=New(Script(WebBrowser1).Google.Maps.LatLng(50,10)); //<- New-Funktion verwenden
Script(WebBrowser1).Maps[0].MapTypeID:=Script(WebBrowser1).Google.Maps.MapTypeId.SATELLITE;
Allerdings mußt Du bei der Erstellung von Hilfsobjekten momentan noch beachten, daß dabei ebenfalls das Script-Objekt als Parameter angegeben wird:
Delphi-Quellcode:
procedure TForm1.InitMap(Sender: TObject);
var
Map: TMap;
MapOptions: TMapOptions;
MarkerOptions: TMarkerOptions;
begin
with Sender as TScript do //<- hier eventuell schon einmal den harten Cast für Version 3 vermeiden (das geht nicht gut mit Interfaces)
begin
MapOptions:=TMapOptions.Create(Sender as TScript); //<- hier das Script-Objekt als Parameter angeben
with MapOptions do
begin
DisableDefaultUI:=true;
DisableDoubleClickZoom:=true;
Draggable:=false;
ScrollWheel:=false;
KeyboardShortcuts:=false;
MapTypeID:=Google.Maps.MapTypeId.Roadmap;
Zoom:=1;
Center:=New(Google.Maps.LatLng(0,0)); //<- New-Funktion verwenden
end;
Map:=New(Google.Maps.Map(MapOptions)); //<- Karte für den Marker merken
// Marker Zeichnen
MarkerOptions:=TMarkerOptions.Create(Sender as TScript); //<- hier ebenfalls das Script-Objekt angeben
MarkerOptions.Map:=Map; //<- hier die Variable Map verwenden - sonst wird noch eine weitere Karte angelegt
MarkerOptions.Position:=New(Google.Maps.LatLng(53,8)); //<- New-Funktion verwenden
MarkerOptions.Title:='Letzte Position';
New(Google.Maps.Marker(MarkerOptions));
end;
end;
In der Version 3 wird es für diese Hilfsobjekte ebenfalls eine passende New-Funktion geben, so daß dann die Sache noch etwas einfacher wird:
Delphi-Quellcode:
with Sender as IScript do
begin
MapOptions:=New(Google.Maps.MapOptions);
[...]
end;