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

Ответить
 • Просмотры: 17
Аватара пользователя
Tixo

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Tixo »

Всем привет. Как вставить видео в инсталлятор?
Аватара пользователя
Tixo

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Tixo »

Цитата kindza811:



Всем привет. Как вставить видео в инсталлятор?
Скрипты 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]

Сообщение Devils Night »

kindza811,
этой
библиотекой ещё можно. Довольно-таки удобно.
Аватара пользователя
Damaks

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Damaks »

Инсталлятор может после установки сам себя скопировать? Данный код не работает:



Код:

Код: Выделить всё

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]

Сообщение Gugle »

Доброго времени суток!



1. Подскажите как при использовании SHFileOperation.iss функции CopyDir показать ProgressBar в котором бы отображался процесс?



2. Можно как нибуть не только скопировать файлы, но и упаковать ее в архив?
Аватара пользователя
Gugle

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Gugle »

Ктонить может написать скрипт, который бы при нахождении в устанавливаемой папке, файла с тем же именем что и у файла который сейчас должен распаковаться, сверял бы количество байт файла в папке, с количеством байт, которое я задал для этого файла, и если значения совпадают, то файл бы не распаковывался?



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]

Сообщение valyok666 »

kindza811, никто тебе его не даст)делай сам)

там вроде рисованые картинки,ну остальное всё ботва)
Аватара пользователя
Gugle

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Gugle »

Возникла необходимость решения следующей задачи - необходимо получить индекс checkbox'а в списке компонентов по имени компонента (не описанию, т.к. описание "Для всех форматов" используется и в других компонентах) - у кого-нибудь имеются наработки в этом направлении?




Цитата R.i.m.s.k.y.:



я точно не знаю переварит ли ExpandConstant переменную {#archname}, по идее должен
Скрипты Inno Setup. Помощь и советы [часть 4]




{#blah-blah-blah} - это директивы пред-процессора, ExpandConstant получит уже конечное значение выражения blah-blah-blah
Аватара пользователя
Rikill

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Rikill »

Gugle, когда именно надо кинуть установщик на финиш?
Аватара пользователя
Sotonisto

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Sotonisto »

Цитата valyok666:



посмотрите пример из ботвы BtnGroup.iss там токо кнопки вместо чекбоксов))
Скрипты Inno Setup. Помощь и советы [часть 4]




это совсем не из той оперы, мне нужен индекс для управления этим чекбоксом, а не для получения оповещений о его нажатии
Ответить

Вернуться в «Автоматическая установка приложений»