Inno使用谷歌地图设置自定义页面

时间:2015-07-11 19:11:49

标签: inno-setup

我目前正在使用Inno Setup创建安装程序,这需要一个谷歌地图。对于地图我正在使用TLama的inno-web-browser。

所以我有一个显示谷歌地图的自定义InputQueryPage。当用户点击地图时,它还有2个用于纬度和经度的输入框,它在信息窗口中显示坐标。 是否可以解析坐标,以便上面的2个输入框可以使用lat和long来填充地图? 然后可以将以上内容以浮点格式写入注册表。 但这是另一个问题..

感谢您对此有任何回复..

1 个答案:

答案 0 :(得分:1)

您要求的内容需要特定的JavaScript互操作,这不容易实现。因此,我建议您使用JavaScript制作这些编辑框,您将与Google Maps API互操作,并在您使用浏览器离开页面后阅读这些值。我已通过新的WebBrowserGetOleObject功能将OleObject的访问权限添加到插件中。

以下是一个带有2个输入框的示例JavaScript(您将在脚本中从Google Maps API进行同步)。此脚本在以下示例中由固定文件名引用(实际更改为从安装程序包中提取的临时文件):

<!DOCTYPE html>
<html>
<body>
  <input id="latinput" type="text">
  <input id="loninput" type="text">
</body>
</html>

在Inno Setup中,您可以通过这种方式从这些输入框中读取值:

[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program

[Files]
Source:"WebBrowser.dll"; Flags: dontcopy

[Code]
const
  EVENT_BEFORE_NAVIGATE = 1;
  EVENT_FRAME_COMPLETE = 2;
  EVENT_DOCUMENT_COMPLETE = 3;

type
  TWebBrowserEventProc = procedure(EventCode: Integer; URL: WideString);

procedure WebBrowserCreate(ParentWnd: HWND; Left, Top, Width, Height: Integer; 
  CallbackProc: TWebBrowserEventProc);
  external 'WebBrowserCreate@files:webbrowser.dll stdcall';
procedure WebBrowserDestroy;
  external 'WebBrowserDestroy@files:webbrowser.dll stdcall';
procedure WebBrowserShow(Visible: Boolean);
  external 'WebBrowserShow@files:webbrowser.dll stdcall';
procedure WebBrowserNavigate(URL: WideString);
  external 'WebBrowserNavigate@files:webbrowser.dll stdcall';
function WebBrowserGetOleObject: Variant;
  external 'WebBrowserGetOleObject@files:webbrowser.dll stdcall';

var
  CustomPage: TWizardPage;

procedure InitializeWizard;
begin
  CustomPage := CreateCustomPage(wpWelcome, 'Web Browser Page', 
    'This page contains web browser');
  WebBrowserCreate(WizardForm.InnerPage.Handle, 0, WizardForm.Bevel1.Top, 
    WizardForm.InnerPage.ClientWidth, WizardForm.InnerPage.ClientHeight - WizardForm.Bevel1.Top, nil);
  WebBrowserNavigate('C:\AboveScript.html');
end;

procedure DeinitializeSetup;
begin
  WebBrowserDestroy;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  WebBrowserShow(CurPageID = CustomPage.ID);
end;

function NextButtonClick(CurPageID: Integer): Boolean;
var
  Latitude: Variant;
  Longitude: Variant;
  OleObject: Variant;
begin
  Result := True;
  if CurPageID = CustomPage.ID then
  begin
    OleObject := WebBrowserGetOleObject;
    if not VarIsNull(OleObject) then
    begin
      Latitude := OleObject.Document.GetElementByID('latinput').value;
      Longitude := OleObject.Document.GetElementByID('loninput').value;
      MsgBox(Format('Lat: %s, Lon: %s', [Latitude, Longitude]), mbInformation, MB_OK);
    end;
  end;
end;