Вопрос Как создать свои ключи командной строки?

AlexS

Новичок
Так не работает тоже. К тому же исчезает сам чекбокс компонента из компонент листа.
Код:
function HelpInst: Boolean;
begin
  if CheckParam('/IH') and CheckParam('/InstallHelp')
  then
  WizardForm.ComponentsList.Checked[1] := True;
  Result := True;
end;
Компонент снова виден в листе, но с ключами работать не хочет.
Чего этой собаке не хватает???
 

LexBell

Борода
Супер модератор
AlexS, чек дает не галочку на компоненте, а вообще его создание. В обоих твоих вариантах, отсутствие этого чека, даст тот-же результат, что и его наличие. HelpInst у тебя опять безусловно возвращает True. При любых раскладах. Result := True; - находится вне условия. возможно, поможет такая конструкция:
Код:
function HelpInst: Boolean;
begin
  Result := CheckParam('/IH') or CheckParam('/InstallHelp');
  WizardForm.ComponentsList.Checked[1]  := Result;
end;
опять-же, if CheckParam('/IH') and CheckParam('/InstallHelp') then - такая конструкция говорит, что условие сработает только в одном случае - если есть оба параметра.
 

AlexS

Новичок
Не едет и такая конструкция. Компилирую и при запуске инсталлятора получаю ошибку с текстом :"An attempt was made to access WizardForm before it has been created". Не приходит мне в голову никакое решение по этому вопросу. Два дня на месте кручусь, уже подумываю отказаться от сей идеи с компонентами и строить свой лист с чекбоксами, после чего вязять их на файлы напрямую.
LexBell, спасибо за помощь и отзывчивость!
 

LexBell

Борода
Супер модератор
AlexS, WizardForm.ComponentsList.Checked[1] := Result; убери эту строчку, она не нужна, там по другому нужно.
Check дает команду создавать или не создавать компонент. Внутри функции выделять компоненты немного неправильно.
Попробуй делать это внутри NextButtonClick на CurPageID = wpSelectComponents
либо внутри CurStepChanged на CurStep=ssPreInstall
 
Последнее редактирование:

AlexS

Новичок
LexBell, на счет выделения компонента внутри функции всё верно, т.к. перепробовал уже десятки вариантов и результат нулевой.
А вот проделать всё из какой-нить процедуры у меня была мысля раньше, но я отказался... И зря отказался, как выяснилось всё отлично работает и из процедур... Я сделал набросок решения через CurPageChanged, всё отработало с первого раза и без проблем(код ниже). Ещё раз спасибо за помощь, отзывчивость и наводку на решение задачи.
Код:
;InnoSetupVersion=5.5.1 ee2(a)
#define MyAppName "My Program"
#define MyAppVersion "1.1.1"

[Setup]
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName=C:\Users\User\Desktop\Test\Output
OutputBaseFilename=MySetup
DisableWelcomePage=yes
DisableDirPage=yes

[Types]
Name: "custom"; Description: "Custom installation"; Flags: iscustom;

[Components]
Name: "CompA"; Description: "{cm:CompLabelA}"; Types: "custom";
Name: "CompB"; Description: "{cm:CompLabelB}";


[Files]
Source: "{app}\ExeFile1.exe"; DestDir: "{app}"; Components: "CompA"; Flags: ignoreversion
Source: "{app}\HelpFile.chm"; DestDir: "{app}"; Components: "CompB"; Flags: ignoreversion

[Languages]
Name: "en"; MessagesFile: "compiler:Languages\english.isl";
Name: "ru"; MessagesFile: "compiler:Languages\russian.isl";

[CustomMessages]
ru.CompLabelA=Конвертер
ru.CompLabelB=Справка
en.CompLabelA=Converter
en.CompLabelB=Help

[_Code]

function CheckParam(s: string): boolean;
var
i: integer;
begin
for i := 0 to ParamCount do begin
Result := ParamStr(i) = s;
if Result then Break;
end;
end;
                                                      
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectComponents then
  if WizardSilent then
  begin
   if CheckParam('/NK') or CheckParam('/NoRegConverter') then
    begin
     WizardForm.ComponentsList.Checked[0] := False;
    end
      else
    begin
     WizardForm.ComponentsList.Checked[0] := True;
    end;
  end;
  begin
    if CheckParam('/IH') or CheckParam('/InstallHelp') then
    begin
     WizardForm.ComponentsList.Checked[1] := True;
    end
      else
    begin
     WizardForm.ComponentsList.Checked[1] := False;
    end;
  end;
end;
 

SBalykov

Старожил
AlexS
А если так ...
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
Case CurPageID of
 wpSelectComponents: begin
  if WizardSilent then begin
   if CheckParam('/NK') or CheckParam('/NoRegConverter') then
     WizardForm.ComponentsList.Checked[0]:= False else
     WizardForm.ComponentsList.Checked[0]:= True;
      end else begin
        if CheckParam('/IH') or CheckParam('/InstallHelp') then
        WizardForm.ComponentsList.Checked[1]:= True else
        WizardForm.ComponentsList.Checked[1]:= False;
      end;
    end;
  end;
end;
то условие скрытой и иной установки как бы выполняются...
Или так при скрытой установке...
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
Case CurPageID of
 wpSelectComponents: begin
  if WizardSilent then begin
   if CheckParam('/NK') or CheckParam('/NoRegConverter') then
     WizardForm.ComponentsList.Checked[0]:= False else
     WizardForm.ComponentsList.Checked[0]:= True;
   if CheckParam('/IH') or CheckParam('/InstallHelp') then
      WizardForm.ComponentsList.Checked[1]:= True else
      WizardForm.ComponentsList.Checked[1]:= False;
      end;
    end;
  end;
end;
 
Последнее редактирование:
Сверху