だから質問はこれです:私はここに戻って質問をしました:特定のフォルダにのみインストールを許可する方法は?
どうすれば少し変更できますか。たとえば、インストールするファイルが3つあり、そのうち2つはオプションであり、特定のファイル/フォルダーが存在する場合にのみインストールできるようにする必要があります。条件が満たされていない場合、リストでそれらを選択するオプションをグレー表示したいですか?
前もって感謝します。Zsolt
だから質問はこれです:私はここに戻って質問をしました:特定のフォルダにのみインストールを許可する方法は?
どうすれば少し変更できますか。たとえば、インストールするファイルが3つあり、そのうち2つはオプションであり、特定のファイル/フォルダーが存在する場合にのみインストールできるようにする必要があります。条件が満たされていない場合、リストでそれらを選択するオプションをグレー表示したいですか?
前もって感謝します。Zsolt
私は次のことをしようとします。コンポーネントのリスト項目にアクセスし、それらのインデックス (セクションの順序から取得した 0 から始まる番号) によってそれらを無効にしてチェックを外します[Components]
。フラグのないアイテム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;
上記のソリューションには、少なくとも 1 つの弱点があります。を True[Components]
に設定すると、セクションの元の順序からインデックスがシャッフルされる場合があります。使用しない場合は、上記のコードを使用するだけで十分かもしれComponentsList.Sorted
ません。使用する場合は、より複雑になります。
TSetupComponentEntry
コンポーネント名を取得する簡単な方法はなく (各項目の にオブジェクトとして内部的に保存されますItemObject
)、説明のみを取得する方法はありません。そのため、同じことを行う別の方法を示しますが、項目のインデックスは説明によって検索されます。指定。
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;