Вопрос Как сделать проверку на запуск приложения в секции [Run] через CheckBox?

Yaroslav950

Новичок
Здравствуйте, создал на последней завершаюшей странице Checkbox,чтобы запустить или не запустить приложение. В секции run Filename: "{app}\{#Exe}"; WorkingDir: {app}; Check: Run; - попробывал добавить Flag (не работает),если я убираю Check: Run,то работает, но запускает даже при не выборе запустить приложение, и чтобы установщик закрывался когда пользователь выбрал Запустить приложение.
 

Вложения

Nemko

Дилетант
Модератор
Yaroslav950,
Код:
[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={sd}\Test

[Run]
Filename: "{win}\notepad.exe"; WorkingDir: "{win}"; Check: "MyCheck";

[Code]
var
  MyCheckBox: TNewCheckBox;

function MyCheck: Boolean;
begin
  Result:=MyCheckBox.Checked;
end;

procedure InitializeWizard;
begin
  MyCheckBox:=TNewCheckBox.Create(WizardForm);
  with MyCheckBox do begin
    Parent := WizardForm;
    SetBounds(20, 354, 97, 17);
    Caption:='MyCheckBox';
  end;
end;
 

Yaroslav950

Новичок
Код:
[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={sd}\Test

[Run]
Filename: "{win}\notepad.exe"; WorkingDir: "{win}"; Check: "MyCheck";   - Здесь что прописать.

[CustomMessages]
russian.Run=Запустить игру: Spider
russian.Finished=Завершение Мастера установки игры: {#GameName}.%nИгра {#GameVerName} установлена на ваш компьютер.%nПриложение можно запустить с помощью соответствующего значка или запустить с помощью установщика.%nНажмите «Завершить», чтобы выйти из программы установки.
russian.Finished2=Установка игры  {#GameVerName} не завершена.%nПожалуйста, устраните проблему и запустите установку снова.%nНажмите «Завершить», чтобы выйти из программы установки.

[Code]
var
  RunLabel: TLabel;
  RunCheck : HWND;

function Run: Boolean;
begin
  Result:= BtnGetChecked(RunCheck);
end;

procedure RunClick(hBtn:HWND);
begin
  if BtnGetChecked(hBtn) then RunLabel.Font.Color:=$00FFFF else RunLabel.Font.Color:=$FFFFFF;
end;

procedure RunLabelClick(Sender:TObject);
begin
  BtnSetChecked(RunCheck, not BtnGetChecked(RunCheck));
  RunClick(RunCheck);
end;

procedure InitializeWizard;
begin

  RunCheck:=BtnCreate(WizardForm.Handle,ScaleX(180),ScaleY(273),ScaleX(24),ScaleY(24),ExpandConstant('{tmp}\CheckBox.png'),8,True);
  BtnSetEvent(RunCheck,BtnClickEventID,WrapBtnCallback(@RunClick,1));
  BtnSetCursor(RunCheck,GetSysCursorHandle(32649));

  RunLabel := TLabel.Create(WizardForm);
  with RunLabel do begin
    AutoSize:=False;
    SetBounds(ScaleX(210), ScaleY(280), ScaleX(450), ScaleY(17));
    OnClick:= @RunLabelClick;
    Cursor:= CrHand;
    Transparent:=True;
    Font.Name:= 'Time New Roman'
    Font.Size:= 8;
    Font.Color:=$FFFFFF;
    Font.Style:=[fsBold,fsItalic];
    Caption := ExpandConstant('{cm:Run}');
    Parent := WizardForm;
  end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
BtnSetVisibility(RunCheck,False);
RunLabel.Hide;
case CurPageID of
wpFinished:
    begin
    if not ISDoneError then RunLabel.Show else CaptionLabel.Caption:= ExpandConstant('{cm:Finished2}');
    if not ISDoneError then  BtnSetVisibility(RunCheck,True) else CaptionLabel.Caption:= ExpandConstant('{cm:Finished2}');
    end;
end;
end;

Все-таки скрипт у меня на Botva. Вырвал кусочек кода. Не работает. Я написал может там флаг нужен. Выбираю Flags: postinstall nowait skipifsilent он устанавливает,всегда даже когда пользователь не захотел запускать приложение в конце установщика.
 
Последнее редактирование:

Nemko

Дилетант
Модератор
Yaroslav950, нужен параметр Check, но с другой функцией внутри:
Код:
[Setup]
AppName=Test
AppVersion=1.5
DefaultDirName={sd}\Test

[Files]
Source:"Files\*"; Flags: "dontcopy";

[Run]
Filename: "{win}\notepad.exe"; WorkingDir: "{win}"; Check: "MyCheck";

[Modules]
#include "Modules\botva2.iss"

[Code]
var
  RunCheck : HWND;

function MyCheck: Boolean;
begin
  Result:=CheckBoxGetChecked(RunCheck);
end;

procedure InitializeWizard;
begin
  with WizardForm do begin
    ExtractTemporaryFile('botva2.dll');
    RunCheck:=CheckBoxCreate(Handle, 10, 352, 100, 24, 'CheckBox.png', 0, 10);
    CheckBoxSetText(RunCheck, 'RunCheck');
  end;
end;
 

Yaroslav950

Новичок
@Nemko,
CheckBoxGetChecked - в ботве такая функция разве есть или у меня botva не та (South.Tver версия 09.05. 02.2011).? Пишет неизвестный индитефикатор. Кусочек кода, который я прописал он не будет работать(я имею виду на финишной странице завершить) ?.
 

Yaroslav950

Новичок
@Nemko,50на 50, конфликт идёт c Bass_Module. На обычном шаблоне норм.В установщик начинаю пихать идут ошибки,то не находит сам checkbox.png, то бас модулем проблемы,то какие-то ошибки. Может Dll надо обновлять. У меня есть сам модуль ботва,чутка дописанный,но нужена botva2.dll созданная по botva2.iss (как создать Dll?)
 

Вложения

Последнее редактирование:

ZVSRus

Участник
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=.

[Files]
Source: "compiler:\Examples\MyProg.exe"; DestDir: "{app}"; Flags: ignoreversion

[Code]
var
  NewCheckBox1: TNewCheckBox;

function MyCheck: Boolean;
begin                                                
   Result:= NewCheckBox1.Checked;
end;

procedure CurStepChanged(CurStep: TSetupStep);                                                                            
var                                                                                                                        
  ResultCode: Integer;                                                                                                    

begin                                                                                                                      
  if CurStep = ssDone then if MyCheck then
  begin
    Exec(ExpandConstant('{pf}\My Application\MyProg.exe'), '', '', SW_SHOW, ewNoWait, ResultCode);
  end;
end;

procedure InitializeWizard();
begin
  NewCheckBox1 := TNewCheckBox.Create(WizardForm);
  with NewCheckBox1 do
  begin
    Parent := WizardForm.FinishedPage;
    SetBounds(ScaleX(176),ScaleY(230),ScaleX(140),ScaleY(17));
    Caption := 'Запустить приложение';
  end;
end;
 
Последнее редактирование:

Yaroslav950

Новичок
@ZVSRus,У вас хорошо получилось,да и работает код. Надо было лишь добавить всего-лишь одну строку вместо
MyCheck всунуть свое название и заработало!!! Даже секция Run не потребовалась.:p.
 
Последнее редактирование:

Yaroslav950

Новичок
@Nemko, Checkbox конфликтирует с Btn, то есть пользователь должен решить либо использовать Checkbox либо Btn, у меня весь скрипт написан на Btn. Может я и ошибаюсь?. Зачем надо было добавлять Checkbox в ботву? (название и структура самого скрипта одинаково как и у Btn или там что-то новое?).
 

Nemko

Дилетант
Модератор
Зачем надо было добавлять Checkbox в ботву?
Yaroslav950, пускай Btn и CheckBox это окна со стилем WS_EX_TRANSPARENT и оба имеют параметр Checked, но все же CheckBox в библиотеке реализован схоже с TCheckBox: имеет возможность создавать группы GroupID и визуальную идентичность. А насчет, что с чем конфликтует - не удивлен, что тема ушла от поставленного вопроса.
 
Сверху