PDA

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


Страниц : 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

GoshaPolo
30-05-2012, 20:07
Gnom_aka_Lexander, спасибо! Наконец-то! Пол дня бился с этой страницей :)

Raf-9600
30-05-2012, 20:09
WizardForm.ComponentsList.ItemEnabled[i] := not IsComponentSelected('Game\Full');»
Выделяет строчку и пишет ошибку colon (':') expeacted.

Gnom_aka_Lexander
30-05-2012, 20:13
Raf-9600, procedure ComponentsListClickCheck(Sender: TObject);
var
i : Integer;
begin
for i := 0 to WizardForm.ComponentsList.ItemCount -1 do
begin
case WizardForm.ComponentsList.ItemCaption[i] of
'1.04c', '1.05b' : // перечисляем через запятую надписи компонентов, которые зависят от GameLoD
WizardForm.ComponentsList.ItemEnabled[i] := not (IsComponentSelected('GameLoD') or IsComponentSelected('Mod\PlugY'));

'1.07', '1.08' :
WizardForm.ComponentsList.ItemEnabled[i] := IsComponentSelected('GameLoD') and not IsComponentSelected('Mod\PlugY');

ExpandConstant('{cm:Text}'), ExpandConstant('{cm:VoiceDiablo2}'), ExpandConstant('{cm:VersionGame}') :
begin
WizardForm.ComponentsList.Checked[i] := IsComponentSelected('Game\Full');
WizardForm.ComponentsList.ItemEnabled[i] := not IsComponentSelected('Game\Full');
end;
end;
end;
OldEvent_ComponentsListClickCheck(Sender);
end;

Raf-9600
30-05-2012, 20:19
Gnom_aka_Lexander, благодарю, а как решить вторую проблему? Ну т.е. если выбрать компонент Game\Lokal то ни GameDiablo2\Text, ни GameDiablo2\VoiceD2, ни Version нельзя выбрать :(

Gnom_aka_Lexander
30-05-2012, 20:32
Raf-9600, вот так, тогда:
procedure ComponentsListClickCheck(Sender: TObject);
var
i : Integer;
begin
for i := 0 to WizardForm.ComponentsList.ItemCount -1 do
begin
case WizardForm.ComponentsList.ItemCaption[i] of
'1.04c', '1.05b' : // перечисляем через запятую надписи компонентов, которые зависят от GameLoD
WizardForm.ComponentsList.ItemEnabled[i] := not (IsComponentSelected('GameLoD') or IsComponentSelected('Mod\PlugY'));

'1.07', '1.08' :
WizardForm.ComponentsList.ItemEnabled[i] := IsComponentSelected('GameLoD') and not IsComponentSelected('Mod\PlugY');

ExpandConstant('{cm:Text}'), ExpandConstant('{cm:VoiceDiablo2}'), ExpandConstant('{cm:VersionGame}') :
begin
if IsComponentSelected('Game\Full') then WizardForm.ComponentsList.Checked[i] := IsComponentSelected('Game\Full');
WizardForm.ComponentsList.ItemEnabled[i] := not IsComponentSelected('Game\Full');
end;
end;
end;
OldEvent_ComponentsListClickCheck(Sender);
end;

Обрати внимание на условие - if IsComponentSelected('Game\Full') then - тоесть компонент принудительно выбран, только если выбран компонет Game\Full, в противном случае его можно выбирать самостоятельно.

El Sanchez
30-05-2012, 21:22
Ктонить может модифицировать скрипт для конвертации OGG чтобы он выполнялся два раза, т.е. нужно чтобы первый раз он конвертировал содержимое папки {app}\data\local\sfx (при условии что выбран компонент "GameVoice"), а второй раз чтобы конвертировал содержимое \data\global\music (при условии что выбран компонент "Music") »
Raf-9600, модифицировать не стал, написал свой вариант.


[Code]
var
RecodePage: TOutputProgressWizardPage;

//
procedure InitializeWizard();
begin
RecodePage := CreateOutputProgressPage('Обработка файлов', '');
end;

procedure RecodeOgg(Path, Mask: String);
var
iFiles: TArrayOfString;
FindRec: TFindRec;
ResultCode, i: Integer;
begin
try
RecodePage.Show;
if FindFirst(ExpandConstant(AddBackslash(RemoveBackslash(Path)) + Mask), FindRec) then
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
SetArrayLength(iFiles, GetArrayLength(iFiles)+1);
iFiles[GetArrayLength(iFiles)-1] := ExpandConstant(AddBackslash(RemoveBackslash(Path)) + FindRec.Name);
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
for i := 1 to GetArrayLength(iFiles) do
begin
RecodePage.SetProgress(i, GetArrayLength(iFiles));
RecodePage.SetText(iFiles[i-1], IntToStr(i*100/GetArrayLength(iFiles)) + ' %');
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i-1]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
DeleteFile(iFiles[i-1]);
end;
finally
RecodePage.Hide;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if IsComponentSelected('GameVoice') then RecodeOgg('{app}\data\local\sfx', '*.ogg');
if IsComponentSelected('Music') then RecodeOgg('{app}\data\global\music', '*.ogg');
end;
end;

Raf-9600
30-05-2012, 22:02
модифицировать не стал, написал свой вариант. »
Это его как-то вызывать нужно? Ибо вот только что проверил и никакой конвертации не произошло...

El Sanchez
30-05-2012, 22:11
Raf-9600, вызывается на этапе ssPostInstall, смотрите в конце. Папки существуют-то, где ogg-файлы находятся? oggdec.exe в {app} или где-то еще?

Raf-9600
30-05-2012, 22:19
El Sanchez, Вот весь скрипт:

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application




[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[components]
Name: "GameVoice"; Description: GameVoice; Types: full
Name: "Music"; Description: "Music"; Types: full


[Files]

Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_05.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_06.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_07.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_08.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_09.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_10.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_gossip_sor.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_intro.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_intro_sor.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_init.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q1_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q2_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q2_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q2_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q3_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q3_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q3_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_after_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_early_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_init.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_instructions.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q4_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q5_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q5_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q5_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q6_after.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q6_early.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_act1_q6_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_goodday.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_goodevening.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_goodmorning.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_greetings.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_hello.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_orderwelcomes.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_welcomeback.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Akara\Aka_yes.ogg; DestDir: {app}\data\local\sfx\Act1\Akara;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_andariel.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_complete_toolsoftrade.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_catacombs.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_jail.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_monastery.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_entry_wilderness.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_find_cairnstones.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_find_treeofinifuss.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_find_tristram.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Amazon\Ama_act1_rescue_cain.ogg; DestDir: {app}\data\local\sfx\Act1\Amazon;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_andariel.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_complete_toolsoftrade.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_burialground.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_catacombs.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_denofevil.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_forgottentower.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_jail.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_monastery.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_entry_wilderness.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_find_cairnstones.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_find_treeofinifuss.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_find_tristram.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Barbarian\Bar_act1_rescue_cain.ogg; DestDir: {app}\data\local\sfx\Act1\Barbarian;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_gossip_afterA1Q6init.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q3_after.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q3_early.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q3_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_rescuedbyhero.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_rescuedbyrogues.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q4_tragedyoftristram.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q5_after.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q5_early.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q5_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_after.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_early.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_init.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_act1_q6_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_help1.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_help2.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Cain\Cain_help3.ogg; DestDir: {app}\data\local\sfx\Act1\Cain;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_05.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_06.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_gossip_bar.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_intro.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_intro_bar.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_after_alt.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_after_main.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q1_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q2_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q2_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q2_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_init.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q3_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_after_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_instructions.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q4_successful_scroll.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q5_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q5_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q5_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q6_after.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q6_early.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_act1_q6_successful.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_farewell.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodbye.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodday.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodevening.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodmorning.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_goodtoseeyou.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_greetings.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_hello.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_heythere.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_needhelp.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_whatcanIdoforyou.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_whatchaneed.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Charsi\Cha_yes.ogg; DestDir: {app}\data\local\sfx\Act1\Charsi;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_01.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_02.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_03.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_04.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_05.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_06.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_gossip_nec.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;
Source: D:\Diablo 2\Localization\Sound\The Best\d2speech\data\local\sfx\Act1\Gheed\Ghe_act1_intro.ogg; DestDir: {app}\data\local\sfx\Act1\Gheed;



Source: D:\Diablo 2\Music\D2 OST\Act1\Cave (caves).ogg; DestName: caves.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Crypt.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Monastery.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Rogue (town1).ogg; DestName: town1.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act1\Wilderness (wild).ogg; DestName: wild.ogg; DestDir: {app}\data\global\music\Act1\
Source: D:\Diablo 2\Music\D2 OST\Act2\Desert.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act2\Sanctuary (Harem).ogg; DestName: Harem.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act2\Tombs.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act2\Toru (town2).ogg; DestName: town2.ogg; DestDir: {app}\data\global\music\Act2\
Source: D:\Diablo 2\Music\D2 OST\Act3\Jungle.ogg; DestDir: {app}\data\global\music\Act3\
Source: D:\Diablo 2\Music\D2 OST\Act3\Spider.ogg; DestDir: {app}\data\global\music\Act3\
Source: D:\Diablo 2\Music\D2 OST\Act4\Leoric (diablo).ogg; DestName: diablo.ogg; DestDir: {app}\data\global\music\Act4\
Source: D:\Diablo 2\Music\D2 OST\Act4\Mesa.ogg; DestDir: {app}\data\global\music\Act4\

Source: D:\Diablo 2\Utilites\Ogg - Wav\oggdec.exe; DestDir: {app}; Flags: ignoreversion;



[C0de]
var
RecodePage: TOutputProgressWizardPage;

//
procedure InitializeWizard();
begin
RecodePage := CreateOutputProgressPage('Обработка файлов', '');
end;

procedure RecodeOgg(Path, Mask: String);
var
iFiles: TArrayOfString;
FindRec: TFindRec;
ResultCode, i: Integer;
begin
try
RecodePage.Show;
if FindFirst(ExpandConstant(AddBackslash(RemoveBackslash(Path)) + Mask), FindRec) then
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
SetArrayLength(iFiles, GetArrayLength(iFiles)+1);
iFiles[GetArrayLength(iFiles)-1] := ExpandConstant(AddBackslash(RemoveBackslash(Path)) + FindRec.Name);
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
for i := 1 to GetArrayLength(iFiles) do
begin
RecodePage.SetProgress(i-1, GetArrayLength(iFiles));
RecodePage.SetText(iFiles[i-1], IntToStr((i-1)*100/GetArrayLength(iFiles)) + ' %');
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
DeleteFile(iFiles[i]);
end;
finally
RecodePage.Hide;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if IsComponentSelected('GameVoice') then RecodeOgg('{app}\data\local\sfx', '*.ogg');
if IsComponentSelected('Music') then RecodeOgg('{app}\data\global\music', '*.ogg');
end;
end;

Sanshalay
30-05-2012, 22:32
Как создать свою пустую страницу в инсталляторе?

YURSHAT
31-05-2012, 01:48
Как создать свою пустую страницу в инсталляторе? »
[Setup]
AppName=My Program
AppVersion=1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputBaseFilename=setup

[Languages]
Name: "ru"; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
ru.PageName=Название моей страницы
ru.PageDescr=Описание моей страницы

[_code]
var
MyPage: TWizardPage;
Label1: TLabel;

procedure RedesignWizardForm;
begin
MyPage:= CreateCustomPage(wpWelcome, ExpandConstant('{cm:PageName}'), ExpandConstant('{cm:PageDescr}'));

Label1 := TLabel.Create(WizardForm);
with Label1 do
begin
Parent := MyPage.Surface;
SetBounds(ScaleX(0), ScaleY(216), ScaleX(417), ScaleY(17));
Caption := SetupMessage(msgInfoAfterClickLabel);
end;
end;

procedure InitializeWizard;
begin
RedesignWizardForm;
end;

ILIA_1992
31-05-2012, 02:02
Как исправить эту ошибку ?

http://s019.radikal.ru/i607/1205/b3/13fc49b5389c.jpg

Gnom_aka_Lexander
31-05-2012, 09:57
ILIA_1992, так-то оффтоп. Но, отвечу - использовать для распаковки те-же параметры, которые были при упаковке. от Inno это никаким боком не зависит.

ILIA_1992
31-05-2012, 10:47
Gnom_aka_Lexander,

Я давно репаки не делал . Всё забыл .
Начинаю с нуля.
А поподробнее про ошибку можно ? Заранее спасибо.

И ещё один вопрос .

Как найти реестр ? например Alan Wake's American Nightmare .

El Sanchez
31-05-2012, 12:07
Ибо вот только что проверил и никакой конвертации не произошло... »
Вот весь скрипт: »
Raf-9600, ясно, ведь в указанных папках ogg-файлов нет, они глубже - в подпапках. Вот вариант №2, универсальный. В процедуру RecodeOgg добавлен параметр Recurse (True - искать в подпапках, False - только в указанной папке).


[Code]
var
RecodePage: TOutputProgressWizardPage;


function FindFiles(Path, Mask: String; Recurse: BOOL): TArrayOfString;
var
FindRecAll, FindRecMask: TFindRec;
begin
if not DirExists(Path) then Exit;
//
if FindFirst(AddBackslash(RemoveBackslash(Path)) + Mask, FindRecMask) then
try
repeat
if (FindRecMask.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
begin
SetArrayLength(Result, GetArrayLength(Result)+1);
Result[GetArrayLength(Result)-1] := AddBackslash(RemoveBackslash(Path)) + FindRecMask.Name;
end;
until not FindNext(FindRecMask);
finally
FindClose(FindRecMask);
end;
//
if Recurse then
begin
if FindFirst(AddBackslash(RemoveBackslash(Path)) + '*', FindRecAll) then
try
repeat
if (FindRecAll.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and (FindRecAll.Name <> '.') and (FindRecAll.Name <> '..') then
Result := FindFiles(AddBackslash(RemoveBackslash(Path)) + FindRecAll.Name, Mask, Recurse);
until not FindNext(FindRecAll);
finally
FindClose(FindRecAll);
end;
end;
end;

procedure RecodeOgg(Path, Mask: String; Recurse: BOOL);
var
iFiles: TArrayOfString;
ResultCode, i: Longint;
begin
try
RecodePage.Show;
iFiles := FindFiles(Path, Mask, Recurse);
for i := 1 to GetArrayLength(iFiles) do
begin
RecodePage.SetProgress(i, GetArrayLength(iFiles));
RecodePage.SetText(iFiles[i-1], IntToStr(i*100/GetArrayLength(iFiles)) + ' %');

Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i-1]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
DeleteFile(iFiles[i-1]);
end;
finally
RecodePage.Hide;
end;
end;

procedure InitializeWizard();
begin
RecodePage := CreateOutputProgressPage('Обработка файлов', '');
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if IsComponentSelected('GameVoice') then RecodeOgg(ExpandConstant('{app}\data\local\sfx'), '*.ogg', True);
if IsComponentSelected('Music') then RecodeOgg(ExpandConstant('{app}\data\global\music'), '*.ogg', True);
end;
end;


P.S. Не увидел в вашем коде привязку какого-нибудь файла к компоненту.
P.P.S. Вместо выделенных строк можете написать для теста чего-нибудь нейтральное, типа Sleep(100).

Raf-9600
31-05-2012, 14:10
Не увидел в вашем коде привязку какого-нибудь файла к компоненту. »
Это тестовый скрипт.

Все файлы которые отвечают за GameVoice сконвертировались отлично, но вот когда дело дошло до Music то появилась ошибка Out Of Range. и компилятор выделил:
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);

Ещё как я понял этот скрипт создает свою страничку, а для меня это совсем не подходит, так как это вряд ли получиться совместить с теми украшательствами что уже имеются у меня.

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

El Sanchez
31-05-2012, 16:11
Все файлы которые отвечают за GameVoice сконвертировались отлично, но вот когда дело дошло до Music то появилась ошибка Out Of Range. и компилятор выделил: »
Raf-9600, мерси, поправил.
Ещё как я понял этот скрипт создает свою страничку, а для меня это совсем не подходит, так как это вряд ли получиться совместить с теми украшательствами что уже имеются у меня.
И ещё на данный момент скрипт в поле статуса пишет какой файл обрабатывает, а в том поле что нижу, пишет проценты. Но мне бы хотелось чтобы в поле статуса писалось во время обработки GameVoice - "Конвертация монологов", а во время обработки Music - "Конвертация музыки". И после этих надписей уже можно отображение процентов прогресса. »
Raf-9600, лады, раз хотите стандартную, то вариант №3:


[Code]
function FindFiles(Path, Mask: String; Recurse: BOOL): TArrayOfString;
var
FindRecAll, FindRecMask: TFindRec;
begin
if not DirExists(Path) then Exit;
//
if FindFirst(AddBackslash(RemoveBackslash(Path)) + Mask, FindRecMask) then
try
repeat
if (FindRecMask.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0) then
begin
SetArrayLength(Result, GetArrayLength(Result)+1);
Result[GetArrayLength(Result)-1] := AddBackslash(RemoveBackslash(Path)) + FindRecMask.Name;
end;
until not FindNext(FindRecMask);
finally
FindClose(FindRecMask);
end;
//
if Recurse then
begin
if FindFirst(AddBackslash(RemoveBackslash(Path)) + '*', FindRecAll) then
try
repeat
if (FindRecAll.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0) and (FindRecAll.Name <> '.') and (FindRecAll.Name <> '..') then
Result := FindFiles(AddBackslash(RemoveBackslash(Path)) + FindRecAll.Name, Mask, Recurse);
until not FindNext(FindRecAll);
finally
FindClose(FindRecAll);
end;
end;
end;

procedure RecodeOgg(Path, Mask, Status: String; Recurse: BOOL);
var
iFiles: TArrayOfString;
ResultCode, i: Longint;
begin
iFiles := FindFiles(Path, Mask, Recurse);
with WizardForm.ProgressGauge do
begin
Position := 0;
Max := GetArrayLength(iFiles)-1;
for i := 1 to Max+1 do
begin
Position := i;
WizardForm.StatusLabel.Caption := Status + IntToStr(i*100/(Max+1)) + ' %';
Exec(ExpandConstant('{app}\oggdec.exe'), '-Q ' + AddQuotes(iFiles[i-1]), '', SW_HIDE, EwWaitUntilTerminated, ResultCode);
DeleteFile(iFiles[i-1]);
end;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssPostInstall then
begin
if IsComponentSelected('GameVoice') then RecodeOgg(ExpandConstant('{app}\data\local\sfx'), '*.ogg', 'Конвертация монологов выполнена на... ', True);
if IsComponentSelected('Music') then RecodeOgg(ExpandConstant('{app}\data\global\music'), '*.ogg', 'Конвертация музыки выполнена на... ', True);
end;
end;

Raf-9600
31-05-2012, 16:55
El Sanchez, Вот теперь все работает как нужно, Благодарю http://i26.fastpic.ru/big/2011/0827/17/bbdd77221e05aa600f53f81a45276c17.gif

На ум пришло лишь два нюанса которыми его можно было бы дополнить:
1. Было бы очень круто, если бы прогресс-бар так же бы был в таскбаре (на ярлыке инсталлятора) если у пользователя Win7.
2. Так как в моем скрипте на странице инсталляциии отображается только строчка статуса, то хотелось бы чтобы проценты хода выполнения отображались тоже в строке статуса, после надписи. Т.е. чтобы можно было написать "Конвертация музыки выполнена на" и справа (не снизу) отображение процентов.

Это все конечно не критично, но хотелось бы иметь http://i25.fastpic.ru/big/2011/0719/8f/09300ddfe3350a8d59a9bb4477c6148f.gif

El Sanchez
31-05-2012, 18:24
1. Было бы очень круто, если бы прогресс-бар так же бы был в таскбаре (на ярлыке инсталлятора) если у пользователя Win7. »
Raf-9600, такое возможно сделать только в юникодной версии Inno.
2. Так как в моем скрипте на странице инсталляциии отображается только строчка статуса, то хотелось бы чтобы проценты хода выполнения отображались тоже в строке статуса, после надписи. Т.е. чтобы можно было написать "Конвертация музыки выполнена на" и справа (не снизу) отображение процентов. »
Raf-9600, изменил свой предыдущий код.

Raf-9600
31-05-2012, 20:01
El Sanchez, ИМХО его можно было бы и в первый пост, под спойлер "Ссылки на примеры скриптов" закинуть. Так как уверен, что этот код многим пригодиться.




© OSzone.net 2001-2012