在Delphi TWebBrowser中按地址显示谷歌地图
Display Google Map by address in Delphi TWebBrowser
我正试图在Delphi的Windows窗体上的TWebBrowser中显示谷歌地图。我可以使用地址点击按钮来显示地图,但不能在加载表单时显示。当表单最初显示时,如何获取显示地址的地图?
private
{ Private declarations }
HTMLWindow2: IHTMLWindow2;
public
{ Public declarations }
end;
var
ViewMaps: TViewMaps;
Flags: OLEVariant;
address: string;
implementation
Uses ActiveX;
{$R *.dfm}
const
HTMLStr: AnsiString =
'<html> '+
'<head> '+
'<meta name="viewport" content="initial-scale=1.0, user-scalable=yes" /> '+
//'<meta http-equiv="X-UA-Compatible" content="IE=edge" />'+
'<script type="text/javascript" src="http://maps.google.com/maps/api/js?v=3"></script> '+
'<script type="text/javascript"> '+
''+
''+
' var geocoder; '+
' var map; '+
//' var address; '+
' var trafficLayer;'+
' var bikeLayer;'+
' var markersArray = [];'+
''+
''+
' function initialize() { '+
' geocoder = new google.maps.Geocoder();'+
' var latlng = new google.maps.LatLng(40.714776,-74.019213); '+
//' var address = "San Diego, CA";'+
' var myOptions = { '+
' zoom: 11, '+
' 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> ';
procedure TViewMaps.OnFormCreate(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 TViewMaps.GoToAddressBtnClick(Sender: TObject);
begin
address := MemoAddress.Lines.Text;
address := StringReplace(StringReplace(Trim(address), #13, ' ', [rfReplaceAll]), #10, ' ', [rfReplaceAll]);
HTMLWindow2.execScript(Format('codeAddress(%s)',[QuotedStr(address)]), 'JavaScript');
end;
您无法在创建网页时加载网页。相反,您可以使用TTimer
在延迟时加载它。。。
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:= False; //Disable timer so it doesn't fire again
WebBrowser1.Navigate('about:blank');
...........
end;
相关文章:
- 使用API在我的网站Google-Map上显示搜索地址的纬度和经度
- 在Delphi TWebBrowser中按地址显示谷歌地图
- 显示同一地址位置上的多个标记
- 为什么我的地理编码无法显示地址
- 如何在谷歌地图上显示我的数据库地址,不带lat和long
- gmap3 在信息窗口中显示地址
- 信息窗口不显示来自 KML 的地址信息
- 根据浏览器语言或IP地址显示内容,以显示YouTube或优酷视频
- JavaScript 函数不显示链接地址
- 如何隐藏移动野生动物园的地址栏不显示,即使向上拖动也是如此
- 如何使用 AJax 读取地址栏中显示的页面
- 如何在谷歌地图中使用地址数组显示信息窗口和折线
- 在我的页面上的地图上显示地址
- 如何显示从地址到收件人地址的方向
- 从地址栏获取数据并将其显示在页面上
- 可以在我的网站的另一个网站的地址栏中显示链接吗
- 如何在没有在 PHP 或 JavaScript 中在页面底部显示地址的情况下打印文档
- 如何显示节点属性,如person's的姓名、照片和地址
- 如何在信息窗口中显示我的地理编码地址?谷歌地图API
- 为什么获胜't添加的电子邮件地址显示在messageBox中