Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 4]


Страниц : 1 2 3 4 5 6 7 [8] 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105

Gnom_aka_Lexander
16-11-2011, 15:23
В данном случае было использовано
Извратиться и вместо чекбокса использовать TNewCheckListBox с одним элементом и использовать LoadBtnBmpFromBitmap/LoadBtnBmpFromFile. »
Только там еще LoadBGBmpFromBitmap/LoadBGBmpFromFile тоже задействовано :)
:)

Rikill
16-11-2011, 16:15
El Sanchez, а можно пример "хука на событие установки"? А то интересно, блин. :)

FolDer98
16-11-2011, 18:15
а примера нет?просто токо учусь в основном всё копипастой

valyok666
16-11-2011, 18:25
Rikill, +1 тоже заитересовало)кстати вроде бы пример был у рестулз или я ошибаюсь?

MadTweest
16-11-2011, 18:38
Люди добрые тыкните чайника с путь истинный !!!! Что нужно сделать чтобы Inno Setup создала Setup.exe + 1.bin + 2.bin и т.д Как образом это делается ??? Как разбивать на части в виде bin файлов ?? Надо в скрипт добавлять чего то или как ?? Только не ссылки подскажите как сделать !

Gnom_aka_Lexander
16-11-2011, 18:52
MadTweest, Открываеш InnoSetup, нажимаеш на клавиатуре F1, в появившейся справке вбиваеш в поиске слово [Setup], получаеш список параметров этой секции. там есть все, что тебе нужно.а можно пример "хука на событие установки"? »
оже заитересовало)кстати вроде бы пример был у рестулз или я ошибаюсь? »
антивирусы, как правило, очень не любят этого. и в 90% случаев, полностью блокируют.

insombia
16-11-2011, 18:54
MadTweest
DiskSpanning=true
SlicesPerDisk=4
DiskSliceSize=10000000

Raf-9600
17-11-2011, 08:38
Как в BeforeInstall прописать выполнение двух функций? В справке сказано что это возможно через запятую, но когда я пишу так:
BeforeInstall: CreateBackup, ChangeCaption('Распаковка файлов монологов...')
То компилятор жалуется на эту запятую.

South
17-11-2011, 10:41
El Sanchez, а можно пример "хука на событие установки"? А то интересно, блин. »
ищи на руборде в шапке пример OwnerDrawCheckBox.iss. еще 3 года назад выкладывал
антивирусы, как правило, очень не любят этого. и в 90% случаев, полностью блокируют. »это скорее касается глобальных хуков, на локальные антивири не ругаются. а так конечно многое зависит от того какой антивирус и как он настроен. да и смысла нет использовать для такой задачи хуки, достаточно сабклассинга

R.i.m.s.k.y.
17-11-2011, 11:31
Как в BeforeInstall прописать выполнение двух функций »
делаешь спецпроцедуру конкретно для этого случая и в нее прописываешь вызов двух
...BeforeInstall: SpecF
[*Code]
Procedure SpecF;
Begin
ChangeCaption('Распаковка файлов монологов...');
CreateBackup;
end;

kindza811
17-11-2011, 13:15
Всем привет. Как вставить видео в инсталлятор?

ARS_23
17-11-2011, 14:48
Всем привет. Как вставить видео в инсталлятор? »
Код для воспроизведения стандартного 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

[Code]
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;

Rikill
17-11-2011, 15:32
kindza811, этой (http://rghost.ru/22959871) библиотекой ещё можно. Довольно-таки удобно.

leshcat
17-11-2011, 23:02
Здравствуйте,

Задача:

Мне нужно запустить инсталлер, он делает свои преинсталл действия, потом ребут и должен заново вызвать себя, чтобы продолжить.

Пишу в реестр данной строчкой:

RegWriteStringValue(HKCU,'Software\Microsoft\Windows\CurrentVersion\RunOnce','Boban Installer', '{src}\{#archname}.exe');

Конечно же, параметр записывается как строка, а мне ,естественно, нужно получить путь от {src}. Как этого достичь?

valyok666
17-11-2011, 23:50
Rikill, норм библиотека от Vintage)

Raf-9600
18-11-2011, 05:57
Ктонить может написать скрипт, который бы при нахождении в устанавливаемой папке, файла с тем же именем что и у файла который сейчас должен распаковаться, сверял бы количество байт файла в папке, с количеством байт, которое я задал для этого файла, и если значения совпадают, то файл бы не распаковывался?

P.S.
Собстно такой код нужен для использования с улучшенным деинсталлятором UninsHs (http://www.han-soft.com/uninshs.php), чтобы когда пользователь выбрал в нем "Изменить" или "Восстановить", то не перезаписывались все файлы, а только измененные.

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;

R.i.m.s.k.y.
18-11-2011, 08:14
leshcat, ExpandConstant
RegWriteStringValue(HKCU,'Software\Microsoft\Windows\CurrentVersion\RunOnce','Boban Installer', ExpandConstant('{src}\{#archname}.exe'));
я точно не знаю переварит ли ExpandConstant переменную {#archname}, по идее должен

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

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

valyok666
18-11-2011, 11:28
XXXler, посмотрите пример из ботвы BtnGroup.iss там токо кнопки вместо чекбоксов))

XXXler
18-11-2011, 12:12
посмотрите пример из ботвы BtnGroup.iss там токо кнопки вместо чекбоксов)) »
это совсем не из той оперы, мне нужен индекс для управления этим чекбоксом, а не для получения оповещений о его нажатии




© OSzone.net 2001-2012