Ru-Board.club
← Вернуться в раздел «Программы»

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

Автор: Widok
Дата сообщения: 23.04.2007 17:01
Inno Setup
www.jrsoftware.org

Предыдущая часть

Это мощное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки. Можно легко самим создавать диалоги, используя спец. дизайнер. И всё это абсолютно бесплатно! По сравнению с NullSoft (основной конкурент на бесплатной ниве) мне albel понравилась более интуитивно-понятная структура скрипта, простота в настройке.

Последний релиз: 5.2.0 [19 сентября 2007 года]
История версий | скачать || скачать Preprocessor

Русификатор от NightW0lf для версии 5.2.0
Скачать | зеркало

Английская справка для Inno Setup Preprocessor (ISPP) 5.0.xx
Скачать

Русская справка к версиям 5.0.xx
Скачать | зеркало || cкачать в .chm формате
И снова BagIra на высоте

Руководство по расширенным возможностям Inno Setup 5 (не для чайников) от Kindly
[3 версия]
Скачать | зеркало
[4 версия]
Скачать | зеркало
[5 версия]
Скачать | зеркало
[5.1 версия]
Скачать | зеркало

Inno Setup Extensions Knowledge Base
Скачать | зеркало

Corona Skin & Check System Requirements от Victor_Dobrov
Скачать | Скриншот | Справка
Кроме визуального стиля Corona(WMP9) в инсталлятор по выбору пользователя добавляется: Проверка системы/минимальных требований. Шифрование. Деинсталляция неучтённых файлов. Подсчёт времени установки. Расширенный прогрессбар. Экран скриншота/справки. Screensaver, BMP или AVI-файл в фоновом окне. Проигрывание музыки в фоне и многое другое...

Примечание: начиная с версии 5.1.10 в Inno Setup при использовании в инсталляторе фонового изображения формата BMP стало глючить возможность растягивания картинки на весь экран - чтобы это исправить добавьте этот код.
Если вы захотите использовать метод проверки внешнего файла через сумму MD5 (который описан в 5 версии руководства по программированию в Inno Setup) для запуска инсталлятора то вам понадобится калькулятор хеша MD5, калькулятор сумм MD5, SHA-256, CRC32. Если вы хотите узнать какие ключи в реестр вносит та или иная программа (или игра) то Вам понадобится RegShot.


Дополнительные утилиты для Inno Setup



ISTool
www.istool.org

Последний релиз: 5.2.0 [21 сентября 2007 года]
Скачать | зеркало
(как сказано в описании изменений, добавлена поддержка новых директив 5.2.0)

Русификатор
Скачать | зеркало


innounp
innounp.sourceforge.net

Распаковщик установок, сделанных с помощью Inno Setup. При распаковке извлекаются ресурсы и скрипт установки (немного усечённый). Возможно подключение к TotalCommander или FAR с помощью MultiArc плагинов.

Поддерживает распаковку инсталляторов, сделанных с помощью Inno Setup начиная с версии 3.0.0-beta по 5.1.14

Последний релиз: 0.20 - Тестовая версия [27 августа 2007 года] New
Скачать | зеркало | зеркало


ScriptMaker
www.hisoft2000.de/En/index.htm

Удобная оболочка для облегчения написания скриптов установки для Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.

Последний релиз: 5.1.6.9 [09 июля 2006 года]
Скачать 4.2 мб | обновление 3.1 мб

Русификатор отGloThin
Скачать с сайта GloThin | Зеркало | Зеркало | зеркало
Пароль: ruboard
Примечание: офф. сайт косо отображается в Oper`е.

Новое название проекта на сайте, похоже произошла замена ScriptMaker на:

Inno Script Generator

Последний релиз: 1.0.2.11 [7 Августа 2007 года]
Скачать | обновление | Изменения
Примечание: обновление ставится только на Inno Setup Quickstartpack 5.1.13.

Примечание для всех участников

Длинные куски кода помещайте под тегом [more], дабы дать возможность знатокам Inno Setup прочитать сам вопрос, а не пролистывать бесконечно длинные листинги скриптов в посте.
Автор: Sampron
Дата сообщения: 23.04.2007 17:22
Sero
Я тут раздуплил то, что текстуры можно налаживать на стандартные кнопки но возникла проблема на странице лицензии. При принятии соглашения появляется стандартная кнопка незнаешь как решить проблему?
код:

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
LicenseFile=License.txt

[Files]
Source: Button.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
Var
NextButtonImage: TBitmapImage;

Procedure InitializeWizard();
begin
ExtractTemporaryFile('Button.bmp')
NextButtonImage:=TBitmapImage.Create(WizardForm)
with NextButtonImage do begin
Left:=0
Top:=0
Width:=79
Height:=23
Enabled:=False
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=WizardForm.NextButton
end
end;
Автор: JbBaD
Дата сообщения: 23.04.2007 17:30
Вопрос...
Как изменить шрифт всех лейблов на другой (verdana, sans serif)?
Автор: Sampron
Дата сообщения: 23.04.2007 17:47
JbBaD

[Code]
Procedure InitializeWizard();
begin
WizardForm.Font.Name:='MS Sans Serif' // Шрифт
WizardForm.Font.Style:=[fsBold] // Стиль шрифта
WizardForm.Font.Color:=clBlack // Цвет шрифта
end;
Автор: Sero
Дата сообщения: 23.04.2007 18:12
Sampron

Можно просто отключить RadioButtons на странице:

Код:
Var
NextButtonImage: TBitmapImage;

Procedure InitializeWizard();
begin
ExtractTemporaryFile('Button.bmp')
NextButtonImage:=TBitmapImage.Create(WizardForm.NextButton)
with NextButtonImage do begin
Left:=0
Top:=0
Width:=79
Height:=23
Enabled:=False
Bitmap.LoadFromFile(ExpandConstant('{tmp}')+'\Button.bmp')
Parent:=WizardForm.NextButton
BringToFront;
end
with WizardForm do begin
LicenseAcceptedRadio.Checked:=True;
LicenseAcceptedRadio.Visible:=False;
LicenseNotAcceptedRadio.Visible:=False;
LicenseMemo.Top:=35;
LicenseMemo.Height:=180;
end
end;
Автор: Sampron
Дата сообщения: 23.04.2007 18:17
Sero
Это я знаю но таже проблема с чекбоксом на странице программной группы.
Автор: EagleSH
Дата сообщения: 23.04.2007 21:15
Sampron
а если конкретного шрифта нет в системе, егож можно установить и сразу использовать, пральна? подскажи как.
Автор: Sampron
Дата сообщения: 23.04.2007 22:48
EagleSH
Я сам незнаю как сделать установку шрифта перед установкой.
Автор: Denis_Kokyev
Дата сообщения: 25.04.2007 15:26
Подскажите пожалуйста, можно ли сделать так, чтоб при выборе типа
установки, менялась бы картинка в окошке? Например как то так:
http://img68.imageshack.us/my.php?image=primerna9.jpg
Автор: qEraser
Дата сообщения: 25.04.2007 16:31
Господа, подскажите почему при добавлении ffffffff значения в реестр программа пишет про недопустимый параметр.

Может быть данное значение можно представить как-нибудь подругому?

ValueType: dword; ValueName: zoom; ValueData: ffffffff

Автор: Sampron
Дата сообщения: 25.04.2007 17:24
qEraser

ValueData: $ffffffff
Автор: SerIg
Дата сообщения: 25.04.2007 17:58
А как сделать что бы когда идет установка, то была не просто табличка, а во весь экран разворачивалась инсталяха, например с картинкой той или иной проги???
Автор: Sampron
Дата сообщения: 25.04.2007 18:08
SerIg

[Setup]
WindowVisible=yes

[Files]
Source: C:\BackImage.bmp; DestDir: {tmp}; Flags: dontcopy;

[Code]
procedure InitializeWizard();
var
BackImage: TBitmapImage;
s:string;
begin
ExtractTemporaryFile('BackImage.bmp')
s:=ExpandConstant('{tmp}')+'\BackImage.bmp'
BackImage:=TBitmapImage.Create(MainForm)
BackImage.Bitmap.LoadFromFile(s)
BackImage.Align:=alClient
BackImage.Parent:=MainForm
BackImage.Stretch:=True
end;
Автор: The Unforgiven
Дата сообщения: 25.04.2007 23:58
Inno Setup 5.1.12

Цитата:

• Fix: On Windows Vista, attempting to expand a shell folder constant that mapped to the root directory of a drive would fail with an error message. This was due to a bug in Vista's SHGetFolderPath API. A workaround for the problem has been implemented.
• On Browse dialogs, the BrowseDialogLabel message text may now span multiple lines.
• The OnlyOnThisPlatform message is no longer used. Now, when a Windows 95/98/Me user attempts to run an installation with a MinVersion setting that blocks installation on non-NT platforms, Setup will display the WinVersionTooLowError message, which is a bit more helpful as it mentions the required version number.
• Corrected some trivial one-pixel-off issues when non-default dialog fonts or font sizes were used.
• Added official Hebrew translation.
• Minor tweaks.
Автор: Andrey_Wlodimirovich
Дата сообщения: 26.04.2007 00:59
Люди такой вопрос я имею такой куст:

Код: [HKEY_CLASSES_ROOT\Team17.WAgame\shell\a.play]
@="Playback"

[HKEY_CLASSES_ROOT\Team17.WAgame\shell\a.play\command]
@="\"E:\\Games\\wa\\WA.exe\" /dir \"E:\\Games\\wa\" /play \"%1\""
Автор: Sampron
Дата сообщения: 26.04.2007 13:03
Andrey_Wlodimirovich
Используй ISTool для импорта рег-файлов.

ValueData: "\""{app}\WA.exe\"" /dir \""{app}\"" /play \""%1\"""
Автор: Andrey_Wlodimirovich
Дата сообщения: 26.04.2007 16:39
Sampron
Сенки ... вообще то в ИСТул не нашел импорта (нашел его в СриптМэйк, но вашего примера хватило чтоб понять ошибку..)
Автор: Sampron
Дата сообщения: 26.04.2007 17:16
Andrey_Wlodimirovich
(ISTool) Project\Import From File\Registry...
Автор: NightW0lf
Дата сообщения: 26.04.2007 23:03
Нужна помошь со скриптом для Kill Save. Проблема в том, что при запуске деинсталлятора запускается Kill Save и спрашивает "удалить сейвы" и при нажатии на любой из вариантов все равно их НЕ удаляет.

Вот Kill Save
[more=Вот скрипт]

Код:
[Setup]
;Название программы - инсталлятора, а также заголовок инсталлятора, (пожеланию можно версию указать):
AppName=Test Kill Save
;Версия программы - инсталлятора, (пожеланию можно указать - название + версию):
AppVerName=1.1
;Директория установки для программы - инсталлятора:
DefaultDirName=C:\Test Kill Save
;Название выходного файла компилятора:
OutputBaseFilename=example.kill.save

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

[Files]
Source: "KillSave.exe"; DestDir: "{app}";
Source: "Kill.ini"; DestDir: "{app}";


[Registry]
Root: HKLM; Subkey: "SOFTWARE\Test_Games_Kill_Save\AnyGame"; ValueName: "SavePath"; ValueType: String; ValueData: "{app}\Save"; Flags: uninsdeletevalue

[UninstallRun]
Filename: "{app}\KillSave.exe"; Parameters: "Kill"; WorkingDir: "{app}";
Автор: Snake_60
Дата сообщения: 27.04.2007 00:16
Возникла проблемка в работе инсталятора, помогите кто чем может...
Не могу заставить инсталятор при деинсталяции убить процесс(программу)...
[more=Вот код.][no];.:: Snake 60 ::. "Русификатор для LounchIt NOW! Plus 2006".

#include "SHFileOperation.iss"

[Setup]
;Название программы - инсталлятора, а также заголовок инсталлятора, (пожеланию можно версию указать):
AppName=Русификатор для LaunchIt NOW! Plus 2006
;Версия программы - инсталлятора, (пожеланию можно указать - название + версию):
AppVerName=Русификатор для LaunchIt NOW! Plus 2006
;Авторское право (в свойствах выходного файла компилятора):
AppCopyright=.:: Snake 60 ::.
;Версия программы - инсталлятора (в свойствах выходного файла компилятора):
VersionInfoVersion=1.0
;Информация об компании (в свойствах выходного файла компилятора):
VersionInfoCompany=.:: Snake 60 ::. RUS INC. (C) 2006-2007
;Описание (в свойствах выходного файла компилятора):
VersionInfoDescription=Русификатор для LaunchIt NOW! Plus 2006
;Используется для определения содержимого вкладки "Поддержка" диалога Установка\Удаление программ на Панели управления в Windows 2000/XP.
AppPublisher=Packaged by .:: Snake 60 ::.
;Директория установки для программы - инсталлятора:
DefaultDirName={pf}\LaunchIt NOW! Plus
;Название выходного файла компилятора:
OutputBaseFilename=launchit.now!.plus.2006.russian.translation-setup
;Директория выходного файла компилятора:
OutputDir=Output
;Имя\Место расположения файла с лицензией в формате ".txt" или ".rtf", который отображается после нажатия на кнопку далее.
LicenseFile=tmp_files\License.rtf
;Имя\Место расположения файла с информацией в формате ".txt" или ".rtf", который отображается после лицензионного соглашенья.
InfoBeforeFile=tmp_files\Readme_rus.rtf
;Метод сжатия данных в инсталляторе:
Compression=lzma/ultra
;Созидание непрерывного архива:
SolidCompression=yes
;Определяет новую иконку для программы - инсталлятора.
SetupIconFile=data_for_iss\orange-install.ico
;Определяет картинку в формате ".bmp", которая будет отображаться в левой части окна инсталлятора. Размер картинки "164x314" пикселей.
WizardImageFile=data_for_iss\WizardImage.bmp
;Определяет картинку в формате ".bmp", которая будет отображаться в правом верхнем углу окна мастера. Максимальный размер картинки 55х55 пикселей.
WizardSmallImageFile=data_for_iss\WizardSmallImage.bmp
;Означает создавать ли автоматический деинсталлятор. При значении "yes" он создается. При значении "no" автоматическое удаление будет невозможно, так что пользователь должен будет вручную удалять программу.
Uninstallable=yes
;Изменяет иконку на странице "Установка и удаление программ" в Панели управления
UninstallDisplayIcon={app}\orange-uninstall.ico
;Место расположения деинсталлятора (по умолчанию значение - UninstallFilesDir={app})
UninstallFilesDir={app}\Install_Rus
;Режим создания "лога" для деинсталлятора
UninstallLogMode=overwrite
;При значении "yes" файлы инсталлятора (параметры секции [Setup]) будут зашифрованы с помощью ARCFOUR с 128-битным ключом, сгенерированным из директивы Password секции [Setup]. Поддержка шифрования не включена в Inno Setup напрямую, ее следует скачать и установить отдельно. Информацию об этом можно найти на английском сайте программы в разделе Downloads файл "ISCrypt.dll". Модуль ISCrypt.dll должен находиться в папке с компилятором.
Encryption=yes
;Пароль для нашей шифровки! Не добавляйте Unicode символы! Не все понимаются инсталлятором. Теперь инсталлятор в безопасности;). Имейте в виду, что шифруются только основные файлы.Следует еще запомнить, что в тех случаях, когда вы извлекаете во временную папку внешние файлы, не забудьте установить для них флаг noencryption в секции [Files].
Password=**Snake*60**
;Запрос на подверждение продолжения установки
DisableStartupPrompt=no
;При установки в существующую директории появится сообщение "Продолжить туда установку". Значение no не будет выдавать этого сообщения
DirExistsWarning=no

;Нас, возможно, не устраивает шрифт инсталлятора по умолчанию - исправим это:
;-Изменение размера шрифта может повлечь изменение размера самого инсталлятора - будьте осторожны.
[LangOptions]
LanguageName=Russian
LanguageID=$0419
LanguageCodePage=1251
DialogFontName=Tahoma
DialogFontSize=8
WelcomeFontName=Tahoma
WelcomeFontSize=11
TitleFontName=Arial
TitleFontSize=29
CopyrightFontName=Arial
CopyrightFontSize=8

;Язык всех диалогов в инсталляторе:
[Languages]
Name: russian; MessagesFile: Russian.isl

;Надпись внизу диалогов
[Messages]
;Надпись-статуса во время установки. По умолчанию "Распаковка файлов..."
StatusExtractFiles=Распаковка файлов русификации...
BeveledLabel=- Russian Translation by .:: Snake 60 ::. - [ALL-SofT.NeT.RU - TeaM]

;Выбор дополнительный задач\создание ярлыков:
[Tasks]
;Дополнительные задачи - создание резервной копии файлов
Name: src; Description: Создать резервную копию оригинальных файлов

[Files]
;Обновленныe файлы
;Флаг BeforeInstall: CreateBackup; обязателен создать резервную копию через procedure CreateBackup;
Source: app_rus_data\lnp.exe; DestDir: {app}; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\lnpshellext.dll; DestDir: {app}; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\cleanup.exe; DestDir: {app}\Add-Ons; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\revpwd.exe; DestDir: {app}\Add-Ons; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: app_rus_data\shutdown.exe; DestDir: {app}\Add-Ons; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion
Source: data_for_iss\orange-uninstall.ico; DestDir: {app}; BeforeInstall: CreateBackup; Flags: uninsneveruninstall skipifsourcedoesntexist overwritereadonly ignoreversion

;TMP - файлы
Source: tmp_files\BASSMOD.dll; DestDir: {tmp}; Flags: dontcopy noencryption
Source: tmp_files\music.xm; DestDir: {tmp}; Flags: dontcopy noencryption
Source: tmp_files\ISTask.dll; DestDir: {tmp}; Flags: dontcopy noencryption

;Удаление папок или файлов при деинсталяции
[UninstallDelete]
Type: filesandordirs; Name: {app}\Install_Rus

[Run]
;Запуск обновленного файла
Filename: {app}\lnp.exe; Description: Запустить русскую версию LaunchIt NOW! Plus 2006; Flags: nowait postinstall skipifsilent


[Code]
var
str: string;
MyArray: array of Char;
RestoreDir: TButton;

const
BASS_MUSIC_RAMP = 1; // (только для Fast Tracker .xm)
BASS_MUSIC_RAMPS = 2; // (только для Fast Tracker .xm)
BASS_MUSIC_LOOP = 4; // повторение
BASS_MUSIC_FT2MOD = 16; // играть .MOD как FastTracker 2
BASS_MUSIC_PT1MOD = 32; // играть .MOD как ProTracker 1
BASS_MUSIC_SURROUND = 512; // звучание surround
BASS_MUSIC_SURROUND2 = 1024; // звучание surround (режим 2)

function BASSMOD_Init(device: Integer; freq, flags: DWORD): Boolean;
external 'BASSMOD_Init@files:BASSMOD.dll stdcall delayload';

function BASSMOD_MusicLoad(mem: BOOL; f: PChar; offset: DWORD; length: DWORD; flags: DWORD): Boolean;
external 'BASSMOD_MusicLoad@files:BASSMOD.dll stdcall delayload';

procedure BASSMOD_MusicFree();
external 'BASSMOD_MusicFree@files:BASSMOD.dll stdcall delayload';

function BASSMOD_MusicPlay(): Boolean;
external 'BASSMOD_MusicPlay@files:BASSMOD.dll stdcall delayload';

function BASSMOD_MusicPause(): Boolean;
external 'BASSMOD_MusicPause@files:BASSMOD.dll stdcall delayload';

function BASSMOD_MusicStop(): Boolean;
external 'BASSMOD_MusicStop@files:BASSMOD.dll stdcall delayload';

procedure BASSMOD_Free();
external 'BASSMOD_Free@files:BASSMOD.dll stdcall delayload';

function KillTask(ExeFileName: string): Integer;
external 'KillTask@files:ISTask.dll stdcall delayload';

function RunTask(FileName: string; bFullpath: Boolean): Boolean;
external 'RunTask@files:ISTask.dll stdcall delayload';

procedure ButtonOnClick(Sender: TObject);
begin
WizardForm.DirEdit.Text := ExpandConstant('{pf}\LaunchIt NOW! Plus');
end;

procedure PlayButtonOnClick(Sender: TObject);
var
Name1: string;
begin
if not BASSMOD_MusicPlay then
begin
Name1 := ExpandConstant('{tmp}\music.xm');
if BASSMOD_MusicLoad(FALSE, PChar(Name1), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_SURROUND) then
BASSMOD_MusicPlay;
end;
end;

procedure PauseButtonOnClick(Sender: TObject);
begin
BASSMOD_MusicPause;
end;

procedure StopButtonOnClick(Sender: TObject);
begin
BASSMOD_MusicStop;
BASSMOD_MusicFree;
end;

//Кнопка создать новую папку в при выборе директории установки
procedure DirOnClick(Sender: TObject);
var
res: Boolean;
UserSelectDir: string;
begin
UserSelectDir := WizardForm.DirEdit.Text;
res := BrowseForFolder('Выберите директорию для установки и нажмите ''ОК''', UserSelectDir, True);
if res then
begin
WizardForm.DirEdit.Text := UserSelectDir;
end;
end;

procedure BevelLabelOnClick(Sender: TObject);
var
ErrorCode: Integer;
begin
ShellExec('open', 'http://www.all-soft.net.ru', '', '', SW_SHOWNORMAL, ewNoWait, ErrorCode);
end;

function CheckPassword(Password: string): Boolean;
begin
WizardForm.PasswordEdit.Text := 'Вот и нет пароля';
WizardForm.PasswordPage.Free;
Result := True;
end;

function InitializeSetup(): Boolean;
begin
MyArray := ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
'1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
'!', '@', '#', '$', '%', '^', '&', '*', '(', ')'];
Result := True;
begin
//Поиск процесса который надо закрыть
if RunTask('lnp.exe', false) then
begin
if MsgBox('Программа установки русификатора обнаружила, что программа'#13'для которой установится русификатор запушена в данный момент. '#13#13' Закрыть программу?'#13#13 +
'"Да" - закроет и не сохранит измененные настройки в программе.' #13#13 +
'"Нет" - продолжит установку без закрытия. (Настоятельно рекомендуется нажать Да)', mbError, mb_YesNo) = idYes then
begin
KillTask('lnp.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;
end;

//При деинсталляции нужно честно предупредить пользователя
function InitializeUninstall(): Boolean;

begin
//Поиск процесса который надо закрыть при удалении
if RunTask('lnp.exe', false) then
begin
if MsgBox('Программа удаления русификатора обнаружила, что программа'#13'для которой русификатор был установлен, запущена в данный момент. '#13#13' Закрыть программу?'#13#13 +
'"Да" - закроет запущенную программу.' #13#13 +
'"Нет" - продолжит удаление. (Настоятельно рекомендуется нажать Да)', mbError, mb_YesNo) = idYes then
begin
KillTask('lnp.exe');
Result := True;
end else
Exit;
end;
Result := True;
end;

//при запуске инсталлятора выполняем вот этот код:
procedure InitializeWizard();
var
Name1: string;
PlayButton, PauseButton, StopButton: TButton;
Panel1: TPanel;
begin
RestoreDir := TButton.Create(WizardForm);
RestoreDir.Width := WizardForm.DirBrowseButton.Width;
RestoreDir.Height := WizardForm.DirBrowseButton.Height;
RestoreDir.Top := WizardForm.DirBrowseButton.Top + RestoreDir.Height + ScaleX(10);
RestoreDir.Left := WizardForm.DirBrowseButton.Left;
RestoreDir.OnClick := @ButtonOnClick;
RestoreDir.Parent := WizardForm.SelectDirPage;
RestoreDir.Visible := True;
RestoreDir.Caption := 'Сбросить';
begin
//Вставляем наш пароль в поле ввода
WizardForm.DirBrowseButton.OnClick := @DirOnClick;

WizardForm.PasswordEdit.Visible := False;
WizardForm.PasswordEdit.Text := '';

ExtractTemporaryFile(ExpandConstant('BASSMOD.dll'));
ExtractTemporaryFile(ExpandConstant('music.xm'));
if not BASSMOD_Init(-1, 44100, 0)
then
begin
MsgBox('BASSMOD не смогла инициализироваться, проигрывание музыки невозможно.', mbError, MB_OK)
BASSMOD_Free;
end
else
begin
Name1 := ExpandConstant('{tmp}\music.xm');
if BASSMOD_MusicLoad(FALSE, PChar(Name1), 0, 0, BASS_MUSIC_LOOP or BASS_MUSIC_SURROUND) then
BASSMOD_MusicPlay;
begin
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin

PlayButton := TButton.Create(WizardForm);
PlayButton.Left := 10;
PlayButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
PlayButton.Height := 23; //Высота кнопки
PlayButton.Width := 30; //Ширина кнопки
PlayButton.Caption := '>'; //Название кнопки
PlayButton.OnClick := @PlayButtonOnClick;
PlayButton.Parent := WizardForm;
PlayButton.Cursor := crHand;

PauseButton := TButton.Create(WizardForm);
PauseButton.Left := 45;
PauseButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
PauseButton.Height := 23; //Высота кнопки
PauseButton.Width := 30; //Ширина кнопки
PauseButton.Caption := 'II'; //Название кнопки
PauseButton.OnClick := @PauseButtonOnClick;
PauseButton.Parent := WizardForm;
PauseButton.Cursor := crHand;

StopButton := TButton.Create(WizardForm);
StopButton.Left := 80;
StopButton.Top := WizardForm.ClientHeight - ScaleY(23 + 10);
StopButton.Height := 23; //Высота кнопки
StopButton.Width := 30; //Ширина кнопки
StopButton.Caption := '[]'; //Название кнопки
StopButton.OnClick := @StopButtonOnClick;
StopButton.Parent := WizardForm;
StopButton.Cursor := crHand;
begin
with WizardForm do begin
with MainPanel do
Height := Height - 0;
with WizardSmallBitmapImage do begin
Left := 0;
Top := 0;
Height := 58; //Размер рисунка
Width := 500; //
end;
with PageNameLabel do begin
Width := Width - 500; //Поставьте здесь значения на 0 если хотите вернуть текст
Left := Left + 100; //
end;
with PageDescriptionLabel do begin
Width := Width - 500; //Поставьте здесь значения на 0 если хотите вернуть текст
Left := Left + 100; //
begin
with WizardForm.BeveledLabel do
begin
Cursor := crHand; //Вид курсора при наведении на текст
OnClick := @BevelLabelOnClick;
Font.Color := clBlue; //Цвет текста
Enabled := True;
end;
end;
end;
end;
end;
end
end;
end;
end;
end;


//Изменяем диалог установки
procedure CurPageChanged(CurPageID: Integer);

begin
if CurPageID = wpPassword then
begin
WizardForm.PasswordEdit.Text := MyArray[69] + MyArray[69] + MyArray[18] + MyArray[39] + MyArray[26] + MyArray[36] + MyArray[30] + MyArray[69] + MyArray[57] + MyArray[61] + MyArray[69] + MyArray[69]
IntToStr(StrToInt(str) - StrToInt(GetDateTimeString('ss', #0, #0)));
WizardForm.NextButton.OnClick(WizardForm.NextButton);
end;
begin
if CurPageID = wpWelcome then
begin
if WizardForm.FindComponent('NextButton') is TButton
then
TButton(WizardForm.FindComponent('NextButton')).Caption := 'Далее >>'; //текст
if WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption := 'Отмена'; //текст
end;
begin
if CurPageID = wpReady then
begin
if WizardForm.FindComponent('CancelButton') is TButton
then
TButton(WizardForm.FindComponent('CancelButton')).Caption := 'Отмена'; //текст
end;
end;
end;
end;

//При инсталляции, в "бэкап" сохраняются (перемещением) только те файлы,
//которые инсталлятор заменяет. При удалении, эти же файлы восстанавливаются (тоже перемещением).
function MoveFile(const srcFile, destFile: PChar): Integer;
external 'MoveFileA@kernel32.dll stdcall';

procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep = usPostUninstall then
begin
MoveDir(ExpandConstant('{app}\Install_Rus\Backup\'), ExpandConstant('{app}'));
RemoveDir(ExpandConstant('{app}\Install_Rus\Backup\'));
RemoveDir(ExpandConstant('{app}\Install_Rus\'));
end;
end;

//Процедура создания резервной копии при выборе пункта "Создать резервную копию оригинальных файлов"
procedure CreateBackup;
var
srcFile, destFile: string;
basePath, shortPath: string;
begin
if IsTaskSelected('src') then
begin
basePath := ExpandConstant('{app}');
srcFile := ExpandConstant(CurrentFileName);
shortPath := srcFile;
StringChangeEx(shortPath, basePath, '', True);
destFile := ExpandConstant('{app}\Install_Rus\Backup') + shortPath;
ForceDirectories(ExtractFilePath(destFile));
MoveFile(PChar(srcFile), PChar(destFile));
end;
end;

//Чтобы заставить инсталлятор при нажатии на кнопку "Отмена" выдавать собственное сообщение, следует написать следующую процедуру:
procedure CancelButtonClick(CurPage: Integer; var Cancel, Confirm: Boolean);
begin
Cancel := False;
Confirm := False;
if MsgBox('Вы действительно хотите прервать установку?', mbError, MB_YESNO) = idYes
then
Cancel := true;
end;

//Функция проверки директории на конкретный файл (пример - EX_chemax68.exe) если файл
//отсутствует то выдается сообщение об ошибке
function NextButtonClick(CurPage: Integer): Boolean;
var
s: string;
begin
str := GetDateTimeString('ss', #0, #0);
Result := True;
if CurPage = 6 then
begin
if (FileSearch('lnp.exe', ExpandConstant('{app}')) = '')
then
begin
s := 'Программа "LaunchIt NOW! Plus 2006" не найдена в данной директории!'#13#13'Пожалуйста, укажите папку с программой.';
MsgBox(s, mbError, mb_Ok);
Result := False
end;
end;
end;
end.
end;
[/no][/more]
Автор: Chanka
Дата сообщения: 27.04.2007 07:32
NightW0lf,
Замени ValueData: "{app}\Save"; на ValueData: "{app}"; и всё гуд
Автор: EagleSH
Дата сообщения: 27.04.2007 09:40
господа, видел давно в прошлой ветке слайдшоу не по времени а по процентам, подкинте код плиз, то не найду уже.
Автор: NightW0lf
Дата сообщения: 27.04.2007 12:51
Chanka

Цитата:
Замени ValueData: "{app}\Save"; на ValueData: "{app}"; и всё гуд

Спасибо помагло!
Автор: Sampron
Дата сообщения: 27.04.2007 14:01
EagleSH
http://forum.ru-board.com/topic.cgi?forum=5&topic=4801&start=782&limit=1&m=1
Автор: EagleSH
Дата сообщения: 27.04.2007 15:59
Sampron
пасиб, вот токо он немного кривой в эстетическом плане, бум править...
Автор: boss911
Дата сообщения: 27.04.2007 16:10
NightW0lf

Русик к 5.1.12 планируется?
С нетерпением жду!
Автор: Sampron
Дата сообщения: 27.04.2007 16:55
EagleSH

Цитата:
он немного кривой в эстетическом плане

То что рисунок не по центру?

boss911
Ставь от 5.1.11
Автор: EagleSH
Дата сообщения: 27.04.2007 18:17
Sampron
ага, мало того - не во весь экран
Автор: Sampron
Дата сообщения: 27.04.2007 18:26
EagleSH
По центру смог сделать так:

[Files]
Source: innocallback.dll; DestDir: {tmp}; Flags: dontcopy
Source: pic1.bmp; DestDir: {tmp}; Flags: dontcopy
Source: pic2.bmp; DestDir: {tmp}; Flags: dontcopy
Source: pic3.bmp; DestDir: {tmp}; Flags: dontcopy

[Code]
type
TProc=procedure(HandleW, msg, idEvent, TimeSys: LongWord);
var
BackgroundBitmapImage: TBitmapImage;
TimerID: LongWord;

function WrapTimerProc(callback:TProc; paramcount:integer):longword;
external 'wrapcallback@files:innocallback.dll stdcall';
function SetTimer(hWnd: LongWord; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord): LongWord;
external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd: LongWord; nIDEvent: LongWord): LongWord;
external 'KillTimer@user32.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';

procedure InitializeWizard();
begin
ExtractTemporaryFile('pic1.bmp')
ExtractTemporaryFile('pic2.bmp')
ExtractTemporaryFile('pic3.bmp')
end;

function PercentProgress(): Integer;
begin
with WizardForm.ProgressGauge do begin
Result:=(Position-Min)/((Max - Min)/100)
end
end;

procedure OnTimer(HandleW, msg, idEvent, TimeSys: LongWord);
var
percent: integer;
begin
percent:=PercentProgress
with BackgroundBitmapImage do begin
if ((percent>0) and (percent<33) and (Tag<>1)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp')
Tag:=1
end else
if ((percent>34) and (percent<66) and (Tag<>2)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic2.bmp')
Tag:=2
end else
if ((percent>67) and (percent<100) and (Tag<>3)) then begin
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic3.bmp')
Tag:=3
end
end
end;

procedure CurPageChanged(CurPageID: Integer);
var
pfunc: LongWord;
Width, Height: Integer;
begin
If CurPageID=wpInstalling
then
begin
pfunc:=WrapTimerProc(@OnTimer, 4)
TimerID:=SetTimer(0, 0, 500, pfunc)
BackgroundBitmapImage:=TBitmapImage.Create(MainForm)
with BackgroundBitmapImage do begin
BackColor:=clBlack
Center:=True
Align:=alClient
Bitmap.LoadFromFile(ExpandConstant('{tmp}') + '\pic1.bmp')
Parent:=MainForm
Tag:=1
end
end
if CurPageID=wpFinished
then
begin
BackgroundBitmapImage.Hide
end
end;

procedure DeinitializeSetup();
begin
KillTimer(0, TimerID)
end;
Автор: EagleSH
Дата сообщения: 27.04.2007 18:42
Sampron
молодца!

а на весь экран тут мона сделать или не?

О! сделал

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768

Предыдущая тема: Mail.ru агент - вход не выполнен


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.