Du müßtest das Info-Fenster an den Marker "binden". Ab Delphi 2009 geht das sehr komfortabel über anonyme Methoden. Ansonsten könntest Du die
Data-Eigenschaft des Markers nutzen und dort das InfoWindow-Objekt ablegen (vergleichbar mit
TListItem.Data):
Delphi-Quellcode:
Marker.Data:=InfoWindow;
[...]
Die Anzeige im MarkerClick-Ereignis ist dann einfach:
Delphi-Quellcode:
[...]
var
Marker: TMarker;
InfoWindow: TInfoWindow;
begin
Marker:=Sender as TMarker;
InfoWindow:=(Marker.Data) as TInfoWindow;
if assigned(InfoWindow)
then InfoWindow.Open(Marker.GetMap,Marker);
end;
Wobei ich bei diesem Tip etwas Bauchschmerzen habe, da ich noch nicht 100%ig weiß, ob das
Data-Property noch in der kostenlosen Personal-Edition der nächsten Version vorkommen wird. Eigentlich sollen dort nur Objekte, Eigenschaften und Methoden enthalten sein, die auch im Google Maps
API dokumentiert sind. Delphi "Komfort"-Funktionen (wozu auch die
Data- und die
Tag- Eigenschaft gehören) sollen eigentlich der Professional- und Enterprise-Edition vorbehalten sein. Da muß ich noch etwas darüber schlafen...
Ansonsten könntest Du natürlich auch ein Array mit allen Marker-InfoWindow-Paaren aufbauen und darüber die Zuordnung realisieren:
Delphi-Quellcode:
type
TMarkerData = record
Marker: TMarker;
InfoWindow: TInfoWindow;
end;
var
MarkerData: array[0..x] of TMarkerData;
Desweiteren würde ich empfehlen, als Cast nur den
as
-Operator zu verwenden, da zukünftig Interfaces genutzt werden und damit die Umstellung schneller geht (
IMarker(Sender) geht dann nämlich schief):
Delphi-Quellcode:
//bisher:
procedure TForm1.MarkerClick(Sender: TObject; Event: TEvent);
begin
with Sender as TMarker do
begin
end;
end;
//zukünftig:
procedure TForm1.MarkerClick(Sender: IObject; Event: IEvent);
begin
with Sender as IMarker do
begin
end;
end;