谷歌地图的范围

时间:2009-07-06 16:25:32

标签: javascript delphi google-maps

我有一个Delphi应用程序,可以在TWebBrowser中加载Google地图:

with WebBrowser1.Document as IHTMLDocument2 do
  with parentWindow do
    ExecScript('map.setCenter(new GLatLng(51.15917, 4.13889),10)', 'JavaScript');

有关如何在我的应用程序中获取地图范围的任何想法吗? TIA
史蒂芬

修改
Rob的回答指向了部分解决方案:javascript知道坐标。我想把它们放到我的Delphi应用程序中。

关于专家交流的说明
(对davidins回复的长答案)
当他们开始时它仍然是免费的,我在Expert's Exchange上。当他们贪婪时,我离开了那里。 如果有人能帮助我解决技术问题,我不介意给这个人喝一杯,但我绝对不想为此支付其他人。 /> 他们30天的审判更加糟糕。如果他们不打算收取我的信用卡号码,为什么还要提交? “Experts Exchange是互联网上最值得信赖的IT资源,我们相信您会同意”(原文如此)。呃,我不太确定,EE。我更喜欢这样,感谢我能得到的任何帮助,并尽可能地给出答案(不幸的是,这种情况经常发生)。

2 个答案:

答案 0 :(得分:3)

我打算建议您使用javascript知道坐标以某种方式执行该调用的脚本,以便将坐标返回到您的应用程序。然而,在看了这个帖子 - expert's exchange后,似乎这是不可能的。但同样的线程说“你可以让你的JavaScript函数设置HTML隐藏字段元素的值,然后从你的Delphi代码中读取该值。”这个例子是向下的。希望有点帮助。绝对不是获得坐标的理想方式。

编辑:对不起,我没有意识到,当你从这里进行专家交流时,它会阻止内容。如果您从谷歌访问该页面,它将显示。为了节省您的时间,这里是解决方案的复制和粘贴:

悬浮窗: 我认为没有办法直接获得JavaScript函数的价值,因为函数是通过各种神奇的抽象层执行的。但是,您可以让JavaScript函数设置HTML隐藏字段元素的值,然后从Delphi代码中读取该值。

第一部分非常简单:您只需将JavaScript函数设置为隐藏字段的值:



<!-- Somewhere in the HTML form -->
<input type="hidden" id="HiddenFieldID" name="HiddenFieldName" value="">

--------------------

// JavaScript function
function MyFunc()
{
     // Get the hidden field by its ID.
     var elm = document.getElementById('HiddenFieldID');
     if (elm) elm.value = '10086';

     return 10086;
}

以下是关于如何执行此最后一部分的示例: http://www.cryer.co.uk/brian/delphi/twebbrowser/read_write_form_elements.htm#GetValueOfField

在您的情况下,您将希望获得类似附加代码的内容。

-dZ。


function GetFieldValue(fromForm: IHTMLFormElement;
    const fieldName: string): string;
var
  field: IHTMLElement;
  inputField: IHTMLInputElement;
  selectField: IHTMLSelectElement;
  textField: IHTMLTextAreaElement;
begin
  field  := fromForm.Item(fieldName,'') as IHTMLElement;
  result := '';
  if Assigned(field) and (field.tagName = 'INPUT') then
  begin
    inputField := field as IHTMLInputElement;
    if inputField.type_ = 'hidden' then
      result := inputField.value;
  end
end;

答案 1 :(得分:0)

来自上述EE示例的

IHTMLWindow2.execScript应该将执行脚本的返回值作为Variant返回。但您不必使用IHTMLDocument2.parentWindow属性。还有IHTMLDocument.Script IDispatch,因此你可以通过Variant后期绑定来使用它:

var
  Document: IHTMLDocument;
  VScript, V: Variant;
begin
  Document := WebBrowser.Document as IHTMLDocument;
  VScript := Document.Script;
  V := VScript.HelloJavaScript();
  ShowMessage(V);
end;

HelloJavaScript是一个返回字符串的javascript函数:

<script language="javascript">
function HelloJavaScript()
{
    s = "Hello, world! (javascript)";
        alert(s);
        return s;
}
</script>