Einzelnen Beitrag anzeigen

Thom

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

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

  Alt 25. Jun 2011, 14:19
So - nach längerer Zeit aus aktuellem Anlaß wieder einmal eine kleine Demo zum Thema Events:

rodrigo_clickevent.jpg

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:
Angehängte Dateien
Dateityp: zip Rodrigo_Click Event.zip (3,1 KB, 267x aufgerufen)
Thomas Nitzschke
Google Maps mit Delphi
  Mit Zitat antworten Zitat