【问题标题】:Google Maps inside Delphi 2009 ApplicationDelphi 2009 应用程序中的谷歌地图
【发布时间】:2010-07-21 17:30:42
【问题描述】:

在这个项目中,我的目标是在 Delphi 2009 中通过 GoogleMaps 创建一个软件,它类似于this one,但方式不同。在这个项目中,用户可以在地图上添加一个点,在图标旁边的每个点我都会添加一些信息,这些信息应该与图标相关,所以如果用户想点击其中一个,信息将自动打开.我的问题是我可以创建信息,但是当我关闭它时,我无法再次打开它。我怎样才能解决这个问题,我的代码如下,非常感谢。

  procedure TfrmMain.btnAddMarkerClick(Sender: TObject);
var
   Doc2: IHTMLDocument2;
   Win2: IHTMLWindow2;
   latlng: String;
   information: String;
begin
   Doc2 := WebBrowser1.Document as IHTMLDocument2;
   Win2 := Doc2.parentWindow;
   information:='its a example';
    latlng := '"' + leLat.Text + '", "' + leLng.Text + '"';

  Win2.execScript('map.addOverlay(new GMarker(new GLatLng(' + latlng + ')) );', 'JavaScript');
  Win2.execScript('map.openInfoWindow(new GLatLng(' + latlng + '),document.createTextNode("'+information +'"));','JavaScript');

   end;

设计如下: alt text http://img829.imageshack.us/img829/8474/adszdi.png

【问题讨论】:

  • “我可以创建信息,但是当我关闭它时,我无法再次打开它”是什么意思?你能详细说明一下吗?
  • 您描述的项目听起来像是 Google 自己的“我的地图”功能。你确定你需要做这个项目吗?

标签: delphi browser delphi-2009 maps


【解决方案1】:

@asilloo,Google 地图 API 不会保存您的标记,此信息仅在您浏览器的当前会话中有效,如果您需要保留(存储)标记您必须自己手动完成,您可以使用数据库或 xml 文件。我建议你使用KML 格式来完成这项任务。

【讨论】:

  • 只是好奇。我看到您的答案中总是包含“@...”。你这样做有理由吗?对我来说,您的回答是针对提出问题的人似乎很明显?
  • @Marjan。如果有多个 cmets(可能会或可能不会按时间顺序排列),它有助于解决特定用户的问题。这是一个事实上的标准......
  • @François:在 cmets 中是的。但 RRUZ 也在回答中这样做,这让我很好奇他是否也有理由在那里这样做。
  • @François - 好点。 +1 正确使用“事实上”。希望这条评论会被打乱,以进一步证明这一点。
  • @Marjan 推特过多的副产品?
【解决方案2】:

我通过在 Delphi 中嵌入 Flash OCX 控件,使用 Google Maps Flex (Flash) API 创建了解决方案。对我来说,它的速度要快得多,而且我能够传递/检索复杂的参数。

也许你试一试: http://www.delphiflash.com/

【讨论】:

    【解决方案3】:

    您的代码中的问题是您没有保存对信息窗口的任何引用。显示信息窗口,实际上,当您关闭它时,它就消失了。

    如果我正确理解您想要的内容,您应该将事件处理程序添加到您创建的标记中。

    你应该这样做:

    • 创建标记对象
    • 附加 onclick 事件处理程序。在该事件处理程序中,您打开信息窗口
    • 将标记添加到地图

    代码:

    Win2.execScript('var marker=new GMarker(new GLatLng(' + latlng + '));', 'JavaScript');
    Win2.execScript('GEvent.addListener(marker, "click", function() { marker.openInfoWindowHtml("'+information +'"); });', 'JavaScript');
    Win2.execScript('map.addOverlay(marker);', 'JavaScript');
    

    (对不起,如果这里有一些语法错误。我已经在stackoverflow上这个糟糕的文本框中编辑了它)

    让我知道它是否有效......

    【讨论】:

      猜你喜欢
      • 2023-03-21
      • 2016-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2010-10-09
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多