Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Закрытая тема
Настройки темы
Скрипты Inno Setup. Помощь и советы [часть 4]

Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: Vadikan
Дата: 22-05-2012
Описание: Закрыто
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.4 [13.03.2010] - Скачать;


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:
Inno Setup [все вопросы] часть 1
Inno Setup [все вопросы] часть 2
Скрипты Inno Setup. Помощь и советы [часть 3]


Продолжение обсуждения
Скрипты Inno Setup. Помощь и советы [часть 5]

Отправлено: 18:01, 29-08-2011

 

Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Johny777,
1. либо ставь Тру либо удали блок
Код: Выделить весь код
function InitializeSetup(): Boolean;
begin
 Result:=True;
end;
Если InitializeSetup возвращает Фолсе инсталлер закрывается и не пискнет, а булевая функция возвращает Фолсе по-умолчанию если не задано иное.

2. Никак, в твоем архиве много мелких файлов, пока все переберет...
Но вот почему тупит когда файлов нет так это потому что у тебя цикл for i:= 0 to GetArrayLength(ArrayOfMask)-1 гоняется вхолостую
добавь перед ним условие "если есть твои папки тогда уже искать"
Он вообще у тебя коряво сделан, зачем ты в цикле перебираешь когда достаточно и без цикла просто
Код: Выделить весь код
  StartFolder:= ExpandConstant('{src}\..\common\half-life 2\hl2\SAVE'); // задаём папку откуда начинать поиск
  StartFolder2:= ExpandConstant('{src}\..\common\half-life 2 episode one\episodic\SAVE'); // задаём папку откуда начинать поиск
  StartFolder3:= ExpandConstant('{src}\..\common\half-life 2 episode two\ep2\SAVE'); // задаём папку откуда начинать поиск
  StartFolder4:= ExpandConstant('{src}\..\common\portal\portal\SAVE'); // задаём папку откуда начинать поиск
  Mask:= '*.sav'; if FindFile(StartFolder) then hl2_SAVE_Checkbox.Enabled := true;
  Mask:= '*.sav'; if FindFile(StartFolder2) then ep1_SAVE_CheckBox.Enabled := true;
  Mask:= '*.sav'; if FindFile(StartFolder3) then ep2_SAVE_CheckBox.Enabled := true;
  Mask:= '*.sav'; if FindFile(StartFolder4) then portal_SAVE_CheckBox.Enabled := true;
кстати я смотрю ты халфу собираешь? у тебя нет случаем HD текстур пака? раньше видел но не удосужился скачать, теперь хочу но не могу найти

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:45, 05-05-2012 | #1841



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


Цитата R.i.m.s.k.y.:
у тебя нет случаем HD текстур пака? »
читать дальше »

если ты о cinematicmod, то нету и не юзаю, тк считаю жуткой отсебятиной и надругательством над халфой
зеркал полно на http://cinematicmod.com/cm_11.php
других не знаю. Раньше они просто текстуры правили мелкими паками (если ты это имеешь в виду), а потом пошло поехало.
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Моя версия
Protocol version 15
Exe version 1.0.0.0 (hl2)
Exe build: 13:30:53 May 24 2010 (4216) (420)
вспомни они перенесли весь орандж бокс на сурс 15 протокола в свяpи с портом стима на Мак,
эти версии мы сейчас имеем
У меня чуть старее чем сейчас (ничего существенного после не обновляли зато вернули ави вместо бик видео в интро, а это плохо),
+ добавил это (правит баги после порта валве на обновлённый двиг и добавляем модели из эпизода 2 + HDR) (на что тебе и советую обратить внимание).
http://forums.steampowered.com/forum....php?t=1093025
вот скринов шлёпнул
читать дальше »


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


ну и мелкие фиксы меню игр, воронки эпизода 1 (этот фикс там же по ссылке на форумы стима).
После этого все 3 игры выглядят одинаково и на данный момент на уровень выше релизного эпизода 2

Последний раз редактировалось Johny777, 05-05-2012 в 18:42.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:21, 05-05-2012 | #1842


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Johny777, ну тогда сжимай получше, у меня канал тонкий

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 18:54, 05-05-2012 | #1843


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


R.i.m.s.k.y.,
будет прохладным летним вечером!

Отправлено: 19:00, 05-05-2012 | #1844


Ветеран


Сообщения: 510
Благодарности: 51

Профиль | Отправить PM | Цитировать


Всем привет,меня долго здесь не было по этому не знаю,выходили ли какие то новые версии iswin7 и isdone?

Отправлено: 14:28, 06-05-2012 | #1845


Аватара для alert30

Ветеран


Сообщения: 1088
Благодарности: 162

Профиль | Отправить PM | Цитировать


insombia, нет.

Отправлено: 14:30, 06-05-2012 | #1846


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


намутил пример (под свои нужды, но думаю кому-то пригодится )
имеем чекбокс отвечающий за установку например директа.
Если во внешней папке директ есть, то он (чекбокс) активен.
В противном случае не активен
Но тут проблема.
Что если инсталл на диске, а директа рядом нет?
тогда добавляется кнопка "показать"
Указываем и если по указанному пути директ есть, то пути передаются директории "откуда ставить" и "рабочей папке"

читать дальше »
Код: Выделить весь код
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={pf}\My Program
DirExistsWarning=no
DisableWelcomePage=yes

[  Code]
var
  NewButton1: TNewButton;
  QuickLaunchIcon: TCheckBox;
  Res: Integer;
  S: string;

function MakeQuickLaunchIcon: Boolean;
begin
  Result:=QuickLaunchIcon.Checked;
end;

procedure DirOnClick(Sender: TObject);
var
  DirEditString: String;
  
begin
  DirEditString := WizardForm.DirEdit.Text;
  if BrowseForFolder('Выберите папку из списка и нажмите «ОК»', S, True) then
    begin
      If FileExists(S+'\DXSETUP.exe') then QuickLaunchIcon.Enabled := true;
    end;
end;

procedure InitializeWizard();
begin

  WizardForm.OuterNotebook.Visible := false;
  WizardForm.Color := clWhite;
  WizardForm.Bevel.Visible := false;
  WizardForm.Caption:= 'DirectX Search Test';

  QuickLaunchIcon := TCheckBox.Create(WizardForm);
    with QuickLaunchIcon do
      begin
        Parent := WizardForm;
        Caption := 'Установить директ';
        Left := ScaleX(100);
        Top := ScaleY(160);
        Width := ScaleX(130);
        Height := ScaleY(25);
        TabOrder := 0;
        Checked := False;
        Enabled := False;
      end;
      
  NewButton1 := TNewButton.Create(WizardForm);
    with NewButton1 do
      begin
        Name := 'NewButton1';
        Parent := WizardForm;
        Left := QuickLaunchIcon.Left + QuickLaunchIcon.Width + ScaleX(10);
        Top := QuickLaunchIcon.Top;
        Width := ScaleX(160);
        Height := ScaleY(20);
        Caption := 'указать путь к DXSETUP.exe';
        OnClick := @DirOnClick;
      end;
      
   If FileExists(ExpandConstant('{src}\DirectX\DXSETUP.exe')) then QuickLaunchIcon.Enabled := true;
   
end;


procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpReady then
    begin
      If FileExists(ExpandConstant('{src}\DirectX\DXSETUP.exe')) and (QuickLaunchIcon.Checked = true) then                            ///// эти две строки имеют приоритет выше, тк идут первыми. 
      Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res);   /// Если пользователь считает, что лучше взять не тот что в комплекте то нижние 2 поменять с этими двумя, 
    end
  else  /// добавил, тк если снаружи видит и в пути есть устанавливал бы 2 раза
    begin
      If FileExists(S+'\DXSETUP.exe') and (QuickLaunchIcon.Checked = true) then
      Exec(S+'\DXSETUP.exe', '', S, SW_SHOW, ewWaitUntilTerminated, Res);
    end;
end;


procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm := False;
end;

Последний раз редактировалось Johny777, 07-05-2012 в 16:08.

Это сообщение посчитали полезным следующие участники:

Отправлено: 03:36, 07-05-2012 | #1847


Аватара для El Sanchez

Ветеран


Contributor


Сообщения: 1271
Благодарности: 1029

Профиль | Отправить PM | Цитировать


Цитата Johny777:
намутил пример (под свои нужды, но думаю кому-то пригодится »
Johny777, пара замечаний. Начнем сверху вниз:
  • Процедура DirOnClick. Кликаем кнопку, выбираем папку с директом, видим, что чекбокс стал активным, радуемся, кликаем еще раз, выбираем папку, где нет директа, видим, что чекбокс все равно активен, печалимся и меняем:
    Код: Выделить весь код
    If FileExists(S+'\DXSETUP.exe') then QuickLaunchIcon.Enabled := true;
    на
    QuickLaunchIcon.Enabled := FileExists(S+'\DXSETUP.exe');
  • Процедура InitializeWizard. При создании чекбокса свойство Enabled напиши как
    Код: Выделить весь код
    Enabled := FileExists(ExpandConstant('{src}\DirectX\DXSETUP.exe'));
    ...
    , а строку If FileExists(ExpandConstant('{src}\DirectX\DXSETUP.exe')) then QuickLaunchIcon.Enabled := true удалить
    У тебя это не ошибка, но строчкой кода меньше.
  • Процедура CurPageChanged. Удалить полностью. На wpReady {src}-овый директ будет запущен, хотя на wpReady ничего не должно запускаться. Вернись на страницу назад и снова на wpReady, снова пойдет установка. На остальных страницах при наличии директа в S тоже начнется установка. Сколько там страниц у Inno? И на каждой пойдет установка директа, поэтому CurPageChanged не годится. Запуск директа должен быть не раньше, чем пользователь нажмет кнопку Установить. Это либо использовать NextButtonClick (CurPageID = wpReady), либо CurStepChanged (CurStep=ssInstall).
    читать дальше »

    Код: Выделить весь код
    function NextButtonClick(CurPageID: Integer): Boolean;
    begin
      Result := True;
      case CurPageID of
        wpReady: begin
          if QuickLaunchIcon.Checked then
          begin
            if FileExists(ExpandConstant('{src}\DirectX\DXSETUP.exe')) then
              Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res)
            else if FileExists(S+'\DXSETUP.exe') then
              Exec(S+'\DXSETUP.exe', '', S, SW_SHOW, ewWaitUntilTerminated, Res);
          end;
        end;
      end;
    end;
    
    //либо
    procedure CurStepChanged(CurStep: TSetupStep);
    begin
      case CurStep of
        ssInstall: begin
          if QuickLaunchIcon.Checked then
          begin
            if FileExists(ExpandConstant('{src}\DirectX\DXSETUP.exe')) then
              Exec(ExpandConstant('{src}\DirectX\DXSETUP.exe'), '', ExpandConstant('{src}\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res)
            else if FileExists(S+'\DXSETUP.exe') then
              Exec(S+'\DXSETUP.exe', '', S, SW_SHOW, ewWaitUntilTerminated, Res);
          end;
        end;
      end;
    end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 15:38, 07-05-2012 | #1848


Аватара для Johny777

Ветеран


Сообщения: 649
Благодарности: 444

Профиль | Отправить PM | Цитировать


El Sanchez,
Спасибо за исправления!
Стало ещё проще и удобнее.
Цитата El Sanchez:
поэтому CurPageChanged не годится »
И не думал использовать. Только для демонстрации, чтоб инсталл не перезапускать
В скрипте халфы всё это выполняется на шаге ssPostInstall

вот так (пока ещё поиск директа и прочего не добавлял)
читать дальше »
Код: Выделить весь код
procedure CurStepChanged(CurStep: TSetupStep); 
var
  res: integer; 
begin
/// проценты установки /// часть 2 из 4 /// начало
if CurStep = ssInstall then
begin
  PercentsTimer:= SetTimer(0, 0, 100, WrapTimerProc(@PercentsProc, 4));
end;
/// конец
if CurStep = ssPostInstall then
begin
  s2_hl2:= hl2_Launch_Edit.Text;
  s1_hl2:= ExpandConstant('-steam -game hl2 -appid 220');
  if CurStep = ssPostInstall then 
  begin
  if hl2_icon_Checkbox.Checked then
    CreateShellLink(ExpandConstant('{commondesktop}\Half-Life 2.lnk'), '',
    ExpandConstant('{app}\common\half-life 2\hl2.exe'),s1_hl2 + s2_hl2, ExpandConstant('{app}\common\half-life 2'), ExpandConstant('{app}\common\half-life 2\hl2.ico'), 0, SW_SHOWNORMAL);
  end;
  s2_ep1:= ep1_Launch_Edit.Text;
  s1_ep1:= ExpandConstant('-steam -game episodic -appid 380');
  begin
  if hl2_ep1_icon_Checkbox.Checked then
    CreateShellLink(ExpandConstant('{commondesktop}\Half-Life 2 Episode One.lnk'), '',
    ExpandConstant('{app}\common\half-life 2 episode one\hl2.exe'),s1_ep1 + s2_ep1, ExpandConstant('{app}\common\half-life 2 episode one'), ExpandConstant('{app}\common\half-life 2 episode one\hl2.ico'), 0, SW_SHOWNORMAL);
  end;
  s2_ep2:= ep2_Launch_Edit.Text;
  s1_ep2:= ExpandConstant('-steam -game ep2 -appid 420');
  begin
  if hl2_ep2_Icon_CheckBox.Checked then
    CreateShellLink(ExpandConstant('{commondesktop}\Half-Life 2 Episode Two.lnk'), '',
    ExpandConstant('{app}\common\half-life 2 episode two\hl2.exe'),s1_ep2 + s2_ep2, ExpandConstant('{app}\common\half-life 2 episode two'), ExpandConstant('{app}\common\half-life 2 episode two\hl2.ico'), 0, SW_SHOWNORMAL);
  end;
  s2_portal:= portal_Launch_Edit.Text;
  s1_portal:= ExpandConstant('-steam -game portal -appid 400');
  begin
  if portal_Icon_CheckBox.Checked then
    CreateShellLink(ExpandConstant('{commondesktop}\Portal.lnk'), '',
    ExpandConstant('{app}\common\portal\hl2.exe'),s1_portal + s2_portal, ExpandConstant('{app}\common\portal'), ExpandConstant('{app}\common\portal\portal.ico'), 0, SW_SHOWNORMAL);
  end;
  /// задачи
  If hl2_borealis_CheckBox.Checked then   /// Aurora Borealis
  begin
    ExtractTemporaryFile('Aurora_Borealis.exe');
    Exec(ExpandConstant('{tmp}\Aurora_Borealis.exe'), '', ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
  /// обновления
  If hl2_update_Checkbox.Checked then
  begin
    FilesMemo.Lines.Add('/// Half-Life 2 ///');
    Exec(ExpandConstant('{src}\outer\update\hl2_update.exe'), '', ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
  If ep1_update_Checkbox.Checked then
  begin
    FilesMemo.Lines.Add('/// Half-Life 2 Episode One ///');
    Exec(ExpandConstant('{src}\outer\update\hl2_ep1_update.exe'), '', ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
  If ep2_update_Checkbox.Checked then
  begin
    FilesMemo.Lines.Add('/// Half-Life 2 Episode Two ///');
    Exec(ExpandConstant('{src}\outer\update\hl2_ep2_update.exe'), '', ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
  If portal_update_Checkbox.Checked then
  begin
    FilesMemo.Lines.Add('/// Portal ///');
    Exec(ExpandConstant('{src}\outer\update\portal_update.exe'), '', ExpandConstant('{app}'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
  /// директ и прочее
  If DirectX_Checkbox.Checked then
  begin
    FilesMemo.Lines.Add('/// Устанавливается DirectX ///');
    Exec(ExpandConstant('{src}\outer\DirectX\DXSETUP.exe'), '/silent', ExpandConstant('{src}\outer\DirectX'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
  If VisualC_Checkbox.Checked then
  begin
    FilesMemo.Lines.Add('/// Устанавливается VisualC++ ///');
    Exec(ExpandConstant('{src}\outer\VCRedist\vcredist_x86.exe'), '/q', ExpandConstant('{src}\outer\VCRedist'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
  
  If Font_Checkbox.Checked then
  begin
    FilesMemo.Lines.Add('/// Извлекаются шрифты ///');
    
    ExtractTemporaryFile('BOXROCKET.ttf');
    ExtractTemporaryFile('fontinst.exe');
    ExtractTemporaryFile('fontinst.inf');
    ExtractTemporaryFile('HALFLIFE2.ttf');
    ExtractTemporaryFile('HL2crosshairs.ttf');
    ExtractTemporaryFile('HL2EP2.ttf');
    ExtractTemporaryFile('marlett.ttf');
    
    FilesMemo.Lines.Add('/// Устанавливаются шрифты ///');
    Exec(ExpandConstant('{tmp}\fontinst.exe'), '/q', ExpandConstant('{tmp}'), SW_SHOW, ewWaitUntilTerminated, Res);
  end;
end;
end;


где FilesMemo это мемо со списоком извлекаемых файлов на странице установки

Последний раз редактировалось Johny777, 07-05-2012 в 16:15.


Отправлено: 15:48, 07-05-2012 | #1849


Пользователь


Сообщения: 90
Благодарности: 2

Профиль | Отправить PM | Цитировать


ребятушки подскажите пожалуйста как правильно текстурировать кнопку отмена на деинсталяторе
читать дальше »

[Setup]
SetupIconFile=1.ico
Diskspanning=yes
AppName=S.T.A.L.K.E.R. Зов Припяти.
AppVerName=S.T.A.L.K.E.R. Зов Припяти.
DefaultDirName={pf}\S.T.A.L.K.E.R. Зов Припяти.
DefaultGroupName=S.T.A.L.K.E.R. Зов Припяти.
DirExistsWarning=no
AppVersion=1.0
OutputBaseFilename=setup
OutputDir=.
VersionInfoCopyright=Me
AppPublisher=Square Enix
WizardImageFile=Files\WizardImage.bmp
WizardSmallImageFile=Files\WizardSmallImage.bmp
UninstallDisplayIcon=1.ico
ShowTasksTreeLines=true

[UninstallDelete]
Type: filesandordirs; Name: {app}


[Languages]
Name: russian; MessagesFile: Files\Russian.isl

[Tasks]
Name: desktopicon; Description: Создать значок на Рабочем столе; GroupDescription: Дополнительные значки:
Name: Redist; Description: Дополнительное программное обеспечение:
Name: Redist\DirectXCheck; Description: Обновить Microsoft DirectX; Flags: unchecked
Name: Redist\VCCheck; Description: Установить Microsoft Visual C++ Redist; Flags: unchecked


[Files]
Source: Files\button.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\papka.bmp; DestDir: {tmp}; Flags: dontcopy
Source: Files\Finishe.bmp; DestDir: {tmp}; Flags: dontcopy
Source: "Files\WizardSmallImage.bmp"; DestDir: "{app}"; Attribs: hidden system;



[Icons]
Name: "{group}\Запустить"; Filename: "{app}\MyProg.exe"
Name: "{group}\{cm:UninstallProgram}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\My Program"; Filename: "{app}\MyProg.exe"; Tasks: desktopicon


[Run]
Filename: {src}\Redist\DirectX\DXSETUP.exe; StatusMsg: Обновление компонентов DirectX...; Tasks: Redist\DirectXCheck; Flags: waituntilterminated; Parameters: "/silent";
Filename: "{src}\Redist\vcredist_x86.exe"; StatusMsg: "Установка Microsoft Visual C++ Redist..."; Tasks: Redist\VCCheck; Flags: waituntilterminated; Parameters: "/Q";


[Registry]
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; Flags: uninsdeletekeyifempty
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "InstallPath"; ValueType: String; ValueData: "{app}";
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "Version"; ValueType: String; ValueData: "1.0";
Root: HKLM; Subkey: "SOFTWARE\Deus Ex Human Revolution"; ValueName: "Language"; ValueType: String; ValueData: "Russian";



[code]
const
ButtonWidth = 80;
ButtonHeight = 23;
Color = clblack;

bidBack = 0;
bidNext = 1;
bidCancel = 2;
bidDirBrowse = 3;
bidGroupBrowse = 4;
bidbtnCancelUnpacking = 5;

var
WizardLabel: TLabel;
ButtonPanel: array of TPanel;
ButtonImage: array of TBitmapImage;
ButtonLabel: array of TLabel;
UsedButtons: array of TButton;
ButtonsCount: Integer;
NeedSize:Integer;
FreeMB, TotalMB: Cardinal;
NeedSpaceLabel,FreeSpaceLabel: TLabel;
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure GetFreeSpaceCaption(Sender: TObject);
var
Path: String;
begin
Path := ExtractFileDrive(WizardForm.DirEdit.Text);
GetSpaceOnDisk(Path, True, FreeMB, TotalMB);
if FreeMB > 1024 then
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ FloatToStr(round(FreeMB/1024*100)/100) + ' Гб' else
FreeSpaceLabel.Caption := 'Доступно места на диске: '+ IntToStr(FreeMB)+ ' MB';
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled := False else
WizardForm.NextButton.Enabled := True; end;

procedure GetNeedSpaceCaption;
begin
if NeedSize > 1024 then
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ FloatToStr(round(NeedSize/1024*100)/100) + ' Гб' else
NeedSpaceLabel.Caption := 'Требуется места на диске: '+ IntToStr(NeedSize)+ ' MB';end;


procedure InitializeWizard1();
begin
NeedSize := 8610;
WizardForm.DiskSpaceLabel.Hide;

NeedSpaceLabel := TLabel.Create(WizardForm);
with NeedSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(202);
Width := ScaleX(209);
Height := ScaleY(13);
end;

FreeSpaceLabel := TLabel.Create(WizardForm);
with FreeSpaceLabel do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(0);
Top := ScaleY(220);
Width := ScaleX(209);
Height := ScaleY(13);
end;

WizardForm.DirEdit.OnChange := @GetFreeSpaceCaption;
WizardForm.DirEdit.Text := WizardForm.DirEdit.Text + #0;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure ButtonLabelClick(Sender: TObject);
var Button: TButton; n, i: Integer;
begin
i:= TLabel(Sender).Tag; ButtonImage[i].Left:= 0
for n:=0 to (ButtonsCount-1) do begin
if i = n then Button:= UsedButtons[n];
end;
Button.OnClick(Button)
end;

procedure ButtonLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=-ButtonWidth*2
end;

procedure ButtonLabelMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if ButtonLabel[TLabel(Sender).Tag].Enabled then ButtonImage[TLabel(Sender).Tag].Left:=0
end;

procedure ButtonLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n, I: Integer;
begin
I:=TLabel(Sender).Tag;
for n:=0 to (ButtonsCount-1) do begin if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2)and(I<>N) then ButtonImage[n].Left:= 0; end;
if (ButtonLabel[i].Enabled)and(ButtonImage[i].Left <> -ButtonWidth*2) then begin ButtonImage[i].Left:= -ButtonWidth; end;
end;

procedure WizardLabelMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var n: Integer;
begin
for n:=0 to (ButtonsCount-1) do if (ButtonLabel[n].Enabled)and(ButtonImage[n].Left <> -ButtonWidth*2) then begin ButtonImage[n].Left:= 0; end;
end;

procedure LoadButtonImage(AButton: TButton);
var n: Integer;
begin
n:=ButtonsCount; SetArrayLength(ButtonPanel, n+1);
SetArrayLength(ButtonImage, n+1); SetArrayLength(ButtonLabel, n+1);
SetArrayLength(UsedButtons, n+1); UsedButtons[n]:= AButton;
ButtonPanel[n]:=TPanel.Create(WizardForm)
ButtonPanel[n].SetBounds(AButton.Left, AButton.Top, AButton.Width, AButton.Height)
ButtonPanel[n].Tag:= n
ButtonPanel[n].Enabled:= AButton.Enabled
ButtonPanel[n].Parent:=AButton.Parent
ButtonImage[n]:=TBitmapImage.Create(WizardForm)
ButtonImage[n].SetBounds(ScaleX(0), ScaleY(0), ScaleX(320), ScaleY(23))
ButtonImage[n].Enabled:=False
ButtonImage[n].Bitmap.LoadFromFile(ExpandConstant('{tmp}\Button.bmp'))
ButtonImage[n].Parent:=ButtonPanel[n]
with TLabel.Create(WizardForm) do begin
Tag:=n
Parent:=ButtonPanel[n]
Width:=AButton.Width
Height:=AButton.Height
Transparent:=True
OnClick:=@ButtonLabelClick
OnDblClick:=@ButtonLabelClick
OnMouseMove:=@ButtonLabelMove
OnMouseDown:=@ButtonLabelMouseDown
OnMouseUp:=@ButtonLabelMouseUp
end;

ButtonLabel[n]:=TLabel.Create(WizardForm)
ButtonLabel[n].Autosize:=True
ButtonLabel[n].Alignment:=taCenter
ButtonLabel[n].Tag:=n
ButtonLabel[n].Enabled:= AButton.Enabled
ButtonLabel[n].Transparent:=True
ButtonLabel[n].Font.Color:=clWhite
ButtonLabel[n].Caption:=AButton.Caption
ButtonLabel[n].OnClick:=@ButtonLabelClick
ButtonLabel[n].OnDblClick:=@ButtonLabelClick
ButtonLabel[n].OnMouseMove:=@ButtonLabelMove
ButtonLabel[n].OnMouseDown:=@ButtonLabelMouseDown
ButtonLabel[n].OnMouseUp:=@ButtonLabelMouseUp
ButtonLabel[n].Parent:=ButtonPanel[n]
ButtonsCount:= ButtonsCount+1
end;

procedure UpdateButtons();
var n: Integer;
begin
for n:=0 to ButtonsCount-1 do begin
ButtonLabel[n].Caption:=UsedButtons[n].Caption
ButtonPanel[n].Visible:=UsedButtons[n].Visible
if (UsedButtons[n].Enabled = False) then ButtonImage[n].Left:= -ButtonWidth*3 else ButtonImage[n].Left:= 0;
ButtonLabel[n].Enabled:= UsedButtons[n].Enabled;
ButtonPanel[n].Enabled:= UsedButtons[n].Enabled;
ButtonLabel[n].Left:= ButtonPanel[n].Width div 2 - ButtonLabel[n].Width div 2;
ButtonLabel[n].Top:= ButtonPanel[n].Height div 2 - ButtonLabel[n].Height div 2;
end;
end;

procedure LicenceAcceptedRadioOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled:= True;
UpdateButtons();
end;

procedure LicenceNotAcceptedRadioOnClick(Sender: TObject);
begin
WizardForm.NextButton.Enabled:= False;
UpdateButtons()
end;

procedure ButtonTextures();
begin
WizardLabel:= TLabel.Create(WizardForm)
WizardLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(WizardForm.Width), ScaleY(WizardForm.Height))
WizardLabel.Transparent:= True;
WizardLabel.AutoSize:=false;
WizardLabel.OnMouseMove:=@WizardLabelMove
WizardLabel.Parent:= WizardForm;

WizardForm.BackButton.Width:= ButtonWidth
WizardForm.BackButton.Height:= ButtonHeight

WizardForm.NextButton.Width:= ButtonWidth
WizardForm.NextButton.Height:= ButtonHeight

WizardForm.CancelButton.Width:=ButtonWidth
WizardForm.CancelButton.Height:= ButtonHeight

WizardForm.DirBrowseButton.Left:=ScaleX(337)
WizardForm.DirBrowseButton.Width:= ButtonWidth
WizardForm.DirBrowseButton.Height:=ButtonHeight

WizardForm.GroupBrowseButton.Left:=ScaleX(337)
WizardForm.GroupBrowseButton.Width:= ButtonWidth
WizardForm.GroupBrowseButton.Height:=ButtonHeight

WizardForm.LicenseAcceptedRadio.OnClick:=@LicenceAcceptedRadioOnClick
WizardForm.LicenseNotAcceptedRadio.OnClick:=@LicenceNotAcceptedRadioOnClick

ExtractTemporaryFile('button.bmp')
LoadButtonImage(WizardForm.BackButton)
LoadButtonImage(WizardForm.NextButton)
LoadButtonImage(WizardForm.CancelButton)
LoadButtonImage(WizardForm.DirBrowseButton)
LoadButtonImage(WizardForm.GroupBrowseButton)

WizardForm.DirEdit.OnChange:= @GetFreeSpaceCaption;
WizardForm.DirEdit.Text:= WizardForm.DirEdit.Text + #0;
end;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
procedure InitializeWizard2();
begin
WizardForm.Font.Color:=clWhite;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=Color;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
end;

var
WelcomeLabel1, WelcomeLabel2, FinishedLabel, FinishedHeadingLabel: TLabel;
PageNameLabel: TLabel;

procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=True;
end;

procedure Labels();
begin
WelcomeLabel1:= TLabel.Create(WizardForm);
WelcomeLabel1.AutoSize:= False;
with WizardForm.WelcomeLabel1 do
WelcomeLabel1.SetBounds(Left, Top, Width, Height);
WelcomeLabel1.Left:=240
WelcomeLabel1.Top
WelcomeLabel1.Width:=230
WelcomeLabel1.Height:=200
WelcomeLabel1.Font:= WizardForm.WelcomeLabel1.Font
WelcomeLabel1.Font.Color:= clWhite;
WelcomeLabel1.Transparent:= True;
WelcomeLabel1.WordWrap:= true;
WelcomeLabel1.Caption:= WizardForm.WelcomeLabel1.Caption;
WelcomeLabel1.Parent:= WizardForm.WelcomePage

WelcomeLabel2:= TLabel.Create(WizardForm);
WelcomeLabel2.AutoSize:= False;
with WizardForm.WelcomeLabel2 do
WelcomeLabel2.SetBounds(Left, Top, Width, Height);
WelcomeLabel2.Left:=240
WelcomeLabel2.Top:=100
WelcomeLabel2.Width:=230 //СЖИМАЕТ ТЕКСТ
WelcomeLabel2.Height
WelcomeLabel2.Font:= WizardForm.WelcomeLabel2.Font
WelcomeLabel2.Font.Color:= clWhite;
WelcomeLabel2.Transparent:= True;
WelcomeLabel2.WordWrap:= true;
WelcomeLabel2.Caption:= WizardForm.WelcomeLabel2.Caption;
WelcomeLabel2.Parent:= WizardForm.WelcomePage

WizardForm.WizardSmallBitmapImage.SetBounds(ScaleX(0), ScaleY(0), WizardForm.MainPanel.Width, WizardForm.MainPanel.Height);

PageNameLabel:= TLabel.Create(WizardForm)
with WizardForm.PageNameLabel do
PageNameLabel.SetBounds(Left, Top, Width, Height);
PageNameLabel.Transparent:= True;
PageNameLabel.Font:= WizardForm.PageNameLabel.Font;
PageNameLabel.Font.Color:= clWhite; //цвет надписи
PageNameLabel.Parent:= WizardForm.MainPanel;


FinishedHeadingLabel:= TLabel.Create(WizardForm);
FinishedHeadingLabel.AutoSize:= False;
with WizardForm.FinishedHeadingLabel do
FinishedHeadingLabel.SetBounds(ScaleX(30), ScaleY(20), ScaleX(200), ScaleY(220));
FinishedHeadingLabel.Left:=240
FinishedHeadingLabel.Top
FinishedHeadingLabel.Width:=230
FinishedHeadingLabel.Height:=200
FinishedHeadingLabel.Font:= WizardForm.FinishedHeadingLabel.Font
FinishedHeadingLabel.Font.Color:= clWhite;
FinishedHeadingLabel.Transparent:= True;
FinishedHeadingLabel.WordWrap:= true;
FinishedHeadingLabel.Parent:= WizardForm.FinishedPage

FinishedLabel:= TLabel.Create(WizardForm);
FinishedLabel.AutoSize:= False;
with WizardForm.FinishedLabel do
FinishedLabel.SetBounds(ScaleX(30), ScaleY(120), ScaleX(130), ScaleY(220));
FinishedLabel.Left:=240
FinishedLabel.Top:=100
FinishedLabel.Width:=230 //СЖИМАЕТ ТЕКСТ
FinishedLabel.Height
FinishedLabel.Font:= WizardForm.FinishedLabel.Font
FinishedLabel.Font.Color:= clWhite;
FinishedLabel.Transparent:= True;
FinishedLabel.WordWrap:= true;
FinishedLabel.Parent:= WizardForm.FinishedPage

WizardForm.PageNameLabel.Hide;
WizardForm.PageDescriptionLabel.Hide;
WizardForm.FilenameLabel.Hide;
WizardForm.WelcomeLabel1.Hide;
WizardForm.WelcomeLabel2.Hide;
WizardForm.FinishedLabel.Hide;
WizardForm.FinishedHeadingLabel.Hide;
end;

procedure InitializeWizard3();
Begin
ButtonTextures();
Labels();
ExtractTemporaryFile('Finishe.bmp');
WizardForm.WizardBitmapImage.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Width:= ScaleX(497);
WizardForm.WizardBitmapImage2.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Finishe.bmp'));
ExtractTemporaryFile('papka.bmp');
WizardForm.SelectDirBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectDirBitmapImage.AutoSize:=true;
WizardForm.SelectGroupBitmapImage.Bitmap.LoadFromFile(ExpandConstant('{tmp}\papka.bmp'));
WizardForm.SelectGroupBitmapImage.AutoSize:=true;
end;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Procedure CurPageChanged2(CurPageID: Integer);
Begin
UpdateButtons();
PageNameLabel.Caption:= WizardForm.PageNameLabel.Caption;
FinishedLabel.Caption:= WizardForm.FinishedLabel.Caption;
FinishedHeadingLabel.Caption:= WizardForm.FinishedHeadingLabel.Caption;
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
begin
WizardForm.NextButton.Enabled := False;
ButtonLabel[bidNext].Enabled := False;
ButtonPanel[bidNext].Enabled := False;
end;
end;
end;

procedure InitializeUninstallProgressForm;
begin
FileCopy(ExpandConstant('{app}\WizardSmallImage.bmp'), ExpandConstant('{tmp}\WizardSmallImage.bmp'), False);
UninstallProgressForm.Color:=Color;
UninstallProgressForm.InnerPage.Color:=Color;
UninstallProgressForm.MainPanel.Color:=Color;
UninstallProgressForm.PageNameLabel.Color:=Color;
UninstallProgressForm.PageDescriptionLabel.Hide;
UninstallProgressForm.PageNameLabel.Font.Color:=clWhite;
UninstallProgressForm.PageNameLabel.Width:=ScaleX(300);
UninstallProgressForm.StatusLabel.Color:=Color;
UninstallProgressForm.StatusLabel.Font.Color:=clWhite;


with UninstallProgressForm.WizardSmallBitmapImage do
begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}\WizardSmallImage.bmp'));
SetBounds(ScaleX(335), ScaleY(2), ScaleX(160), ScaleY(50));
end;
end;

procedure InitializeWizard();
begin
InitializeWizard1();
InitializeWizard2();
InitializeWizard3();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged2(CurPageID);
if CurPageID=wpSelectDir then
begin
GetNeedSpaceCaption;
if FreeMB < NeedSize then
WizardForm.NextButton.Enabled:=False
end;
end;

Отправлено: 18:15, 07-05-2012 | #1850



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Test ferget Тест-форум 0 24-08-2011 01:25
test ! ! Aaa ! ! Тест-форум 0 23-04-2011 11:29
test Santa aka Snt Тест-форум 0 16-04-2011 22:35
test xolod. Программное обеспечение Linux и FreeBSD 0 19-04-2009 21:03
Test memory KEugeNik Хочу все знать 11 23-11-2003 23:11




 
Переход