2014-01-20 35 views
1

过去,这是一个关于为gmlib组件设置Google Maps API密钥的问题。提供的解决方案是更改'map.html'头元素,然后重新编译资源(rc.cmd)并重新编译组件。这是一个相当静态的解决方案,有时在运行时动态设置api键会更方便。当有人想为不同的项目使用不同的密钥时(api密钥可以存储在项目的某些ini/property文件中)。我认为最好的方法是GMMap组件的属性和构造函数的新参数。 我搜索谷歌地图的JavaScript API一些功能,如更改/设置API密钥,但我没有找到任何。看起来,api密钥必须被'硬编码'到html文件的头部标签中,并且没有JavaScript功能来改变它。 (如果有一些javascript函数存在,那么ExecuteScript会调用它。)Google Maps API的动态设置GMLib组件的密钥

任何想法如何在运行时设置API密钥?

例如,我发现这个链接,改变文件本身: Can I change/set the Google Maps API Key dynamically from JavaScript?

如何利用这gmlib?

在此先感谢。

回答

0

真的,这个解决方案对于GMLib并不是必需的,因为当你(他的组件)从资源文件加载HTML映射时,你可以在代码加载到TWebBrowser之前通过代码更改这一行(你可以添加键)。

您需要在TGMMap中添加一个关键属性,并在GetBaseHTMLCode方法中考虑此属性。

要容易改变这个键,就可以通过这个其他

<script type="text/javascript" src="https://maps.google.com/maps/api/js?%ssensor=false&libraries=weather,panoramio,geometry,drawing"></script> 

改变从HTML代码

<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false&libraries=weather,panoramio,geometry,drawing"></script> 

此行,将GetBaseHTMLCode方法为这个

function TCustomGMMap.GetBaseHTMLCode: string; 
var 
    List: TStringList; 
    Stream: TResourceStream; 
begin 
    Result := ''; 

    List := TStringList.Create; 
    try 
    try 
     Stream := TResourceStream.Create(HInstance, RES_MAPA_CODE, RT_RCDATA); 
     List.LoadFromStream(Stream); 
     Result := List.Text; 
     Result := Format(Result, [KeyProerty]); // <== add this line 
    finally 
     if Assigned(Stream) then FreeAndNil(Stream); 
     if Assigned(List) then FreeAndNil(List); 
    end; 
    except 
    raise Exception.Create(GetTranslateText('No se ha podido cargar el recurso', Language)); 
    end; 
end; 

这种变化没有经过测试,但这是这个想法:-)

我把它放到我的待办事项列表本周;-)

问候

+0

谢谢您的答复。我按照您的建议实施了Api Key设置。我将补丁文件发送到您的电子邮件,希望对您的工作有所帮助。 – user3215366

+0

新版本上传到[Google Code](http://code.google.com/p/gmlibrary/source/checkout)存储库中, – cadetill