论坛风格切换切换到宽版
  • 5308阅读
  • 9回复

Inno Setup   安装多路劲选择问题。 [复制链接]

上一主题 下一主题
离线XW69663533
 

发帖
7
金钱
70
威望
7
只看楼主 倒序阅读 0 发表于: 2014-03-29
虎版,我想实现一个功能是在安装路劲时可以有一个下拉菜单进行选择不同的路劲来进行安装。不知道Inno Setup 能否实现。




目前我做的这个代码是只能固定一个绝对的路劲,请问能在这个基础上进行修改达到上面所描述的效果?


[Setup]
AppName=HK
AppVersion=2014
DefaultDirName=D:\A\A-1
DisableProgramGroupPage=yes
DisableDirPage=no
OutputDir=E:\A\安装包\2012
OutputBaseFilename=AZ2008_201401-02
Compression=lzma
Uninstallable=no
DirExistsWarning=no
[Types]
Name: Custom; Description:"自定义安装"; Flags: iscustom;
[Files]
Source: "E:\A\BS\*";DestDir: "{app}\BS"; Flags: ignoreversion ; Components: readme\AZBS;
Source: "E:\A\BT\*";DestDir:"{app}\BT"; Flags: ignoreversion ; Components: readme\AZBT;

[Components]
Name: readme; Description: "2014年01月至02月刊";  
Name: readme\AZBS; Description: "BS"; Flags: checkablealone;
Name: readme\AZBT; Description: "BT"; Flags: checkablealone;
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 1 发表于: 2014-03-29
你的描述跟你的代码所反映出来的意图是不一致的,所以我还不完全明白你的意思。用下拉框的目的是,用户不可以任意选择安装目录,而只能在两个或者多个预定的目录中选择一个。

你能不能给出你想要的下拉框中的具体内容?
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 2 发表于: 2014-03-30
[Code]
var
  NewComboBox1: TNewComboBox;

procedure InitializeWizard();
begin
  WizardForm.DirBrowseButton.Visible := False;
  WizardForm.DirEdit.Visible := False;
  { NewComboBox1 }
  NewComboBox1 := TNewComboBox.Create(WizardForm);
  with NewComboBox1 do
  begin
    Parent := WizardForm.SelectDirPage;
    Left := ScaleX(0);
    Top := ScaleY(63);
    Width := ScaleX(417);
    Height := ScaleY(20);
    Text := '<选择一个安装目录>';
    Items.Text := ExpandConstant('{pf}\ABC') + #13#10 + ExpandConstant('{pf}\XYZ');
  end;
end;

function NextButtonClick(CurPageID: Integer): Boolean;
begin
result:= true;
if CurPageID = wpSelectDir then
  if NewComboBox1.Text = '<选择一个安装目录>' then
    result:= false
  else
    WizardForm.DirEdit.Text := NewComboBox1.Text;
end;
离线XW69663533

发帖
7
金钱
70
威望
7
只看该作者 3 发表于: 2014-03-31
谢谢虎版。你给的代码已经解决我想要的效果了。太感谢了
离线XW69663533

发帖
7
金钱
70
威望
7
只看该作者 4 发表于: 2014-04-01
回 2楼(gnatix) 的帖子
gnatix:var  NewComboBox1: TNewComboBox;procedure InitializeWizard();....... (2014-03-30 19:24) 

你好。虎版。这代码我想再做下优化,就是在安装路径的页面上,将下拉菜单跟改为勾选项。选择哪个勾选项则就按照哪个路径安装。同时也允许两个以上的勾选项同时安装。并可以修改默认的盘符。请问这段代码应该要怎么修改?
离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 5 发表于: 2014-04-02
我觉得楼主的想法有些问题。顶楼图一这个页面就是让用户指定一个(注意是一个、也只能是一个)安装目录 {app}。你当然可以给出几个预先设定好的目录让用户选择,比如用下拉框或者点选项形式,但是结果只能是唯一的一个目录给系统常量 {app}。如果你用勾选项让用户选择几个目录,那么到底是用哪个目录呢?

我看楼主的意思似乎只是想把不同的文件安装到不同的文件夹中。

楼主最好用具体的例子把自己的想法表达清楚,比如你说的那几个勾选项具体是什么内容、选择某个勾选项后具体要做什么操作等等。

另外:使用INNO增强版在页面上添加下拉框、勾选项等是很简单的事情,但是这个只是表面,关键是要清楚具体用它们做什么操作。
离线mingping

发帖
17
金钱
170
威望
17
只看该作者 6 发表于: 2014-04-02
回 2楼(gnatix) 的帖子
看到虎版的这个例子,刚好有问题想请教,就是点击下拉箭头后,能否自动获取当前电脑所有盘符?
就如下图所示效果:


离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 7 发表于: 2014-04-04
  1. [Code]
  2. function GetDriveType(lpDisk: String): integer;
  3. external 'GetDriveTypeW@kernel32.dll stdcall';
  4. procedure GetAllHDDrives(var aos: TArrayOfString);
  5. var i, n: integer;
  6.     drv: string;
  7. begin
  8.   SetArrayLength(aos, 0);
  9.   For i:= 3 to 26 do                   //从 C: 盘一直检查到 Z: 盘
  10.     begin
  11.       drv:= chr(i+64)+':\';
  12.       if GetDriveType(drv) = 3 then      //只处理硬盘(Type = 3)
  13.         begin
  14.           n := GetArrayLength(aos);
  15.           SetArrayLength(aos, n+1);
  16.           aos[n] := drv;
  17.         end;
  18.     end;
  19. end;
  20. var
  21.   NewComboBox1: TNewComboBox;
  22. procedure InitializeWizard();
  23. var i: Integer;
  24.     ListAllDrv: TArrayOfString;
  25. begin
  26.   GetAllHDDrives(ListAllDrv);
  27.   WizardForm.DirBrowseButton.Visible := False;
  28.   WizardForm.DirEdit.Visible := False;
  29.   NewComboBox1 := TNewComboBox.Create(WizardForm);
  30.   with NewComboBox1 do
  31.   begin
  32.     Parent := WizardForm.SelectDirPage;
  33.     Left := ScaleX(0);
  34.     Top := ScaleY(63);
  35.     Width := ScaleX(417);
  36.     Height := ScaleY(20);
  37.     Text := '<选择一个安装目录>';
  38.     For i := 0 to Length(ListAllDrv)-1 do
  39.       Items.Add(ListAllDrv[i] + 'Program Files\XYZ')
  40.   end;
  41. end;
  42. function NextButtonClick(CurPageID: Integer): Boolean;
  43. begin
  44. result:= true;
  45. if CurPageID = wpSelectDir then
  46.   if NewComboBox1.Text = '<选择一个安装目录>' then
  47.     result:= false
  48.   else
  49.     WizardForm.DirEdit.Text := NewComboBox1.Text;
  50. end;


离线mingping

发帖
17
金钱
170
威望
17
只看该作者 8 发表于: 2014-04-23
感谢虎版!不过运行后提示出错,用的是阿信的增强版。


离线gnatix

发帖
7696
金钱
-8279
威望
-828
只看该作者 9 发表于: 2014-04-23
注意:我给的代码是以 INNO 的 Unicode 版本为基础的。