Delphi GMLib组件的Google Maps Api密钥的动态设置

Delphi GMLib组件的Google Maps Api密钥的动态设置,delphi,google-maps-api-3,gmlib,Delphi,Google Maps Api 3,Gmlib,在过去,这是一个关于为gmlib组件设置googlemapsapi键的问题。提供的解决方案是更改“map.html”头元素,然后重新编译资源(rc.cmd)和组件。这是一个非常静态的解决方案,有时在运行时动态设置api键会更方便,例如,当有人想要为不同的项目使用不同的键时(api键可以存储在项目的某些ini/属性文件中)。我认为最好的方法是为GMMap组件创建一个属性,为构造函数创建一个新参数。 我在GoogleMapsJavaScriptAPI中搜索了一些功能,比如更改/设置api键,但没有找

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

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

例如,我发现这个链接改变了文档本身:

如何在gmlib中使用它


提前感谢。

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

您需要在TGMMap中添加一个key属性,并在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;
函数TCustomGMMap.GetBaseHTMLCode:string;
变量
列表:TStringList;
Stream:TResourceStream;
开始
结果:='';
列表:=TStringList.Create;
尝试
尝试
Stream:=TResourceStream.Create(HInstance、RES\u MAPA\u CODE、RT\u RCDATA);
List.LoadFromStream(Stream);
结果:=List.Text;

结果:=格式(结果,[KeyProerty]);//谢谢你的回复。我按照您的建议实现了Api密钥设置。我已将修补程序文件发送到您的电子邮件中,希望对您的工作有所帮助。新版本已上载到存储库