Hallo Thom
Bin gerade weiter dabei die Karte in meine Anwendung zu integrieren.
Was mir nicht ganz klar ist wie kann ich das InfoWindow einem Marker zuordnen?
Beim Marker erscheint immer das erste InfoWindow, was eigentlich auch klar ist
da ich ja dies aufrufe
Infowindows[0].Open(Maps[0],Marker);
.
Stecke hier ein wenig fest....
mit folgendem code werden die Marker gesetzt:
Delphi-Quellcode:
procedure Tfrm_map.btn_Encode_batchClick(Sender: TObject);
var
LatLng: TLatLng;
Lat, Lng, InfoWindow_String: String;
InfoWindow: TInfoWindow;
Marker: TMarker;
MarkerOptions: TMarkerOptions;
begin
with Script do
begin
Marker:=nil; //falls keine Daten in der Tabelle vorliegen
DM_map.Map.First;
while not DM_map.Map.Eof do
begin
if DM_map.Map.FieldByName('POS_LAT').Text = '' then
DM_map.Map.Next
else
Lat:=DM_map.Map.FieldByName('POS_LAT').Text;
Lng:=DM_map.Map.FieldByName('POS_LNG').Text;
InfoWindow_String:=(
//
DM_map.Map.FieldByName('AREA').AsString + '<br>'+
DM_map.Map.FieldByName('NAME').AsString + '<br>'+
DM_map.Map.FieldByName('STR').AsString + '<br>'+
DM_map.Map.FieldByName('PLZ').AsString + '-'+
DM_map.Map.FieldByName('CITY').AsString + '<br>'+'TEL:' +
DM_map.Map.FieldByName('TEL').AsString + '<br>'+'______________________ <br>'+'Camp ' + '- '+
DM_map.Map.FieldByName('C_NO').AsString);
//
LatLng:=New(Google.Maps.LatLng(StrToFloatDef(Lat,0,'.'),
StrToFloatDef(Lng,0,'.')));
InfoWindow:=New(Google.Maps.InfoWindow);
InfoWindow.Content:=InfoWindow_String;
MarkerOptions:=TMarkerOptions.Create;
with MarkerOptions do
begin
Map:=Maps[0];
Position:=LatLng;
MarkerOptions.Title:= DM_map.Map.FieldByName('NAME').AsString;
end;
Marker:=New(Google.Maps.Marker(MarkerOptions));
Marker.OnClick:=MarkerClick;
MarkerOptions.Free; //momentan noch etwas auf den Speicher achten
//-> in der neuen Version stelle ich auf Interfaces um,
//so daß die Freigabe automatisch erfolgt
LatLng.Free; //gleicher Grund
DM_map.Map.Next;
end;
if assigned(Marker)
then Maps[0].SetCenter(Marker.GetPosition); //nur den letzten Marker zentrieren
end;
end;
Delphi-Quellcode:
procedure Tfrm_map.MarkerClick(Sender: TObject; Event: TEvent);
var
Marker: TMarker;
Text: String;
begin
with Script do
begin
Marker:=TMarker(Sender);
// Text:=Marker.Properties['PlaceName'];
// Infowindows[0].SetContent(Text);
Infowindows[0].Open(Maps[0],Marker);
end;
end;