So - nach längerer Zeit aus aktuellem Anlaß wieder einmal eine kleine Demo zum Thema Events:
Rodrigo hat nämlich auf
Anfrage ein neues
Tutorial unter dem Titel
Using the Google Maps API V3 from Delphi – Part III Getting the latitude and longitude of a mouse click erstellt, das ich auch einmal unter Verwendung des Frameworks umgesetzt habe. Damit komme ich wieder vollkommen ohne JavaScript- und
HTML-Code aus, kann JavaScript-Ereignisse auf Delphi-Methoden umleiten und Werte direkt übergeben/übernehmen. Dadurch reduziert sich der Umfang des Quellcodes im Vergleich zu Rodrigos Variante um fast die Hälfte:
Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
var
Map: TMap;
begin
[...]
Map:=Google.Maps.Map(Document.GetElementById('div_map'),Options); //Karten-Objekt anlegen
Map.OnClick:=MapClick; //Ereignishandler
Map.OnMouseMove:=MapMouseMove; //-"-
end;
procedure TForm1.MapClick(Sender: TObject; MouseEvent: TMouseEvent);
var
Options: TMarkerOptions;
begin
with FScript do
begin
Options:=TMarkerOptions.Create; //Options-Objekt für den Marker anlegen
with Options do
begin
Position:=MouseEvent.LatLng; //Markerposition
Map:=Maps[0]; //Karte, auf der der Marker angezeigt werden soll
Title:=MouseEvent.LatLng.ToUrlValue; //Hinweis, wenn Maus über dem Marker
Icon:=Format('http://www.google.com/mapfiles/kml/paddle/%d-lv.png',
[Markers.Count mod 10+1]); //Icon mit einer Nummer zwischen 1 und 10
end;
Google.Maps.Marker(Options); //Marker-Objekt anlegen
end;
with ListView1.Items.Add do //Marker-Position in die Liste eintragen
begin
Caption:=FloatToStr(MouseEvent.LatLng.Lng);
SubItems.Add(FloatToStr(MouseEvent.LatLng.Lat));
MakeVisible(false);
end;
end;
procedure TForm1.MapMouseMove(Sender: TObject; MouseEvent: TMouseEvent);
begin
Latitude.Text:=FloatToStr(MouseEvent.LatLng.Lat);
Longitude.Text:=FloatToStr(MouseEvent.LatLng.Lng);
end;
Zusätzlich habe ich seine Demo um die Auswertung und Anzeige der aktuellen Cursorposition auf der Karte (Map.OnMouseMove) erweitert.
Der komplette Quellcode befindet sich im Anhang: