5

だから質問はこれです:私はここに戻って質問をしました:特定のフォルダにのみインストールを許可する方法は?

どうすれば少し変更できますか。たとえば、インストールするファイルが3つあり、そのうち2つはオプションであり、特定のファイル/フォルダーが存在する場合にのみインストールできるようにする必要があります。条件が満たされていない場合、リストでそれらを選択するオプションをグレー表示したいですか?

前もって感謝します。Zsolt

4

1 に答える 1

16

私は次のことをしようとします。コンポーネントのリスト項目にアクセスし、それらのインデックス (セクションの順序から取得した 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;
于 2012-04-23T16:04:44.160 に答える