Inno Setup (создание инсталяционных пакетов). Часть 3

Статус
В этой теме нельзя размещать новые ответы.

LexBell

Борода
Супер модератор
RUSSIA_23, при установке дополнительного софта, inno умеет обнаруживать необходимость перезагрузки.
 

AntiAngel

Новичок
У меня вот такой вопросец:
Создал две текстурные кнопки
Можно ли как нибудь написать процедуру для них чтоб при нажатии на одну из них выбрался определенный чекбокс из [Components] а если выбрать другую то этот отключался и выбирался другой?
Подскажите как это сделать.
 

Mailchik

Старожил
Проверенный
AntiAngel,
[SOURCE="inno"][Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: Test1; Description: Первый компонент;
Name: Test2; Description: Второй компонент;
Name: Test3; Description: Третий компонент;

Код:
var
 FirstButton, SecondButton : TButton;

procedure FirstClick(Sender : TObject);
 begin
  with WizardForm.ComponentsList do begin
   Checked[0] := True;
   Checked[1] := False;
   Checked[2] := True;
  end;
end;

procedure SecondClick(Sender : TObject);
 begin
  with WizardForm.ComponentsList do begin
   Checked[0] := False;
   Checked[1] := True;
   Checked[2] := False;
  end;
end;

procedure InitializeWizard;
 begin
  WizardForm.ComponentsDiskSpaceLabel.Hide;
  FirstButton := TButton.Create(WizardForm);
  with FirstButton do begin
   Parent := WizardForm.SelectComponentsPage;
   SetBounds(ScaleX(10), ScaleY(205), ScaleX(80), ScaleY(25));
   OnClick := @FirstClick;
   Caption := 'Первая';
  end;
  SecondButton := TButton.Create(WizardForm);
  with SecondButton do begin
   Parent := WizardForm.SelectComponentsPage;
   SetBounds(ScaleX(300), ScaleY(205), ScaleX(80), ScaleY(25));
   OnClick := @SecondClick;
   Caption := 'Вторая';
  end;
end;[/SOURCE][/SPOILER]Нужные вам процедуры: [B]FirstClick, SecondClick.[/B].
 

RUSSIA_23

Новичок
Доброго времени суток!
Я начинающий репакер, и хотел бы спросить совета (или точнее сказать - помощи).
Я хочу сделать нормальный репак, но мне не хватает функции, типо "Осталось времени до конца установки".
Очень хотелось бы узнать, как это можно реализовать... Что надо вставить в скрипт? И куда вставить?
Надеюсь на Вашу помощь и доброту!
Мой скрипт: http://rghost.ru/41088434
 

ilzok17

Новичок
Уважаемые специалисты у меня к Вам мольба о помощи!Делаю инсталляторы и вроде всё работает но одна проблема:не сделать прозрачным фон текстов с окошками для галочек,таких как:"Установить икону" и т.д.Вижу в других стоит это:Transparent:=True;но как использовать не знаю.Редактором форм получается изменить только цвет,сам шрифт и т.д.
Искал везде и ответ один и тот же - "Это уже обсуждалось,поищи в интернете" - как все сговорились,как будто какая то военная тайна.Не посылайте меня пожалуйста куда подальше,я ещё новичок,но очень хочется победить эту проблему.Заранее очень признателен и благодарен.Только если можно по подробней.
 

YURSHAT

Тех. админ
Администратор
ilzok17, не переживайте, все мы были новичками ;)

Вот Вам примерчик
 

YURSHAT

Тех. админ
Администратор
сейчас буду пробовать объединить мой с этим
мой скрипт лишь пример, что бы вы поняли принцип создания прозрачного текста, а также чекбоксов. Поэтому советую внимательно изучить, что и для чего там сделано.

ЗЫ. Для спасибо есть кнопочка ;)
 

ilzok17

Новичок
мой скрипт лишь пример, что бы вы поняли принцип создания прозрачного текста, а также чекбоксов. Поэтому советую внимательно изучить, что и для чего там сделано.

ЗЫ. Для спасибо есть кнопочка ;)
Да,попробовал разобраться но к сожалению пока мало что понял.Я просто вычитал на одном сайте что достаточно добавить 3-4 строчки в уже готовый и оформленный скрипт чтобы появилась прозрачность фона этих надписей,ну там где это нужно ещё дописывать Transparent:=True;.Почему то всё основное оказалось довольно не сложно(FreeArc,музыка,слайд-шоу,заставка,формы и т.д.),а такая,казалось бы мелочь как прозрачный фон этих надписей всё стопорит,а этот фон,не зависимо какой цвет ему придаёшь - всё портит.
 

YURSHAT

Тех. админ
Администратор
а такая,казалось бы мелочь как прозрачный фон этих надписей всё стопорит,а этот фон,не зависимо какой цвет ему придаёшь - всё портит.
Мне кажется я понял в чем причина вашего негодования :)
Стандартные "надписи" в инно НЕЛЬЗЯ сделать прозрачными, так как все они выполнены используя элемент TStaticText. TStaticText НЕ имеет такого атрибута как Transparent. Поэтому скриптеры и делают финт ушами :), а именно, скрывают стандартные надписи и создают новые, используя элемент TLabel, фон текста которого, может быть прозрачным.
Видимо вы не очень хорошо смотрели пример. Я там именно так и сделал, скрыл стандартную надпись "Вас приветствует бла-бла"
[SOURCE="iss"]WelcomeLabel1.Hide;
WelcomeLabel2.Hide;[/SOURCE]
И создал вместо них свою надпись используя элемент TLabel, которому присвоил те же координаты и текст.
Думаю вы поняли о чем я (если конечно причина в этом :))
 

nik1967

Old Men
Проверенный
YURSHAT, ilzok17, ну или воспользоваться модулем TransparentStatic
;модуль позволяющий добавить к TNewStaticText прозрачность
;автор - [USER]South[/USER].Tver
Я лишь убрал из него CallbackCtrl.dll
Компилировать только на расширенной китайской версии.
Хотя, если честно, то тоже через .опу
[MOD="Snoopak96"]РГХост не вечный ;) да и тут он давно есть
Скачать TransparentStatic[/MOD]
 
Последнее редактирование модератором:

AntiAngel

Новичок
Прошу помощи) У меня вопросeц:
Что надо прописать в ветке реестра чтобы он не устанавливался в раздел Wow6432Node если ось x64
 
Последнее редактирование:

Devils Night

Ветеран
Что надо прописать в ветке реестра чтобы он не устанавливался в раздел Wow6432Node если ось x64
Для X64 добавить Check: IsWin64, а для X32 добавить Check: not IsWin64, т.е
Код:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.

[Registry]
Root: HKLM; SubKey: SOFTWARE\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: not IsWin64
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: IsWin64


[*Code]
function InitializeSetup: Boolean;
begin
if IsWin64 then
else
result:=true;
end;
 
Последнее редактирование:

AntiAngel

Новичок
Devils Night,
Не ты не понял)
При установке на x64 реестр SOFTWARE\My Program записывается в SOFTWARE\Wow6432Node\My Program
А мне надо чтоб он всё равно записался в SOFTWARE\My Program
 

LexBell

Борода
Супер модератор
AntiAngel, вот так:
[SOURCE="iss"][Registry]
Root: HKLM; SubKey: SOFTWARE\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: not IsWin64
Root: HKLM64; SubKey: SOFTWARE\Wow6432Node\My Program; ValueType: string; ValueName: Install Dir; ValueData: {app}; Flags: uninsdeletekey; Check: IsWin64[/SOURCE]
верхняя строчка будет вписана только в х86 системе, нижняя - только в х64. и везде будет без подпапки Wow6432Node - обрати внимание - HKLM и HKLM64
есть еще вариант HKLM32 - он нужен, когда инсталлу задана архитектура строго х64 а ключи должны быть в обоих кустах реестра, как в основном, так и в х32 (Wow6432Node )
 
Последнее редактирование:

ilzok17

Новичок
Помогите пожалуйста разобраться с незнакомы скриптом.Вот верхняя часть самого скрипта(там где надо указать пути),а ниже описание к нему.Я упаковал файлы сначала precomp,далее srep и потом FreeArc.
Код:
;#define External GetEnv("ProgramFiles") + "\FreeArc\PowerPack\Max\*"
;Вынес в отдельный файл все функции связанные с текстурой из оригинального скрипта.
;#deifne Texture

;Добавляем архивы
#define Archives "{src}\data1.bin;DestDir:{app}\;Disk:1;Components:Russian"
#define Archives Archives + "|" + "{src}\data2.bin;DestDir:{app}\data;Disk:1"
#define Archives Archives + "|" + "{src}\data3.bin;DestDir:{app}\data2;Disk:2;Components:English"
#define Archives Archives + "|" + "{src}\data4.bin;DestDir:{app}\data3;Disk:2"

[ISToolPreCompile]
#define isFalse(any S)  (S = LowerCase(Str(S))) == "no" || S == "false" || S == "off" ? "true" : "false"

[Setup]
AppName=FreeArc Example
AppVerName=FreeArc Example 3.3 Extreme
DefaultDirName={pf}\FreeArc Example
DirExistsWarning=no
ShowLanguageDialog=auto
OutputBaseFilename=FreeArc_Example-Ext
OutputDir=.
VersionInfoCopyright=Bulat Ziganshin, Victor Dobrov, SotM, CTACKo, Shegorat

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

[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl

[CustomMessages]
rus.ArcBreak=Установка прервана!
rus.ArcError=Распаковщик FreeArc вернул код ошибки: %1.
rus.ErrorUnknownError=Ошибка при распаковке архивов. Пожалуйста, обратитесь к разработчику программы.
rus.ErrorCompressMethod=Метод сжатия "%1" данного архива "%2" не поддерживается данной версией unarc.dll.
rus.ErrorOutBlockSize=Выходной блок данных архива "%1" слишком мал.
rus.ErrorNotEnoughRAMMemory=Недостаточно свободной оперативной памяти для распаковки архива "%1".
rus.ErrorReadData=Ошибка чтения данных архива "%1".
rus.ErrorBadCompressedData=Данные из архива "%1" не могут быть распакованы.
rus.ErrorNotImplement=Запрошенное действие не поддерживается данной версией unarc.dll.
rus.ErrorDataAlreadyDecompress=Запрошенный блок данных архива "%1" уже распакован.
rus.ErrorUnpackTerminated=Операция прервана пользователем.
rus.ErrorWriteData=Ошибка записи данных из архива "%1".
rus.ErrorBadCRC=Ошибка данных CRC в архиве "%1".
rus.ErrorBadPassword=Пароль введенный для данного архива "%1" неверен.
rus.ErrorBadHeader=Заголовок архива "%1" поврежден.
rus.ErrorCodeException=Ошибка выполнения программы установки. Пожалуйста, обратитесь к разработчику программы.
rus.ErrorNotEnoughFreeSpace=Недостаточно свободного места на диске назначения для распаковки архива "%1".
rus.ArcTitle=Распаковка FreeArc-архивов...
rus.StatusInfo=Файлов: %1%2, %3%% выполнено, осталось ждать %4
rus.ArcInfo=Диск %1 из %2, архив %3 из %4, архив обработан на %5%%
rus.ArcFinish=Распаковано архивов: %1, получено файлов: %2 [%3]
rus.InsertDisk=Пожалуйста, вставьте диск № %1, содержащий файл "%2" и нажмите кнопку ОК.
rus.taskbar=%1%%, жди %2
rus.ending=Завершение
rus.hour=часов
rus.min=мин
rus.sec=сек

[Files]
Source: unarc.dll; DestDir: {tmp}; Flags: dontcopy
Source: InnoCallback.dll; DestDir: {tmp}; Flags: dontcopy
#ifdef precomp
;если указано, что архивы созданы с PRECOMP, в инсталлятор включаются необходимые при распаковке файлы
Source: {#External}; DestDir: {sys}; Flags: deleteafterinstall
Source: "{#GetEnv(""ProgramFiles"")}\FreeArc\bin\arc.ini"; DestDir: c:\; Flags: deleteafterinstall
#endif
Если вы упаковали архивы с использованием внешних компрессоров, то вам нужно раскоментировать строку
#define External GetEnv("ProgramFiles") + "\FreeArc\PowerPack\Max\*"
Где вам нужно будет указать путь к папке где лежат внешние компрессоры, которые использовались при упаковке архивов. Также требуется указать путь к файлу Arc.ini в секции [Files] (Обычно он находится в ..Program Files\FreeArc\bin, смотря куда вы установили архиватор FreeArc).
Верхнию строку я раскоментировал
Но дальше не могу понять где и как правильно нем указать пути,или в самой верхней строчке скрипта(там где раскоентировал),или в нижних строчка отдела [Files].
Может поможете правильно вписать если папка с "precomp" и "srep" находится по этоу пути - D:\Compressiy ,а файл arc.ini по этому - C:\Program Files (x86)\FreeArc\bin\arc.ini
 

Shegorat

Lord of Madness
Администратор
ilzok17
В данном скрипте эта опция служит для использования внешних компрессоров, но не cls-фильтров. Т.е в данном скрипте пока не получится сделать то, что ты хочешь. Используй пока ISDone.

AntiAngel
Для этого существует кнопочка "Спасибо" внизу поста.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху