论坛风格切换切换到宽版
  • 1707阅读
  • 8回复

如何把多条语句整合为一句 [复制链接]

上一主题 下一主题
离线wszjf
 

发帖
26
金钱
260
威望
26
只看楼主 倒序阅读 0 发表于: 2016-12-15
【请教】请教有没有办法把多条语句整合为一句,比如说一句语句实现安装到5.0-19.0版。
[code]
function InitializeSetup (): Boolean;
var
i: integer;
begin
Result := False;
for i := 5 to 9
   begin
   if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\ IntToStr\Installer','Path') then begin
        Result := True;
         break;
    end;
   end;
begin
   if Result = False then begin
       MsgBox('检测到没有安装原版,请先安装原版。', mbInformation, MB_OK);
   end;
end;
[Tasks]
Name: K5; Description: 安装插件到版本5.0; Flags: checkablealone;
Name: K6; Description: 安装插件到版本6.0; Flags: checkablealone;
Name: K7; Description: 安装插件到版本7.0; Flags: checkablealone;
Name: K8; Description: 安装插件到版本8.0; Flags: checkablealone;
Name: K9; Description: 安装插件到版本9.0; Flags: checkablealone;

[Files]
Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\5.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K5
Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\6.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K6
Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\7.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K7
Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\8.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K8
Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\9.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K9

离线zww3008_2

发帖
13
金钱
130
威望
13
只看该作者 1 发表于: 2016-12-17
不用这么麻烦吧,在function kx(): Boolean;段设置变量值就可以了,后面的5.0等等直接用变量,各段可全部简化为一句。
我也做了一个类似的,用户选挥版本后赋变量值就可以了。见:http://freeye.ys168.com
离线wszjf

发帖
26
金钱
260
威望
26
只看该作者 2 发表于: 2016-12-19
老师,非常感谢您的回复,也看了您分享的程序了,您是真正的高手,因为水平有限,还是无法完成自己的想法,希望能帮忙改下脚本,多谢!
离线wszjf

发帖
26
金钱
260
威望
26
只看该作者 3 发表于: 2016-12-19
回 1楼(zww3008_2) 的帖子
zww3008_2:不用这么麻烦吧,在function kx(): Boolean;段设置变量值就可以了,后面的5.0等等直接用变量,各段可全部简化为一句。我也做了一个类似的,用户选挥版本后赋变量值就可以了。见:http://freeye.ys168.com (2016-12-17 01:28) 

老师,非常感谢您的回复,也看了您分享的程序了,您是真正的高手,因为水平有限,还是无法完成自己的想法,希望能帮忙改下脚本,多谢!
离线zww3008_2

发帖
13
金钱
130
威望
13
只看该作者 4 发表于: 2016-12-19
我不是什么高手,也是摸着石头过河。我不知道你用的什么脚本,是inno? 我没用过,只是看代码猜的。

我只把思路说一下,具体语法还得你自己去写。
你是不是要求用户在选项组页面选择,然后根据用户的选择,来完成后面的安装?如果是单选,问题就简单些,多选的话有点复杂。
就单选来说,大概思路如下(我不知道具体语法,全部要你自己去按正确的写):

var usver        #先定义一个变量
function k5(): Boolean;          #然后用户选择
   usver='5.0'  还是 StrCpy usver '5.0'    还是其他写法       #变量赋值
function k6(): Boolean;
usver='6.0'
function k7(): Boolean;
usver='7.0'
function k8(): Boolean;
usver='8.0'
function k9(): Boolean;
usver='9.0'

#再判断用户选定的版本是否存在,变量的引用是否$usver,以及连接符,你去修改。
if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + $usver + '\Installer','Path') then

#下面这一句也可以合并成一句了:
result:= RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + $usver + '\Installer', 'Path');

#最后同样:
[Files]
Source: {app}\CnFilter.8bf; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\' + $usver + '\Installer,Path}\plug; Flags: ignorever

具体还要根据该脚本的要求,我不懂,只是猜的。
离线wanfu

发帖
2711
金钱
11950
威望
1195
只看该作者 5 发表于: 2016-12-19
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\5.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K5
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\6.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K6
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\7.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K7
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\8.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K8
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\9.0\Installer,Path}\plug; Flags: ignoreversion; Tasks : K8

[Tasks]
Name: K5; Description: 安装插件到版本5.0; Flags: unchecked ; check: CheckVersion('5.0')
Name: K6; Description: 安装插件到版本6.0; Flags: unchecked ; check: CheckVersion('6.0')
Name: K7; Description: 安装插件到版本7.0; Flags: unchecked ; check: CheckVersion('7.0')
Name: K8; Description: 安装插件到版本8.0; Flags: unchecked ; check: CheckVersion('8.0')
Name: K9; Description: 安装插件到版本9.0; Flags: unchecked ; check: CheckVersion('9.0')

[code]
function InitializeSetup (): Boolean;
  var
  i: integer;
  begin
    Result := False;
    for i := 5 to 9 do
      begin
      if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + IntToStr(i) + '.0\Installer','Path') then begin
          Result := True;
          break;
      end;
    end;
    begin
      if Result = False then begin
          MsgBox('检测到没有安装原版,请先安装原版。', mbInformation, MB_OK);
      end;
  end;
end;

function CheckVersion(Version: string): Boolean;
begin
  result:= RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + Version + '\Installer', 'Path');
end;
离线wanfu

发帖
2711
金钱
11950
威望
1195
只看该作者 6 发表于: 2016-12-19
更简单的,去掉 [Tasks] 段,因为上面的脚本不会显示任务。
[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DisableProgramGroupPage=yes
UninstallDisplayIcon={app}\MyProg.exe
OutputDir=userdocs:Inno Setup Examples Output

[Files]
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\5.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('5.0')
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\6.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('6.0')
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\7.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('7.0')
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\8.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('8.0')
Source: MyDll.dll; DestDir: {reg:HKLM32\SOFTWARE\Ulead Systems\9.0\Installer,Path}\plug; Flags: ignoreversion; check: CheckVersion('9.0')

[code]
function InitializeSetup (): Boolean;
  var
  i: integer;
  begin
    Result := False;
    for i := 5 to 9 do
      begin
      if RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + IntToStr(i) + '.0\Installer','Path') then begin
          Result := True;
          break;
      end;
    end;
    begin
      if Result = False then begin
          MsgBox('检测到没有安装原版,请先安装原版。', mbInformation, MB_OK);
      end;
  end;
end;

function CheckVersion(Version: string): Boolean;
begin
  MsgBox(Version, mbInformation, MB_OK);
  result:= RegValueExists(HKLM32, 'SOFTWARE\Ulead Systems\' + Version + '\Installer', 'Path');
end;

离线wszjf

发帖
26
金钱
260
威望
26
只看该作者 7 发表于: 2016-12-20
非常感谢以上两位教师的回复,认真消化一下,再回复您!
离线wszjf

发帖
26
金钱
260
威望
26
只看该作者 8 发表于: 2016-12-22
问题已解决,谢谢两位老师!