我正在使用delphi在XE5中开发一个小型移动应用程序,我将在webbrowser中显示谷歌地图中的当前位置。问题是如何在webbrowser中每x分钟刷新一次谷歌地图。默认刷新时间为20秒。谢谢。
答案 0 :(得分:1)
使用Timer刷新。 您可以在属性Interval中更改X分钟。
procedure TForm1.FormCreate(Sender: TObject);
begin
self.WebBrowser1.Navigate('www.embarcadero.com');
self.Timer1.Interval:= 10000;
self.Timer1.Enabled:= True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
self.WebBrowser1.Refresh;
end;
答案 1 :(得分:0)
据推测,您正在使用
之类的东西进行导航WebBrowser1.Navigate('https://www.google.com/maps/@<latitude>,<longitude>,<zoom>z');
并且您想要更新地图,因为位置已更改。 在这种情况下,调用诸如刷新之类的东西是没有意义的(在TWebBrowser for Windows上,或类似于TWebBrowser for mobile),因为那只会使用与之前相同的坐标。
相反,在计时器事件中,获取更新的位置,然后使用新坐标进行上述导航。
在新信息后修改
现在我无法使用真实的LocationSensor进行验证,因此我假设LocationSensor和初始地图的请求在OnLocationChanged事件中有效。另请注意,根据设备中安装的技术,位置传感器可能需要相当长的时间才能准备好报告位置更改。
您尝试在OnLocationChanged事件中初始化(设置间隔并启用)计时器(现在这些行已取消注释除外)。因此,启动计时器当然取决于此事件。如果您已经验证OnLocationChanged事件已触发,那么这是正常的,只需删除注释标记。
但是,如果最初没有触发OnLocationChanged事件,则需要在其他位置启动计时器。在表单上删除TTimer时,默认情况下启用它并且间隔为1000毫秒。因此,您可以在设计时将间隔更改为5分钟(300 000 ms),计时器将在程序启动时启动。
另一方面,您可能希望立即显示(或a)谷歌地图,在这种情况下,您可以使用以前保存的(或默认)位置使用表单的OnShow事件,直到LocationSensor开始报告位置变化。
// Instead of having this constant in several procedures,
// place it for example in the private section of your form
const
LGoogleMapsURL: String = 'https://maps.google.com/maps?q=%s,%s&';
var
SavedLocation: TLocationCoord2D;
....
procedure TTabbedForm.FormShow(Sender: TObject);
begin
// using a previously saved location
WebBrowser1.Navigate(Format(LGoogleMapsURL,
[SavedLocation.Latitude.ToString, SavedLocation.Longitude.ToString]));
// remove these lines if timer is enabled at design time
Timer1.Interval := 300000;
Timer1.Enabled := true;
end;
您无需在OnTimer事件
中重复设置计时器间隔和已启用的属性procedure TTabbedForm.Timer1Timer(Sender: TObject);
const
LGoogleMapsURL: String = 'https://maps.google.com/maps?q=%s,%s&';
begin
WebBrowser1.Navigate(Format(LGoogleMapsURL,[Locationsensor1.Sensor.Latitude.ToString,LocationSensor1.Sensor.Longitude.ToString ]));
// you can remove these two lines
// Timer1.Interval:=50000;
// Timer1.Enabled:=true;
end;
如果这不能解答您的问题,则需要更明确地指出 您希望它如何工作, 哪些不是您想要的。
修改2
下次您真的需要描述问题的所有方面。
OnLocationChanged事件是LocationSensor1的事件。摆脱它的最简单方法是从LocationSesnor1LocationChanged中删除任何const和var声明以及begin和end之间的代码。然后只做一个构建,IDE将删除它的所有痕迹。
答案 2 :(得分:0)
@ Tom Brunberg
我使用Locationsensor LocationChange在WebBrowser中显示谷歌地图,下面是代码:
procedure TTabbedForm.LocationSensor1LocationChanged(Sender: TObject;
const OldLocation, NewLocation: TLocationCoord2D);
const
LGoogleMapsURL: String = 'https://maps.google.com/maps?q=%s,%s&';
begin
ListBoxItem3.Text := 'Latitude: ' + NewLocation.Latitude.ToString;
ListBoxItem2.Text := 'Longitude: ' + NewLocation.Longitude.ToString;
Locationsensor1.Distance:=200;
{ and track the location via Google Maps }
WebBrowser1.Navigate(Format(LGoogleMapsURL, [NewLocation.Latitude.ToString, NewLocation.Longitude.ToString]));
// Timer1.Interval:=50000;
// Timer1.Enabled:=true;
ClientModule1.ServerMethods19Client.insertParcelLocation(EDIT4.Text,now,NewLocation.Longitude,NewLocation.Latitude);
我想每5分钟刷新一次webBrowser中的谷歌地图。因此,我使用了TTimer。但我不知道在哪里举起Timer事件?下面的代码是我尝试在webBrowser中引发计时器事件,但它不起作用!
procedure TTabbedForm.Timer1Timer(Sender: TObject);
const
LGoogleMapsURL: String = 'https://maps.google.com/maps?q=%s,%s&';
begin
WebBrowser1.Navigate(Format(LGoogleMapsURL,[Locationsensor1.Sensor.Latitude.ToString,LocationSensor1.Sensor.Longitude.ToString ]));
Timer1.Interval:=50000;
Timer1.Enabled:=true;
end;