1

过去是关于为 gmlib 组件设置 Google Maps Api Key 的问题。提供的解决方案是更改“map.html”头元素,然后重新编译资源(rc.cmd)并重新编译组件。这是一个非常静态的解决方案,有时在运行时动态设置 api 密钥会更方便,例如当有人想为不同的项目使用不同的密钥时(api 密钥可以存储在项目的一些 ini/property 文件中)。我认为最好的方法是 GMMap 组件的属性和构造函数的新参数。我在 google maps javascript api 中搜索了一些功能,例如更改/设置 api 密钥,但我没有找到任何功能。似乎 api 密钥必须“硬编码”到 html 文件的 head 标记中,并且没有 javascript 函数可以更改它。

知道如何在运行时设置 api 密钥吗?

例如,我发现此链接更改了文档本身: 我可以从 JavaScript 动态更改/设置 Google Maps API 密钥吗?

如何在 gmlib 中使用它?

提前致谢。

4

1 回答 1

0

确实,这个解决方案在 GMLib 中不是必需的,因为当您(他的组件)从资源文件加载 HTML 映射时,您可以在将其加载到 TWebBrowser 之前通过代码更改此行(您可以添加密钥)。

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

要轻松更改此密钥,您可以从 HTML 代码中更改此行

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

通过这个其他

<script type="text/javascript" src="https://maps.google.com/maps/api/js?%ssensor=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;

此更改未经测试,但这是想法:-)

我把它放到了本周的 TODO 列表中;-)

问候

于 2014-01-21T06:45:21.103 回答