在xe5中的webbrowser中每x分钟刷新一次谷歌地图

时间:2015-01-15 10:46:22

标签: delphi google-maps-api-3 delphi-xe5 twebbrowser

我正在使用delphi在XE5中开发一个小型移动应用程序,我将在webbrowser中显示谷歌地图中的当前位置。问题是如何在webbrowser中每x分钟刷新一次谷歌地图。默认刷新时间为20秒。谢谢。

3 个答案:

答案 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;