Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
сделать текст белым цветом »
Если в стандартном инсталляторе, т.е. не создавая новые контролы, то
WizardForm.Font.Color:= clWhite;
WizardForm.PageNameLabel.Font.Color:= clWhite;
WizardForm.WelcomeLabel1.Font.Color:= clWhite;
если же создаёте контролы, то у каждого текстового есть в свойствах значение Font.Color, соответственно задаёте значение clWhite
отображение картинок на всех страницах инсталятора »
Поищите в предыдущей теме, что-то похожее уже было.
Новая версия скриптов для распаковки архивов FreeArc: FreeArc4InnoSetup3_3.zip (http://freearc.googlecode.com/files/FreeArc4InnoSetup3_3.zip)
Версия 3.3 ext от Victor_Dobrov, 13-09-2009
- arc.ini ищется в c:\
- купирована ошибка индикатора прогресса при использовании внешних распаковщиков
- пофиксена потеря количества извлечённых/распакованных файлов
Версия 3.3 от Bulat Ziganshin, 13-09-2009
- ускорение распаковки на 10%
- FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов
- при прерывании распаковки стирает временные файлы
- исправлена ошибка в unarc.dll - вылетала при распаковке с использованием временных файлов
кто уже скачал, перекачайте, т.к. Bulat Ziganshin немного исправил скрипты (скорость распакови была увеличена, но при этом были небольшие паузы в процессе распаковки)
Наверное каждый при сборке инсталлятора сталкивался с тем, что не хватает стандартных констант в Inno Setup.
Допустим нужно установить какой-нибудь файл, в папку "Мои рисунки", а константы такой нет...
Ниже приведённый скрипт облегчит определение стандартных папок Windows:
; Данный скрипт позволяет получить путь к стандартным папкам Windows
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[Code]
const
MAX_PATH = 260;
// ниже приведён список id папок, путь которой хотим получить...
// Виртуальный каталог, представляющий Рабочий стол. (Корень в проводнике)
CSIDL_DESKTOP = $0000;
// Виртуальный каталог для Internet Explorer.
CSIDL_INTERNET = $0001;
// Меню Пуск -> Программы
CSIDL_PROGRAMS = $0002;
// Виртуальный каталог, содержащий иконки пунктов панели управления
CSIDL_CONTROLS = $0003;
// Виртуальный каталог, содержащий установленные принтеры
CSIDL_PRINTERS = $0004;
// Виртуальный каталог, представляющий папку "Мои документы"
CSIDL_PERSONAL = $0005;
// До Vista ссылался на какталог "Мои документы" на жёстком диске
// Избранное. (обычно C:\Documents and Settings\username\Favorites)
CSIDL_FAVORITES = $0006;
// Пуск -> Программы -> Автозагрузка
CSIDL_STARTUP = $0007;
// Недавние документы (обычно C:\Documents and Settings\username\My Recent Documents
CSIDL_RECENT = $0008;
// Папка, содержащая ярлыки меню "Отправить" (Sent to...) (обычно C:\Documents and Settings\username\SendTo)
CSIDL_SENDTO = $0009;
// Виртуальный каталог, содержащий файлы в корзине текущего пользователя
CSIDL_BITBUCKET = $000a;
// Элементы меню Пуск текущего пользователя (обычно C:\Documents and Settings\username\Start Menu)
CSIDL_STARTMENU = $000b;
// Рабочий стол текущего пользователя (обычно C:\Documents and Settings\username\Desktop)
CSIDL_DESKTOPDIRECTORY = $0010;
// Виртуальный каталог, представляющий папку "Мой компьютер"
CSIDL_DRIVES = $0011;
// Виртуальный каталог, представляющий "Сетевое окружение"
CSIDL_NETWORK = $0012;
// Папка "My Nethood Places" (обычно C:\Documents and Settings\username\NetHood)
// В неё ссылки на избранные расшаренные ресурсы
CSIDL_NETHOOD = $0013;
// Папка, содержащая установленные шрифты. (обычно C:\Windows\Fonts)
CSIDL_FONTS = $0014;
// Шаблоны документов. (Обычно Settings\username\Templates)
CSIDL_TEMPLATES = $0015;
// Элементы меню Пуск для всех пользователей. (обычно C:\Documents and Settings\All Users\Start Menu)
// Константы, начинающиеся на CSIDL_COMMON_ существуют только в NT версиях
CSIDL_COMMON_STARTMENU = $0016;
// Меню Пуск -> программы для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs)
CSIDL_COMMON_PROGRAMS = $0017;
// Меню Пуск -> Программы -> Автозагрузка для всех пользователей (обычно C:\Documents and Settings\All Users\Start Menu\Programs\Startup)
CSIDL_COMMON_STARTUP = $0018;
// Элементы Рабочего стола для всех пользователей (обычно C:\Documents and Settings\All Users\Desktop)
CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
// Папка, в которой рограммы должны хранить свои данные(C:\Documents and Settings\username\Application Data)
CSIDL_APPDATA = $001a;
// Установленные принтеры. (обычно C:\Documents and Settings\username\PrintHood)
CSIDL_PRINTHOOD = $001b;
// user's nonlocalized Startup program group. Устарело.
CSIDL_ALTSTARTUP = $001d; // DBCS
// Устарело
CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS
// Ссылки "Избранное" для всех пользователей
CSIDL_COMMON_FAVORITES = $001f;
// Временные Internet файлы (обычно C:\Documents and Settings\username\Local Settings\Temporary Internet Files)
CSIDL_INTERNET_CACHE = $0020;
// Папка для хранения Cookies (обычно C:\Documents and Settings\username\Cookies)
CSIDL_COOKIES = $0021;
// Хранит ссылки интернет истории IE
CSIDL_HISTORY = $0022;
// Административные инструменты текущего пользователя (например консоль MMC). Win2000+
CSIDL_ADMINTOOLS = $30;
// Папка для файлов, подготовленных к записи на CD/DVD
// (Обычно C:\Documents and Settings\username\Local Settings\Application Data\Microsoft\CD Burning)
CSIDL_CDBURN_AREA = $3b;
// Папка, содержащая инструменты администрирования
CSIDL_COMMON_ADMINTOOLS = $2f;
// Папака AppData для всех пользователей. (обычно C:\Documents and Settings\All Users\Application Data)
CSIDL_COMMON_APPDATA = $23;
// Папка "Общие документы" (обычно C:\Documents and Settings\All Users\Documents)
CSIDL_COMMON_DOCUMENTS = $2e;
// Папка шаблонов документов для всех пользователей (Обычно C:\Documents and Settings\All Users\Templates)
CSIDL_COMMON_TEMPLATES = $2d;
// Папка "Моя музыка" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Music)
CSIDL_COMMON_MUSIC = $35;
// Папка "Мои рисунки" для всех пользователей. (обычно C:\Documents and Settings\All Users\Documents\My Pictures)
CSIDL_COMMON_PICTURES = $36;
// Папка "Моё видео" для всех пользователей (C:\Documents and Settings\All Users\Documents\My Videos)
CSIDL_COMMON_VIDEO = $37;
// Виртуальная папка, представляет список компьютеров в вашей рабочей группе
CSIDL_COMPUTERSNEARME = $3d;
// Виртуальная папка, представляет список сетевых подключений
CSIDL_CONNECTIONS = $31;
// AppData для приложений, которые не переносятся на другой компьютер (обычно C:\Documents and Settings\username\Local Settings\Application Data)
CSIDL_LOCAL_APPDATA = $1c;
// Виртуальный каталог, представляющий папку "Мои документы"
CSIDL_MYDOCUMENTS = $0c;
// Папка "Моя музыка"
CSIDL_MYMUSIC = $0d;
// Папка "Мои рисунки"
CSIDL_MYPICTURES = $27;
// Папка "Моё видео"
CSIDL_MYVIDEO = $0e;
// Папка пользователя (обычно C:\Documents and Settings\username)
CSIDL_PROFILE = $28;
// Папка Program Files (обычно C:\Program Files)
CSIDL_PROGRAM_FILES = $26;
CSIDL_PROGRAM_FILESX86 = $2a;
// Папка Program Files\Common (обычно C:\Program Files\Common)
CSIDL_PROGRAM_FILES_COMMON = $2b;
CSIDL_PROGRAM_FILES_COMMONX86 = $2c;
// Папка для ресерсов. Vista и выше (обычно C:\Windows\Resources)
CSIDL_RESOURCES = $38;
CSIDL_RESOURCES_LOCALIZED = $39;
// Папака System (обычно C:\Windows\System32 или C:\Windows\System)
CSIDL_SYSTEM = $25;
CSIDL_SYSTEMX86 = $29;
// Папка Windows. Она же %windir% или %SYSTEMROOT% (обычно C:\Windows)
CSIDL_WINDOWS = $24;
function SHGetSpecialFolderPath(hwndOwner: HWND; lpszPath: PChar; nFolder: Integer; fCreate: BOOL): BOOL;
external 'SHGetSpecialFolderPathA@shell32.dll stdcall';
function GetSpecialPath(CSIDL: Word): string;
var
s: string;
begin
SetLength(s, MAX_PATH);
if not SHGetSpecialFolderPath(0, PChar(s), CSIDL, True) then s := '';
Result:= PChar(s);
end;
procedure InitializeWizard;
begin
// определим расположение папки "Мои рисунки"
MsgBox(GetSpecialPath(CSIDL_MYPICTURES), mbInformation, MB_OK);
end;
A1EXXX, код на работоспособность не проверялся, но должно быть примерно так: »
Делаю как ты написал
procedure CurStepChanged(CurStep: TSetupStep);
var
res: Integer;
begin
if CurStep = ssInstall then begin
StartInstall:= GetTickCount {время начала извлечения файлов}
WndHookID:= SetWindowsHookEx(WH_CALLWNDPROC, WrapCWPSTRUCTProc(@OnWndHook, 3), 0, GetCurrentThreadID); {установка SendMessage хука}
TimerID:= SetTimer(0, 0, 500 {полсекунды}, WrapTimerProc(@MyTimerProc, 4)); {установка таймера}
if not {#isFalse(SetupSetting("Uninstallable"))} then Status.count:= -1; // не считать файл unins000.exe
end;
if CurStep = ssPostInstall then
begin
StartInstall:= GetTickCount {время начала распаковки}
UnPackError:= UnPack('{#Archives}')
if UnPackError <> 0 then begin // Error occured, uninstall it then
if not {#isFalse(SetupSetting("Uninstallable"))} then // деинсталляция разрешёна
Exec(ExpandConstant('{uninstallexe}'), '/SILENT','', sw_Hide, ewWaitUntilTerminated, n); // откат установки из-за ошибки unarc.dll
WizardForm.caption:= SetupMessage(msgErrorTitle) +' - '+ cm('ArcBreak')
SetTaskBarTitle(SetupMessage(msgErrorTitle))
end else
SetTaskBarTitle(SetupMessage(msgSetupAppTitle));
ProcessLabel.show
Exec(ExpandConstant('{app}\run.bat'), '', '', SW_SHOW, ewWaitUntilTerminated, res);
DeleteFile(ExpandConstant('{app}\run.bat'));
end;
end;
по завершению работы инсталлятора получаю ошибку
2009-09-13 11:54:29.562 CurStepChanged raised an exception.
2009-09-13 11:54:29.562 Exception message:
2009-09-13 11:54:29.562 Message box (OK):
Runtime Error (at 157:2795):
Access violation at address 0049F883 in module 'setup.tmp'. Read of address 00000000.
2009-09-13 12:05:20.296 User chose OK.
2009-09-13 12:05:20.296 Need to restart Windows? No
2009-09-13 12:05:20.375 Exception message:
2009-09-13 12:05:20.375 Message box (OK):
Out Of Range.
2009-09-13 12:05:21.265 User chose OK.
2009-09-13 12:05:22.296 Deinitializing Setup.
2009-09-13 12:05:22.328 Log closed.
В чем может быть проблема?
- FreeArcExtract() поддерживает опцию '-wPATH' для задания каталога для временных файлов »
И как это прописать? :)
Вопрос может уже звучал: как добавить на страницу выбора компонентов »
Пример »
СПС большое, за одним исключением - учитывали вы это ил инет - идеально работает если компоненты не имеют вид дерева(т.е. вложенных компонентов), в такои случае, они игнорируются - не выделяются, и если руками выбрать - не снимаются...
[Files]
#ifdef precomp
Source: {#precomp}; DestDir: {sys}; Flags: deleteafterinstall
Source: {#GetEnv("ProgramFiles")}\FreeArc\bin\arc.ini; DestDir: C:\; Flags: deleteafterinstall
#endif
Как сделать что бы как только запустил исталятор, файлы которые указаны в files копировались в назначенный каталог.
Эта процедура копирует их в темп, а надо sys и C:\:
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('precomp04.exe');
ExtractTemporaryFile('packjpg_dll.dll');
ExtractTemporaryFile('arc.ini');
end;
pa60t9ra
14-09-2009, 18:21
Я по поводу выбора компонентов.
Вот тот самый код:
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Types]
Name: full; Description: Полная установка
Name: custom; Description: Выборочная установка; Flags: iscustom
[Components]
Name: a; Description: Моя программа™; Types: full custom
Name: a\a; Description: Руководство пользователя; Types: full
Name: a\a\a; Description: Русский; Flags: exclusive
Name: a\a\b; Description: English; Flags: exclusive
Name: a\b; Description: Справка; Types: full
[Files]
Source: Examples\MyProg.exe; DestDir: {app}; Components: a
Source: Examples\Readme-ru.txt; DestDir: {app}; Components: a\a\a
Source: Examples\Readme-en.txt; DestDir: {app}; Components: a\a\b
Source: Examples\MyProg.chm; DestDir: {app}; Components: a\b
[Code]
var
btn1, btn2: TButton;
procedure btnClick(Sender: TObject);
var
i: Integer;
begin
// не знаю почему, но при WizardForm.SelectComponentsPage.ControlCount-1 выскакивает сообщение:
// 'List index out of bounds.'
for i:= 0 to WizardForm.SelectComponentsPage.ControlCount-2 do
case TButton(Sender) of
btn1: WizardForm.ComponentsList.Checked[i]:= True;
btn2: WizardForm.ComponentsList.Checked[i]:= False;
end;
end;
procedure InitializeWizard();
begin
btn1:= TButton.Create(WizardForm);
with btn1 do
begin
SetBounds(260,210,75,25);
Caption:= 'Выбрать все';
OnClick:= @btnClick;
Parent:= WizardForm.SelectComponentsPage;
end;
btn2:= TButton.Create(WizardForm);
with btn2 do
begin
SetBounds(340,210,75,25);
Caption:= 'Снять выбор';
OnClick:= @btnClick;
Parent:= WizardForm.SelectComponentsPage;
end;
end;
Вопрос в следущем-как сделать, чтобы выделился и анлийский и руссикй язык? То есть-если я хочу, чтобы было оба языка, а не только 1.
Решил поменять шрифт инсталлятора:
procedure InitializeWizard();
begin
WizardForm.Font.Name:='Tahoma'
end;
но мне нужно сделать так, чтобы шрифт менялся на всех страницах, кроме страниц инфы перед установкой и лицензионного соглашения!
за одним исключением - учитывали вы это ил инет - идеально работает если компоненты не имеют вид дерева »
меняйте значение в этой строке:
for i:= 0 to WizardForm.SelectComponentsPage.ControlCount-2 do
т.е. измените 2 на 1, если не поможет, то убирите эту цифру... одним словом поиграйте с этим значением.
файлы которые указаны в files копировались в назначенный каталог. »
самое простое, это измените так:
function InitializeSetup(): Boolean;
begin
ExtractTemporaryFile('precomp04.exe');
FileCopy(ExpandConstant('{tmp}\precomp04.exe'), ExpandConstant('{sd}\precomp04.exe'), False);
ExtractTemporaryFile('packjpg_dll.dll');
FileCopy(ExpandConstant('{tmp}\packjpg_dll.dll'), ExpandConstant('{sd}\packjpg_dll.dll'), False);
ExtractTemporaryFile('arc.ini');
FileCopy(ExpandConstant('{tmp}\arc.ini'), ExpandConstant('{sd}\arc.ini'), False);
end;
и добавьте:
procedure DeInitializeSetup();
begin
DelayDeleteFile(ExpandConstant('{sd}\precomp04.exe'), 4);
DelayDeleteFile(ExpandConstant('{sd}\packjpg_dll.dll'), 4);
DelayDeleteFile(ExpandConstant('{sd}\arc.ini'), 4);
end;
чтобы выделился и анлийский и руссикй язык? »
В секции [Components] убирите флаги: Flags: exclusive
Решил поменять шрифт инсталлятора: »
посмотрите в Справке про секцию [LangOptions]
кроме страниц инфы перед установкой и лицензионного соглашения! »
попробуйте так:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Verdana';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Verdana';
end;
попробуйте так:
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Verdana';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Verdana';
end; »
Почти то, но мне надо поставить не другой шрифт, о ставить стандартный (т.к. почему-то шрифт меняется и в rtf документе)...
Может есть какое-то обозначение для стандартного шрифта, чтоб поставить его вместо Vеrdana???
Или задать процедуру игнорирования смены шрифта на указанных страницах???
В общем, проблемы пока с кнопками выделить все отменить все...
Смысл следующий - галочки ставятся - замечательно - но! размер не перессчитывается(если руками галочки проставить - все ок), и если галочки проставлены кнопкой - компоненты не устанавливаются - если руками - все ок!
pa60t9ra
15-09-2009, 15:10
И вдовесок
http://pic.ipicture.ru/uploads/090915/pXIVjEvVUu.jpg
Не совсем корректно отображается...
BlackSelf
15-09-2009, 19:58
Снова здравствуйте. Возможно сделать обводку текста? То есть создается лэйбл с белым шрифтом и сделать вокруг этого лэйбла обводку, например, в 1 пиксель черного цвета.
BlackSelf,
Попробуй так
procedure InitializeWizard();
var
Panel1: TPanel;
begin
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Panel1.Parent := WizardForm;
Panel1.Left := ScaleX(1);
Panel1.Top := ScaleY(315);
Panel1.Width := ScaleX(165);
Panel1.Height := ScaleY(46);
Panel1.TabOrder := 0;
Panel1.Color := clWhite;
Panel1.BevelInner := bvLowered;
Panel1.BevelOuter := bvRaised;
Panel1.BorderStyle := bsSingle;
end;
end;
Или ты имел ввиду по контору букв? Если про буквы то незнаю, я только учусь :)
И посмотри пожалуйста мое сообщение (http://forum.oszone.net/post-1218155-104.html)
BlackSelf
15-09-2009, 21:24
msatmb, по контуру букв (изначально неправильно выразился).
A1EXXX, попробуйте:
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Microsoft Sans Serif';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Microsoft Sans Serif';
end;
Смысл следующий - галочки ставятся - замечательно - но! размер не перессчитывается »
пока не знаю, намдо подумать.
и если галочки проставлены кнопкой - компоненты не устанавливаются »
у меня всё нормально устанавливается...
Не совсем корректно отображается... »
Пример скрипта, это всего лишь - пример того, что можно сделать.
Вам никто не мешает двигать кнопки.
Возможно сделать обводку текста? То есть создается лэйбл с белым шрифтом и сделать вокруг этого лэйбла обводку, например, в 1 пиксель черного цвета. »
Теоретически возможно, с помощью API'шных функций, но ниразу не делал...
A1EXXX, попробуйте:
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpInfoBefore then WizardForm.Font.Name:= 'Microsoft Sans Serif';
if CurPageID = wpLicense then WizardForm.Font.Name:= 'Microsoft Sans Serif';
end; »
Всё равно не то.... блин... я уже не знаю... а можно с помощью подобного кода, сменить шрифт не на всей странице, а только в документе, который будет отображаться???
Serega, спасибо за помощь!!! Придумал способ решения своей проблемы!!! (твой код меня вдохновил :) ) Сделаю так:
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpWelcome then WizardForm.Font.Name:= 'Tahoma';
if CurPageID = wpSelectDir then WizardForm.Font.Name:= 'Tahoma';
end;
для всех страниц, кроме wpLicense и wpInfoBefore, тогда всё будет как я хотел!!!
Привет. Такая задача. Нужно что бы когда создавался ярлык к нему дописывался параметр запуска. К примеру: в ярлыке в строке объект "C:\Crystal.exe" нужно дописывать movie.avi
тогда при запуске сразу начинается проигрывание файла movie.avi, находящегося в папке с программой.
Кто подскажет как дописывать параметр при создании ярлыка? Поиск не помог (
Привет. Такая задача. Нужно что бы когда создавался ярлык к нему дописывался параметр запуска. К примеру: в ярлыке в строке объект "C:\Crystal.exe" нужно дописывать movie.avi
тогда при запуске сразу начинается проигрывание файла movie.avi, находящегося в папке с программой.
Кто подскажет как дописывать параметр при создании ярлыка? Поиск не помог ( »
Можешь написать бантик с именами файлов, которые необходимо открыть, и затем создавать ярлык для него...
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.