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

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

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

Сообщение TROY Diamond »

Цитата Дэниэл Вайсс:



Наведя курсор на любой из компонентов, в правом окне, появляется описание этого компонента
Скрипты Inno Setup. Помощь и советы [часть 4]





как-то так вроде




[Languages]

Name: english; MessagesFile: compiler:Default.isl

Name: russian; MessagesFile: compiler:Languages\Russian.isl



[CustomMessages]

english.ComponentsName1=My program™

russian.ComponentsName1=Моя программа™

english.ComponentsName1_1=English version

russian.ComponentsName1_1=Английская версия

english.ComponentsName1_2=Russian version

russian.ComponentsName1_2=Русская версия

english.ComponentsName2=Help

russian.ComponentsName2=Помощь

english.ComponentsName2_1=Documentation

russian.ComponentsName2_1=Документация

english.ComponentsName2_2=User manual

russian.ComponentsName2_2=Руководство пользователя

english.ComponentsInfoPanel1=Description

russian.ComponentsInfoPanel1=Описание

english.ComponentsInfoPanel2=Direct the cursor a mouse on component to read his description.

russian.ComponentsInfoPanel2=Наведите курсор мыши на компонент, чтобы прочитать его описание.

english.ComponentsDescription1=Necessarily is fixed

russian.ComponentsDescription1=Устанавливается обязательно

english.ComponentsDescription2=Install english version

russian.ComponentsDescription2=Установить английскую версию

english.ComponentsDescription3=Install russian version

russian.ComponentsDescription3=Установить русскую версию

english.ComponentsDescription4=Help

russian.ComponentsDescription4=Помощь

english.ComponentsDescription5=Read documentation

russian.ComponentsDescription5=Прочитать документацию

english.ComponentsDescription6=Read user manual

russian.ComponentsDescription6=Прочитать руководство пользователя



[Components]

Name: main; Description: {cm:ComponentsName1}; Types: full custom; Flags: fixed

Name: main\english; Description: {cm:ComponentsName1_1}; Flags: exclusive

Name: main\russian; Description: {cm:ComponentsName1_2}; Flags: exclusive

Name: help; Description: {cm:ComponentsName2}; Types: full custom

Name: help\documentation; Description: {cm:ComponentsName2_1}; Types: full custom

Name: help\manual; Description: {cm:ComponentsName2_2}; Types: full custom



[Files]

Source: "MyProg.exe"; DestDir: "{app}"; Components: main

Source: "MyProg.chm"; DestDir: "{app}"; Components: help

Source: "descctrl.dll"; Flags: dontcopy



[Messages]

ComponentsDiskSpaceMBLabel=


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


function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';

function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';



var

Info: TNewStaticText;

InfoCaption: TNewStaticText;

InfoPanel: TPanel;



procedure DeinitializeSetup();

begin

disabledesc();

end;



procedure InitializeWizard();

begin

WizardForm.TypesCombo.Visible:=False;

WizardForm.ComponentsList.Height := ScaleY(181) - WizardForm.TypesCombo.Top;

WizardForm.ComponentsList.Top := WizardForm.TypesCombo.Top;

WizardForm.ComponentsList.Width := ScaleX(417);



InfoPanel := TPanel.Create(WizardForm);

InfoPanel.Parent := WizardForm.SelectComponentsPage;

InfoPanel.Caption := '';

InfoPanel.Top := ScaleY(190);

InfoPanel.Left := ScaleX(0);

InfoPanel.Width := ScaleX(417);

InfoPanel.Height := ScaleY(38);

InfoPanel.BevelInner := bvRaised;

InfoPanel.BevelOuter := bvLowered;

InfoCaption := TNewStaticText.Create(WizardForm);

InfoCaption.Parent := WizardForm.SelectComponentsPage;

InfoCaption.Caption := ExpandConstant('{cm:ComponentsInfoPanel1}');

InfoCaption.Left := ScaleX(7);

InfoCaption.Top := InfoPanel.Top - ScaleY(6);

InfoCaption.Font.Color := clActiveCaption;



Info := TNewStaticText.Create(WizardForm);

Info.Parent := InfoPanel;

Info.AutoSize := False;

Info.Left := ScaleX(6);

Info.Width := ScaleX(403);

Info.Top := ScaleY(12);

Info.Height := ScaleY(24);

Info.Caption := ExpandConstant('{cm:ComponentsInfoPanel2}');

Info.WordWrap := true;



enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,

ExpandConstant('{cm:ComponentsDescription1};')+

ExpandConstant('{cm:ComponentsDescription2};')+

ExpandConstant('{cm:ComponentsDescription3};')+

ExpandConstant('{cm:ComponentsDescription4};')+

ExpandConstant('{cm:ComponentsDescription5};')+

ExpandConstant('{cm:ComponentsDescription6};')

);

end;







и это есть в справке. иногда полезно туда заглядывать
Аватара пользователя
ARS_23

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

Сообщение ARS_23 »

Цитата Дэниэл Вайсс:



Наведя курсор на любой из компонентов, в правом окне, появляется описание этого компонента.
Скрипты Inno Setup. Помощь и советы [часть 4]





Вот держи






Код:

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

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Components]
Name: "program"; Description: "Игра"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Помощь"; Types: full
Name: "Text"; Description: "Tехт"; Types: full
Name: "Text\en"; Description: "Aнглийский"; Flags: exclusive
Name: "Text\de"; Description: "Немецкий"; Flags: exclusive
Name: "Text\cn"; Description: "Китайский"; Flags: exclusive
Name: "Text\ru"; Description: "Русский"; Flags: exclusive
Name: "Voice"; Description: "Озвучка"; Types: full
Name: "Voice\en"; Description: "Английская"; Flags: checkablealone
Name: "Voice\de"; Description: "Немецкая"; Flags: checkablealone
Name: "Voice\ch"; Description: "Китайская"; Flags: checkablealone
Name: "Voice\ru"; Description: "Русская"; Flags: checkablealone
Name: "Voice\ru2"; Description: "Русская"; Flags: checkablealone
Name: "Voice\ru3"; Description: "Русская"; Flags: checkablealone
[Files]
Source: compiler:Dll Pack\descctrl.dll; Flags: dontcopy
 [ Code]
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';
var
  Info: TNewStaticText;
  InfoCaption: TNewStaticText;
  InfoPanel: TPanel;
procedure DeinitializeSetup();
begin
  disabledesc();
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);
  InfoPanel := TPanel.Create(WizardForm);
  InfoPanel.Parent := WizardForm.SelectComponentsPage;
  InfoPanel.Caption := '';
  InfoPanel.Top := WizardForm.ComponentsList.Top;
  InfoPanel.Left := ScaleX(216);
  InfoPanel.Width := ScaleX(200);
  InfoPanel.Height := WizardForm.ComponentsList.Height;
  InfoPanel.BevelInner := bvRaised;
  InfoPanel.BevelOuter := bvLowered;
  InfoCaption := TNewStaticText.Create(WizardForm);
  InfoCaption.Parent := WizardForm.SelectComponentsPage;
  InfoCaption.Caption := 'Информация:';
  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 := 'Наведите на компонент, чтобы получить дополнительную информацию';
  Info.WordWrap := true;
  enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
       'Короткое описание игры;'+
       'Дополнительная документация, на разных языках;'+
       'Техт игры;'+
       'Официальный английский текст от EA Games;'+
       'Официальный немецкий текст от неизвестного производителя;'+
       'Пиратский китайский текст;'+
       'Официальный русский текст от софтклаб;'+
       'Озвучка игры;'+
       'Официальная английская озвучка от EA Games;'+
       'Официальная немецкая озвучка от неизвестного производителя;'+
       'Пиратская китайская озвучка;'+
       'Официальная русская озвучка от софтклаб;'+
       'Русская озвучка от 7Wolf;'+
       'Русская озвучка от фаргуса;'
       );
end;




оно самое, в правом окне.
Аватара пользователя
Spell1999

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

Сообщение Spell1999 »

Собстно есть код для конвертирования OGG, с полноценным прогресс-баром. А ктонить мог бы прикрутить к нему возможность, чтоб прогресс отображался не только в окне инсталлятора, но и на самой иконке инсталлятора, в панели задач (таскбаре)? Речь идет о Win7.



Собстно код:


читать дальше »


[C0de]

var

Files: Array of String;

S: String;

n: Integer;



Function StringToArray(Text, Cut: String): array of String; var i, k: Integer;

Begin

SetArrayLength(Result, 0); if Cut = '' then Cut:= #1310; //если шаблон пуст, считаем переводы строк

Repeat k:= Pos(Cut,Text);

if k = 1 then begin Delete(Text, 1, Length(Cut)); CONTINUE

end;

SetArrayLength(Result, GetArrayLength(Result) +1); i:= GetArrayLength(Result) -1;

if k = 0 then

Result:=Text

else begin

Result:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result) + Length(Cut));

end;

Until Length(Text) * k = 0;

End;



procedure FindFiles(FromDir: String; Mask: String);

var FSR, DSR: TFindRec; FindResult: Boolean;

begin

FindResult:= FindFirst(AddBackslash(FromDir)+Mask, FSR)

while FindResult do begin

if FSR.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then begin

S:= S + AddBackslash(fromDir) + FSR.Name +'|';

end;

FindResult:= FindNext(FSR);

end;

FindResult:= FindFirst(AddBackslash(FromDir)+ '*.*', DSR)

while FindResult do begin

if ((DSR.Attributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY) and not ((DSR.Name = '.') or (DSR.Name = '..')) then begin

FindFiles(AddBackSlash(FromDir)+DSR.Name, Mask)

end;

FindResult:= FindNext(DSR);

end;

FindClose(FSR); FindClose(DSR)

end;



procedure RecodeOgg;

var ResultCode: integer; CurFile: String;

begin

FindFiles(ExpandConstant('{app}'), '*.ogg') //Находим все файлы по маске, в выбранной папке

Files:= StringToArray(S, '|') //Переводим в массив

WizardForm.ProgressGauge.Max:= GetArrayLength(Files)-1; //Получаем кол-во файлов

WizardForm.ProgressGauge.Position:=0

for n:=(GetArrayLength(Files)-1) downto 0 do begin

CurFile:= Files[n]

StringChange(CurFile, AddBackslash(ExpandConstant('{app}')), '')

Exec(ExpandConstant('{app}\oggdec.exe'), '-Q '+AddQuotes(CurFile), '', SW_Hide, EwWaitUntilTerminated, ResultCode) //Для каждого файла запускаем декодер

DeleteFile(Files[n]) //Удаляем ненужный файл

WizardForm.FilenameLabel.Caption:= Files[n]; //Двигаем прогрессбар

WizardForm.ProgressGauge.Position:= WizardForm.ProgressGauge.Position +1;

end;

DeleteFile(ExpandConstant('{app}\oggdec.exe'))

end;



procedure CurStepChanged(CurStep: TSetupStep);

begin

if CurStep = ssPostInstall then RecodeOgg;

end;
Аватара пользователя
TROY Diamond

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

Сообщение TROY Diamond »

И ещё такой вопрос: есть ли у когонить код, реализующий возможность "вручную" передвигать прогресс-бар? Ну тоесть после распаковки файлов, у меня происходит 10 манипуляций с ними. Как сделать чтобы после каждой "манипуляции", полоска прогресс-бара увеличивалась?



P.S.

Нужен не второй прогресс-бар, а чтоб все происходило в стандартном, после распаковки файлов.
Аватара пользователя
tem000

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

Сообщение tem000 »

Цитата Raf-9600:



"вручную" передвигать прогресс-бар?
Скрипты Inno Setup. Помощь и советы [часть 4]




WizardForm.ProgressGauge.Position:=(тут увеличиваеш позицию после каждого действия).

Пример:

Действие

WizardForm.ProgressGauge.Position:=10;

Действие

WizardForm.ProgressGauge.Position:=20;

Действие

WizardForm.ProgressGauge.Position:=30;

............................

Последняя позиция должна равнятся максимальному значению прогрессбара:

WizardForm.ProgressGauge.Position:=WizardForm.ProgressGauge.Max;
Аватара пользователя
Gnom_aka_Lexander

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

Сообщение Gnom_aka_Lexander »

Лександер, А как его "задействовать"?

Когда указываю так, то ничего не работает. Прогресс-бар тупо сбрасывается "на ноль", и все.



[Run]

Filename: "{app}\binkmix.exe"; StatusMsg: "MyProgress1"; AfterInstall: MyProgress1;

Filename: "{app}\binkmix.exe"; StatusMsg: "MyProgress2"; AfterInstall: MyProgress2;

Filename: "{app}\binkmix.exe"; StatusMsg: "MyProgress3"; AfterInstall: MyProgress3;

Filename: "{app}\binkmix.exe"; StatusMsg: "MyProgress4"; AfterInstall: MyProgress4;



[C0de]

procedure MyProgress1;

begin

WizardForm.ProgressGauge.Position:=10

end;



procedure MyProgress2;

begin

WizardForm.ProgressGauge.Position:=20

end;



procedure MyProgress3;

begin

WizardForm.ProgressGauge.Position:=30

end;



procedure MyProgress4;

begin

WizardForm.ProgressGauge.Position:=40

end;
Аватара пользователя
TROY Diamond

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

Сообщение TROY Diamond »

Как при удалении проги (запуске деинсталлятора), проверить НЕ запущена ли она и автоматически закрыть её БЕЗ запроса, к примеру если она "сидит в трее", и продолжить удаление?

Аналогичный вопрос при установке - вдруг эта программа была уже установлена и сейчас запущена...
Аватара пользователя
TROY Diamond

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

Сообщение TROY Diamond »

Цитата XXXler:

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

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

Цитата Лександер:

Дык, не работают уже ТВОИ художества, в примере Николая, я не заметил такого стращилища, скрин которого ты показал. учись работать с текстом внутри кода.

Ну так помогите, скажите как правильно? Поэтому и спрашиваю...
Аватара пользователя
No4noylis

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

Сообщение No4noylis »

Извеняюсь за оффтоп, но... те кто делал репак на Ведьмак 2. Убийцы королей, напишите пожалуйста в ЛС
Аватара пользователя
TROY Diamond

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

Сообщение TROY Diamond »

Как добавить "задание" в "Назначенные задания" - файл .job (Windows\Tasks)?
Ответить

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