2012-04-23 13 views
4

そこで質問はこれです:私はここに戻って質問を :How to allow installation only to a specific folder?InnoSetupに特定のコンポーネントのみをインストールする方法を教えてください。

を例えば、私がインストールするには、3つのファイルを持っているので、どのように私は、それを少し変更することができ、それらの2はオプションであり、のみ利用可能であるべきです特定のファイル/フォルダが存在する場合、インストールする。私は、条件が満たされていない場合、リスト内でそれらを選択するオプションをグレーアウトしたいですか?

ありがとうございます。 Zsolt

+0

こんにちは、*グレーアウトオプションを選択する*コンポーネント選択リストで無効にすることを意味しますか? – TLama

+0

TLama:そうですね、それはまさに私が意味することです。しかし、条件が真であれば、インストールのためにそれらを選択できるはずです。 – user1320880

答えて

12

私は以下を実行しようとします。コンポーネントリスト項目にアクセスし、そのインデックスで無効にしたり、チェックを外したりします。[Components]セクションの順番から0から始まる数字は何ですか。 fixedフラグのないアイテム(この場合のような)は、デフォルトで有効になっているため、条件が満たされていないかどうかを確認する必要があります。また、この記事のcommented versionを確認することがあります。

[Components] 
Name: Component1; Description: Component 1 
Name: Component2; Description: Component 2 
Name: Component3; Description: Component 3 

[code] 
procedure CurPageChanged(CurPageID: Integer); 
begin 
    if CurPageID = wpSelectComponents then 
    if not SomeCondition then 
    begin 
     WizardForm.ComponentsList.Checked[1] := False; 
     WizardForm.ComponentsList.ItemEnabled[1] := False; 
     WizardForm.ComponentsList.Checked[2] := False; 
     WizardForm.ComponentsList.ItemEnabled[2] := False; 
    end; 
end; 

上記溶液は、少なくとも一つの弱点を持っています。 ComponentsList.SortedをTrueに設定すると、インデックスは[Components]セクションの元の注文からシャッフルされることがあります。
を使用しない場合は、上記のコードを使用すれば十分でしょう。はいの場合は、より複雑です。

コンポーネント名(各項目のItemObjectには内部でTSetupComponentEntryオブジェクトとして保存されています)を取得する簡単な方法はありませんが、説明のみですので、項目インデックスが異なる点指定された説明で検索されています。

procedure CurPageChanged(CurPageID: Integer); 
var 
    Index: Integer; 
begin 
    if CurPageID = wpSelectComponents then 
    if not SomeCondition then 
    begin 
     Index := WizardForm.ComponentsList.Items.IndexOf('Component 2'); 
     if Index <> -1 then 
     begin 
     WizardForm.ComponentsList.Checked[Index] := False; 
     WizardForm.ComponentsList.ItemEnabled[Index] := False; 
     end; 
     Index := WizardForm.ComponentsList.Items.IndexOf('Component 3'); 
     if Index <> -1 then 
     begin 
     WizardForm.ComponentsList.Checked[Index] := False; 
     WizardForm.ComponentsList.ItemEnabled[Index] := False; 
     end; 
    end; 
end; 
+1

ありがとうございました! – user1320880

+0

+1は 'WizardForm.ComponentsList'プロパティに言及しています。 – Fr0sT

関連する問題