Скрипты Inno Setup. Помощь и советы [часть 4]
-
Tixo
-
Tixo
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
Цитата kindza811:
Всем привет. Как вставить видео в инсталлятор?
Код для воспроизведения стандартного avi-файла на фоновом окне инсталлятора, изменяйте параметры для достижения требуемого результата.
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName=C:\My Program
OutputBaseFilename=setup
Compression=lzma
WindowVisible=yes
WindowShowCaption=no
[Files]
Source: clock.avi; DestDir: {tmp}; Flags: dontcopy
Всем привет. Как вставить видео в инсталлятор?
Скрипты Inno Setup. Помощь и советы [часть 4]
Код для воспроизведения стандартного avi-файла на фоновом окне инсталлятора, изменяйте параметры для достижения требуемого результата.
читать дальше »
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName=C:\My Program
OutputBaseFilename=setup
Compression=lzma
WindowVisible=yes
WindowShowCaption=no
[Files]
Source: clock.avi; DestDir: {tmp}; Flags: dontcopy
Код: Выделить всё
const
AviFrameWidth = 500; // ширина кадра
AviFrameHeight = 500; // высота кадра
var
CommandString: String;
FileName: String;
AviFrameTop: Integer;
AviFrameLeft: Integer;
function mciSendString(lpstrCommand: string; lpstrReturnString: PChar; uReturnLength:integer; hwndCallback:integer):integer;
external 'mciSendStringA@winmm.dll stdcall';
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
procedure InitializeWizard();
begin
ExtractTemporaryFile(ExpandConstant('clock.avi'));
FileName:= ExpandConstant('{tmp}\clock.avi');
AviFrameTop:= GetSystemMetrics(17) / 2 - AviFrameHeight / 2;
AviFrameLeft:= GetSystemMetrics(16) / 2 - AviFrameWidth / 2;
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep=ssInstall then
begin
CommandString:= 'Open ' + FileName + ' type AVIVideo alias AVIFile parent ' + IntToStr(MainForm.Handle) + ' style child';
mciSendString(CommandString, '', 0, 0);
CommandString:= 'put AVIFile window at ' +
IntToStr(AviFrameLeft) + ' ' + IntToStr(AviFrameTop) + ' ' +
IntToStr(AviFrameWidth) + ' ' + IntToStr(AviFrameHeight);
mciSendString(CommandString, '', 0, 0);
//CommandString:= 'Play AVIFile fullscreen'; // полноэкранный режим
CommandString:= 'Play AVIFile repeat';
mciSendString(CommandString, '', 0, 0);
end;
end;
procedure DeinitializeSetup();
begin
CommandString:= 'Close AVIFile'; // закрываем при выходе
mciSendString(CommandString, '', 0, 0);
end;-
Devils Night
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
kindza811,
этой
библиотекой ещё можно. Довольно-таки удобно.-
Damaks
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
Инсталлятор может после установки сам себя скопировать? Данный код не работает:
Код:
Путь назначения берётся из переменной, которую вводят во время установки, поэтому в секции Run через "cmd.exe copy" не получится наверное. Хотя даже с фиксированными путями у меня не получалось скопировать, при любых вариацииях с кавычками (обрамление, экранирование) открывается дефолтная консоль и команда в неё не передаётся (при одном параметре она передаётся, при двух (источник/назначение) нет, при копировании вручную в консоль работает). Например:
Код:
Здесь по аналогии с рабочим примером другой консольной утилиты применил похожий синтаксис, экранирование кавычек и обрамление всей команды.
Но это к слову, т.к. путь ещё нужно передать, не приходилось этого делать. Танцы с бубном (.bat) не хочется использовать, кто знает, какая система защиты у пользователя стоит, может отдельно запросить разрешение на запуск батника, а это совершенно лишнее.
Код:
Код: Выделить всё
FileCopy(ExpandConstant('{srcexe}'), 'C:\Test\test.exe', False);Путь назначения берётся из переменной, которую вводят во время установки, поэтому в секции Run через "cmd.exe copy" не получится наверное. Хотя даже с фиксированными путями у меня не получалось скопировать, при любых вариацииях с кавычками (обрамление, экранирование) открывается дефолтная консоль и команда в неё не передаётся (при одном параметре она передаётся, при двух (источник/назначение) нет, при копировании вручную в консоль работает). Например:
Код:
Код: Выделить всё
Filename: {sys}\cmd.exe; Parameters: "copy ""C:\In\test.exe"" ""C:\To\test.exe"""; Flags: shellexec runascurrentuser nowaitЗдесь по аналогии с рабочим примером другой консольной утилиты применил похожий синтаксис, экранирование кавычек и обрамление всей команды.
Но это к слову, т.к. путь ещё нужно передать, не приходилось этого делать. Танцы с бубном (.bat) не хочется использовать, кто знает, какая система защиты у пользователя стоит, может отдельно запросить разрешение на запуск батника, а это совершенно лишнее.
-
Gugle
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
Доброго времени суток!
1. Подскажите как при использовании SHFileOperation.iss функции CopyDir показать ProgressBar в котором бы отображался процесс?
2. Можно как нибуть не только скопировать файлы, но и упаковать ее в архив?
1. Подскажите как при использовании SHFileOperation.iss функции CopyDir показать ProgressBar в котором бы отображался процесс?
2. Можно как нибуть не только скопировать файлы, но и упаковать ее в архив?
-
Gugle
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
Ктонить может написать скрипт, который бы при нахождении в устанавливаемой папке, файла с тем же именем что и у файла который сейчас должен распаковаться, сверял бы количество байт файла в папке, с количеством байт, которое я задал для этого файла, и если значения совпадают, то файл бы не распаковывался?
P.S.
Собстно такой код нужен для использования с улучшенным деинсталлятором
upd
А реально ли в этом коде сделать так, чтоб выбрав компонент под номером 3, у компонента под номером 5, менялось описание?
Код:
P.S.
Собстно такой код нужен для использования с улучшенным деинсталлятором
UninsHs
, чтобы когда пользователь выбрал в нем "Изменить" или "Восстановить", то не перезаписывались все файлы, а только измененные.upd
А реально ли в этом коде сделать так, чтоб выбрав компонент под номером 3, у компонента под номером 5, менялось описание?
читать дальше »
Код:
Код: Выделить всё
[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl
[CustomMessages]
russian.ComponentsInfoPanel1=Описание
russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.
[c0de]
type
TComponentDesc = record Description: String; Index: Integer; end;
var
Descs: array of TComponentDesc;
Info: TNewStaticText;
InfoCaption: TNewStaticText;
InfoPanel: TPanel;
Indx: Integer;
procedure ShowDescription(Sender: TObject; X, Y, Index: Integer; Area: TItemArea);
var i: Integer;
begin
Indx:=-1;
for i:= 0 to GetArrayLength(Descs)-1 do begin
if (Descs[i].Index=Index) then begin Indx:=i; Break end; end;
if (Indx >=0)and(Area=iaItem) then Info.Caption:= Descs[Indx].Description else Info.Caption:= ExpandConstant('{cm:ComponentsInfoPanel2}');
end;
procedure AddDescription(AIndex: Integer; ADescription: String);
var i, k: Integer;
begin
i:= GetArrayLength(Descs); SetArrayLength(Descs, i+1);
Descs[i].Description:= ADescription; Descs[i].Index:= AIndex-1
end;
procedure InitializeWizard();
begin
WizardForm.TypesCombo.Visible:=False;
WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
WizardForm.ComponentsList.Width := ScaleX(200);
WizardForm.ComponentsList.OnItemMouseMove:= @ShowDescription
InfoPanel := TPanel.Create(WizardForm);
InfoPanel.Parent := WizardForm.SelectComponentsPage;
InfoPanel.Caption := '';
InfoPanel.Top := WizardForm.ComponentsList.Top;//ScaleY(12); // поднимает панель, но опускает панель с текстом
InfoPanel.Left := ScaleX(216);
InfoPanel.Width := ScaleX(200);
InfoPanel.Height := WizardForm.ComponentsList.Height; //ScaleY(40);
InfoPanel.BevelInner := bvRaised;
InfoPanel.BevelOuter := bvLowered;
InfoCaption := TNewStaticText.Create(WizardForm);
InfoCaption.Parent := WizardForm.SelectComponentsPage;
InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');
InfoCaption.Left := ScaleX(224);
InfoCaption.Top := InfoPanel.Top - ScaleY(5); //поднять слово Описание
InfoCaption.Font.Color := clActiveCaption;
Info := TNewStaticText.Create(WizardForm);
Info.Parent := InfoPanel;
Info.AutoSize := False;
Info.Left := ScaleX(6);
Info.Width := ScaleX(188); //шырина текста
Info.Top := ScaleY(12); //Чем больше значение, тем ниже опускаеться полоска текста
Info.Height := WizardForm.ComponentsList.Height - ScaleY(18); //Чем больше значение, тем ниже опускаеться полоска текста
Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');
Info.WordWrap := true;
AddDescription(1, 'Это дополнение выпущенно 31 июля 1998 года. Созданно Aztech New Media. Этот продукт был официально признан Blizzard Entertainment, разработчиком оригинальной игры. Дополнение содержит три кампании, по 10 миссий каждая, и более чем 100 дополнительных карт.123456789'); //первый параметр - это номер компонента, идет последовательно от начала записи компонентов
AddDescription(2, 'Английская справка'); //Второй параметр - это собственно описание компонента
AddDescription(3, 'Русская справка');
AddDescription(4, 'Плагины');
AddDescription(5, 'Внутреннего просмотра');
AddDescription(6, 'Архиваторные');
AddDescription(7, 'Системные');
AddDescription(8, 'CanonCam');
AddDescription(9, 'PluginManager');
AddDescription(10, 'Registry');
AddDescription(11, 'Services');
AddDescription(12, 'StartupGuard');
AddDescription(13, 'Другие');
end;-
valyok666
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
kindza811, никто тебе его не даст)делай сам)
там вроде рисованые картинки,ну остальное всё ботва)
там вроде рисованые картинки,ну остальное всё ботва)
-
Gugle
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
Возникла необходимость решения следующей задачи - необходимо получить индекс checkbox'а в списке компонентов по имени компонента (не описанию, т.к. описание "Для всех форматов" используется и в других компонентах) - у кого-нибудь имеются наработки в этом направлении?
Цитата R.i.m.s.k.y.:
я точно не знаю переварит ли ExpandConstant переменную {#archname}, по идее должен
{#blah-blah-blah} - это директивы пред-процессора, ExpandConstant получит уже конечное значение выражения blah-blah-blah
Цитата R.i.m.s.k.y.:
я точно не знаю переварит ли ExpandConstant переменную {#archname}, по идее должен
Скрипты Inno Setup. Помощь и советы [часть 4]
{#blah-blah-blah} - это директивы пред-процессора, ExpandConstant получит уже конечное значение выражения blah-blah-blah
-
Rikill
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
Gugle, когда именно надо кинуть установщик на финиш?
-
Sotonisto
Re: Скрипты Inno Setup. Помощь и советы [часть 4]
Цитата valyok666:
посмотрите пример из ботвы BtnGroup.iss там токо кнопки вместо чекбоксов))
это совсем не из той оперы, мне нужен индекс для управления этим чекбоксом, а не для получения оповещений о его нажатии
посмотрите пример из ботвы BtnGroup.iss там токо кнопки вместо чекбоксов))
Скрипты Inno Setup. Помощь и советы [часть 4]
это совсем не из той оперы, мне нужен индекс для управления этим чекбоксом, а не для получения оповещений о его нажатии