2017-06-02 68 views
1

其實,我只需要看看它是否是1或更多。以下是我打算使用它:Inno Setup - 查看選擇了多少組件

if [Only one component is selected] then 
begin 
    Result := CustomMessage('[Name of that component]'); 
    if IsComponentSelected('[Specific Component]') then 
    begin 
    if IsTaskSelected('[Task]') then 
    begin 
     Result := CustomMessage('[Name of that task]'); 
    end 
    end 
end 
if [More than one component is selected] then 
begin 
    Result := 'Full Feature';// or '{#SetupSetting("AppName")}' 
end; 

我想我知道至少有一個「變通」的方式來做到這一點,但我不知道這是否可以用更傳統的Inno方式來完成(和更清潔碼)。

----- -----編輯

最終功能使用馬丁斯回答:

function UninstallName(Value: string): string; 
begin 
    if GetSelectedComponentsCount = 1 then 
    begin 
    Result := CustomMessage(WizardSelectedComponents(False)); 
    if IsComponentSelected('bc2') then 
    begin  
     if IsTaskSelected('bc2tp2') then 
     begin 
     Result := CustomMessage('bc2tp2'); 
     end; 
    end; 
    if Pos(':',Result) > 1 then 
    StringChangeEx(Result, ':', ' -', False) 
    end; 
    if GetSelectedComponentsCount > 1 then 
    begin 
    Result := '{#SetupSetting("AppName")}'; 
    end; 
end; 
+1

下一次,我們展示您的解決方法。這是你的責任,展示,你已經嘗試過了! –

回答

2

檢查WizardForm.ComponentsList

function GetSelectedComponentsCount: Integer; 
var 
    I: Integer; 
begin 
    Result := 0; 
    for I := 0 to WizardForm.ComponentsList.Items.Count - 1 do 
    begin 
    if WizardForm.ComponentsList.Checked[I] then 
     Result := Result + 1; 
    end; 
end; 

你也可以算在WizardSelectedComponents元素個數:

function GetSelectedComponentsCount: Integer; 
var 
    S: TStringList; 
begin 
    S := TStringList.Create(); 
    S.CommaText := WizardSelectedComponents(False); 
    Result := S.Count; 
    S.Free; 
end; 

(計算逗號會更有效率,並略少的代碼,但神祕的理解。)

+1

'GetSelectedComponentsCount'對我來說非常有用。謝謝。我的「解決方法」類似於你的第二個答案(使用WizardSelectedComponents),但是遠遠不夠緊湊。 –