Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Googlemaps: Parameterübergabe bei Javascript (https://www.delphipraxis.net/171710-googlemaps-parameteruebergabe-bei-javascript.html)

mcinternet 21. Nov 2012 10:01

Googlemaps: Parameterübergabe bei Javascript
 
Hallo,

stehe hier vor einem kleinen Problem. Bei der Initialisierung wird eine fest vorgegebene Koordinate angegeben und danach wird mittels goto... die richtige übertragen und auch die entsprechende Karte gezeigt.
Mein Wunsch: Gleich die richtige Karte anzeigen.
Delphi-Quellcode:
const

HTMLStr: AnsiString =
'<html> '+
'<head> '+
'<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
'<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script> '+
'<script type="text/javascript"> '+
''+
''+
' var geocoder; '+
' var map; '+
' var trafficLayer;'+
' var bikeLayer;'+
' var markersArray = [];'+
''+
''+
' function initialize() { '+
'   geocoder = new google.maps.Geocoder();'+
'   var latlng = new google.maps.LatLng(50.736455,10.173340); '+    // hier möchte ich die Variablen Lng und Lang einsetzen können
'   var myOptions = { '+
'     zoom: 5, '+
'     center: latlng, '+
'     mapTypeId: google.maps.MapTypeId.ROADMAP '+
'   }; '+
'   map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); '+
'   trafficLayer = new google.maps.TrafficLayer();'+
'   bikeLayer = new google.maps.BicyclingLayer();'+
'   map.set("streetViewControl", false);'+
' } '+
''+
''+
' function codeAddress(address) { '+
'   if (geocoder) {'+
'     geocoder.geocode( { address: address}, function(results, status) { '+
'       if (status == google.maps.GeocoderStatus.OK) {'+
'         map.setCenter(results[0].geometry.location);'+
'         PutMarker(results[0].geometry.location.lat(), results[0].geometry.location.lng(), results[0].geometry.location.lat()+","+results[0].geometry.location.lng());'+
'       } else {'+
'         alert("Geocode was not successful for the following reason: " + status);'+
'       }'+
'     });'+
'   }'+
' }'+
''+
''+
' function GotoLatLng(Lat, Lang) { '+
'  var latlng = new google.maps.LatLng(Lat,Lang);'+
'  map.setCenter(latlng);'+
'  PutMarker(Lat, Lang, Lat+","+Lang);'+
' }'+
''+
''+
'function ClearMarkers() {  '+
' if (markersArray) {        '+
'   for (i in markersArray) {  '+
'     markersArray[i].setMap(null); '+
'   } '+
' } '+
'}  '+
''+
' function PutMarker(Lat, Lang, Msg) { '+
'  var latlng = new google.maps.LatLng(Lat,Lang);'+
'  var marker = new google.maps.Marker({'+
'     position: latlng, '+
'     map: map,'+
'     title: Msg+" ("+Lat+","+Lang+")"'+
' });'+
' markersArray.push(marker); '+
' }'+
''+
''+
' function TrafficOn()  { trafficLayer.setMap(map); }'+
''+
' function TrafficOff() { trafficLayer.setMap(null); }'+
''+''+
' function BicyclingOn() { bikeLayer.setMap(map); }'+
''+
' function BicyclingOff(){ bikeLayer.setMap(null);}'+
''+
' function StreetViewOn() { map.set("streetViewControl", true); }'+
''+
' function StreetViewOff() { map.set("streetViewControl", false); }'+
''+
''+'</script> '+
'</head> '+
'<body onload="initialize()"> '+
' <div id="map_canvas" style="width:100%; height:100%"></div> '+
'</body> '+
'</html> ';



implementation

{$R *.dfm}
  uses Main, Winapi.ActiveX, System.StrUtils;



procedure TFrmGMapsAPI.apistart;
  var apilat   : string;
       apilng   : string;
begin
  apilat := StringReplace(frmMain.gmaps_lat,',','.',[rfReplaceAll]);
  apilng := StringReplace(frmMain.gmaps_lng,',','.',[rfReplaceAll]);
  HTMLWindow2.execScript(Format('GotoLatLng(%s,%s)',[apilat,apilng]), 'JavaScript'); // Hier werden die finalen Koordinaten übergeben und die gewünschte Karte angezeigt.
end;


// Wünschenswert wäre es, wenn bereits hier die finalen Koords übergeben würden ..

procedure TFrmGMapsAPI.FormCreate(Sender: TObject);
var
  aStream    : TMemoryStream;
begin

   WebBrowser1.Navigate('about:blank');
    if Assigned(WebBrowser1.Document) then
    begin
      aStream := TMemoryStream.Create;
      try
         aStream.WriteBuffer(Pointer(HTMLStr)^, Length(HTMLStr));
         //aStream.Write(HTMLStr[1], Length(HTMLStr));
         aStream.Seek(0, soFromBeginning);
         (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(aStream));
      finally
         aStream.Free;
      end;
      HTMLWindow2 := (WebBrowser1.Document as IHTMLDocument2).parentWindow;

    end;

end;
Gruß
Mc

mcinternet 21. Nov 2012 10:36

AW: Googlemaps: Parameterübergabe bei Javascript
 
Machmal sieht man den Wald vor lauter Bäumen nicht.

Problem gelöst: Die Koords gleich in den HTMLSTRING mit eingebaut. HTMLSTRING als var, nicht als const und dann über eine Funktion zusammengeflickt


Gruß

Mc

Thom 21. Nov 2012 12:58

AW: Googlemaps: Parameterübergabe bei Javascript
 
Hast Du Dir schon mal das Framework für Google Maps angeschaut? Damit kannst Du ohne JavaScript und HTML das Selbe mit wenigen Zeilen Delphi erreichen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz