unit MenuGE;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleCtrls, SHDocVw, MSHTML, ActiveX;
type
TMenuGEN = class(TForm)
LabelLatitude: TLabel;
LatitudineManuale: TEdit;
LongitudineManuale: TEdit;
LabelLongitude: TLabel;
AggiungiPunto: TButton;
PulisciPunti: TButton;
WebBrowser1: TWebBrowser;
Label1: TLabel;
Label2: TLabel;
LatitudineDaMappa: TEdit;
LongitudineDaMappa: TEdit;
CaricaLayer: TButton;
procedure AggiungiPuntoClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure PulisciPuntiClick(Sender: TObject);
procedure WebBrowser1CommandStateChange(ASender: TObject; Command: Integer;
Enable: WordBool);
procedure CaricaLayerClick(Sender: TObject);
private
{ Private declarations }
HTMLWindow2: IHTMLWindow2;
public
{ Public declarations }
end;
var
MenuGEN: TMenuGEN;
implementation
{$R *.dfm}
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=false&language=it"></script> '+
'<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 layer;'+
' var markersArray = [];'+
''+
''+
' function initialize() { '+
' geocoder = new google.maps.Geocoder();'+
' var latlng = new google.maps.LatLng(38.578561,15.937498); '+
' var myOptions = '+
' { '+
' zoom: 14, '+
' center: latlng, '+
' mapTypeId: google.maps.MapTypeId.ROADMAP '+
' }; '+
' map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); '+
//attributi
' trafficLayer = new google.maps.TrafficLayer();'+
' bikeLayer = new google.maps.BicyclingLayer();'+
' map.set("streetViewControl", true);'+
' trafficLayer.setMap(null);'+
' bikeLayer.setMap(null);'+
//per aggiungere l'evento OnClick
' google.maps.event.addListener(map, "click", '+
' function(event) '+
' {'+
' document.getElementById("LatValue").value = event.latLng.lat(); '+
' document.getElementById("LngValue").value = event.latLng.lng(); '+
' PutMarkerPiuPunti(document.getElementById("LatValue").value, document.getElementById("LngValue").value,"") '+
' } '+
' ); '+
''+
' } '+
''+
//vai alle coordinate, centra e aggiungiungi un punto
' function GotoLatLngPuntoSingolo(Lat, Lang) { '+
' var latlng = new google.maps.LatLng(Lat,Lang);'+
' map.setCenter(latlng);'+
' PutMarkerPuntoSingolo(Lat, Lang, Lat+","+Lang);'+
' }'+
''+
//vai alle coordinate e centra la mappa
' function GotoLatLngPiuPunti(Lat, Lang) { '+
' var latlng = new google.maps.LatLng(Lat,Lang);'+
' map.setCenter(latlng);'+
' }'+
''+
//pulisci i punti
'function ClearMarkers() { '+
' if (markersArray) { '+
' for (i in markersArray) { '+
' markersArray[i].setMap(null); '+
' } '+
' markersArray.length = 0;'+
' } '+
'} '+
''+
//carica layer KML
' function CaricaLayer(indirizzo) { '+
' var layer = new google.maps.KmlLayer(indirizzo);'+
' layer.setMap(map);'+
' }'+
''+
//per un solo punto
' function PutMarkerPuntoSingolo(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); '+
' }'+
//per pių punti
' function PutMarkerPiuPunti(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); '+
' index= 1;'+//(markersArray.length % 10);'+
' if (index==0) { index=10 } '+
' icon = "http://www.google.com/mapfiles/kml/paddle/"+index+"-lv.png"; '+
//' icon = "http://maps.google.com/mapfiles/kml/shapes/shaded_dot.png"; '+
' marker.setIcon(icon); '+
' }'+
''+
''+'</script> '+
'</head> '+
'<body onload="initialize()"> '+
' <div id="map_canvas" style="width:100%; height:100%"></div> '+
' <div id="latlong"> '+
' <input type="hidden" id="LatValue" >'+
' <input type="hidden" id="LngValue" >'+
' </div> '+
'</body> '+
'</html> ';
procedure TMenuGEN.PulisciPuntiClick(Sender: TObject);
begin
HTMLWindow2.execScript('ClearMarkers()', 'JavaScript')
end;
procedure TMenuGEN.AggiungiPuntoClick(Sender: TObject);
begin
HTMLWindow2.execScript(Format('GotoLatLngPuntoSingolo(%s,%s)',[LatitudineManuale.Text,LongitudineManuale.Text]), 'JavaScript');
end;
procedure TMenuGEN.CaricaLayerClick(Sender: TObject);
var indirizzo : string;
begin
indirizzo := 'C:\Users\systemgvp\Desktop\Google Maps da script\TestKML_1.kml';
HTMLWindow2.execScript(Format('CaricaLayer(%s)',[indirizzo]), 'JavaScript');
end;
procedure TMenuGEN.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;
procedure TMenuGEN.WebBrowser1CommandStateChange(ASender: TObject;
Command: Integer; Enable: WordBool);
var
ADocument : IHTMLDocument2;
ABody : IHTMLElement2;
Lat : string;
Lng : string;
function GetIdValue(const Id : string):string;
var
Tag : IHTMLElement;
TagsList : IHTMLElementCollection;
Index : Integer;
begin
Result:='';
TagsList := ABody.getElementsByTagName('input');
for Index := 0 to TagsList.length-1 do
begin
Tag:=TagsList.item(Index, EmptyParam) As IHTMLElement;
if CompareText(Tag.id,Id)=0 then
Result := Tag.getAttribute('value', 0);
end;
end;
begin
if TOleEnum(Command) <> CSC_UPDATECOMMANDS then
Exit;
ADocument := WebBrowser1.Document as IHTMLDocument2;
if not Assigned(ADocument) then
Exit;
if not Supports(ADocument.body, IHTMLElement2, ABody) then
exit;
Lat :=GetIdValue('LatValue');
Lng :=GetIdValue('LngValue');
if (Lat<>'') and (Lng<>'') and ((Lat<>LatitudineDaMappa.Text) or (Lng<>LongitudineDaMappa.Text)) then
begin
LatitudineDaMappa.Text :=Lat;
LongitudineDaMappa.Text:=Lng;
end;
end;
end.