Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 5]
GoshaPolo
29-05-2012, 21:39
Johny777, спасибо еще раз! У меня справка в .chm не работает почему-то. Страницы не отображает. Поэтому пользуюсь другими источниками, а там такого флага не было :(
Gnom_aka_Lexander
29-05-2012, 22:04
GoshaPolo, она работает. кликни в списке и все откроется. справка кривовата, но работает. еще вариант - в свойствах файла справки посмотри - если есть кнопка "Разблокировать" то нажми ее и потом - применить.
Как отключить разбиение файлов? Нужно все в одном exe. Размер около одного гигабайта. Такое возможно?
Просто файл .bin не особо нужен (получается два файла)
zeroka_no_onna
29-05-2012, 22:15
Подскажите про Inno + ISDone!
Потребовалось разбить репак на диски и там arc, precomp - потому ISDone для нормального отображения прогресса.
И получилось вот что - при запуске сетапа сразу просит второй диск, как выберешь параметры и "Установить" - опять просит первый!!!(ну и на середине установки, естественно, второй)
Почему такая чехарда с дисками?При чистом Inno всё нормально было.
=================================================================================================
Как отключить разбиение файлов? Нужно все в одном exe. Размер около одного гигабайта. Такое возможно?
Просто файл .bin не особо нужен (получается два файла) »
Да.
OutputDir=куда\сохранять
OutputBaseFilename=название
SolidCompression=yes
Да.
OutputDir=куда\сохранять
OutputBaseFilename=название
SolidCompression=yes »
Спасибо.
Raf-9600
30-05-2012, 00:25
Ктонить может модифицировать скрипт для конвертации OGG чтобы он выполнялся два раза, т.е. нужно чтобы первый раз он конвертировал содержимое папки {app}\data\local\sfx (при условии что выбран компонент "GameVoice"), а второй раз чтобы конвертировал содержимое \data\global\music (при условии что выбран компонент "Music")
Собсно особенность этого кода в том, что он в виде прогресс-бара отображает процесс конвертации:
[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[i]:=Text
else begin
Result[i]:= Copy(Text, 1, k -1); Delete(Text, 1, Length(Result[i]) + 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;
GoshaPolo
30-05-2012, 10:46
Еще несколько вопросов:
1. Как задать выбор компонентов на свои RadioButton?
2. Как разделить RadioButton по взаимосвязи? Например у меня есть 4 RadioButton, первый и второй взаимосвязаны между собой и вместе выбираться не должны ни в коем случае, а третий и четвертый соответственно связаны между собой и вместо тоже выбираться не могут.
3. Как изменить картинку при наведении на нее курсора?
Johny777
30-05-2012, 11:39
GoshaPolo,
вполне реально
потом в этом сообщении примеры сделаю
скачай ка для начала (или уже?) здесь http://forum.oszone.net/showthread.php?p=1201499#post1201499 расширенную версию (ispack не unicode с препроцессором)
или здесь сборку http://innoultra.ru/ В ней много примерв и библиотек!
GoshaPolo
30-05-2012, 11:58
Johny777, я и так пользуюсь расширенной версией от ResTools. Всю облазил, многое нашел, что нужно. Но вот по этим вопросам, которые описал ничего не могу поделать. Например на картинку нет события OnEnter, так бы 3-ий вопрос не задавал.
Johny777
30-05-2012, 12:41
1.
как во втором примере (если я правильно понял)
2.
размести на панелях
http://sendfile.su/604099
код:
[Setup]
AppName=Test Mouse Event
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=userdocs:Inno Setup Examples Output
[Files]
Source: "Cremator_poster.bmp"; DestDir: {app}; Check: A
Source: "Airex_tower_large.bmp"; DestDir: {app}; Check: B
Source: "Alyx_Vance_head.bmp"; DestDir: {app}; Check: C
Source: "Gordon_head_cover.bmp"; DestDir: {app}; Check: D
[ Code]
var
Panel1: TPanel;
NewRadioButton1: TNewRadioButton;
NewRadioButton2: TNewRadioButton;
Panel2: TPanel;
NewRadioButton3: TNewRadioButton;
NewRadioButton4: TNewRadioButton;
function A: Boolean;
begin
Result:=NewRadioButton1.Checked;
end;
function B: Boolean;
begin
Result:=NewRadioButton2.Checked;
end;
function C: Boolean;
begin
Result:=NewRadioButton3.Checked;
end;
function D: Boolean;
begin
Result:=NewRadioButton4.Checked;
end;
procedure InitializeWizard();
begin
{ Panel1 }
Panel1 := TPanel.Create(WizardForm);
with Panel1 do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(104);
Top := ScaleY(104);
Width := ScaleX(185);
Height := ScaleY(57);
BevelOuter := bvNone;
Caption := '';
end;
{ NewRadioButton1 }
NewRadioButton1 := TNewRadioButton.Create(WizardForm);
with NewRadioButton1 do
begin
Parent := Panel1;
Left := ScaleX(16);
Top := ScaleY(8);
Width := ScaleX(113);
Height := ScaleY(17);
Checked := True;
end;
{ NewRadioButton2 }
NewRadioButton2 := TNewRadioButton.Create(WizardForm);
with NewRadioButton2 do
begin
Parent := Panel1;
Left := ScaleX(16);
Top := ScaleY(32);
Width := ScaleX(113);
Height := ScaleY(17);
end;
{ Panel2 }
Panel2 := TPanel.Create(WizardForm);
with Panel2 do
begin
Parent := WizardForm.SelectDirPage;
Left := ScaleX(104);
Top := ScaleY(168);
Width := ScaleX(185);
Height := ScaleY(62);
BevelOuter := bvNone;
Caption := '';
end;
{ NewRadioButton3 }
NewRadioButton3 := TNewRadioButton.Create(WizardForm);
with NewRadioButton3 do
begin
Parent := Panel2;
Left := ScaleX(16);
Top := ScaleY(0);
Width := ScaleX(113);
Height := ScaleY(17);
end;
{ NewRadioButton4 }
NewRadioButton4 := TNewRadioButton.Create(WizardForm);
with NewRadioButton4 do
begin
Parent := Panel2;
Left := ScaleX(16);
Top := ScaleY(24);
Width := ScaleX(113);
Height := ScaleY(17);
Checked := True;
end;
end;
3.
Например на картинку нет события OnEnter »
есть "OnMouseEnter" :)
архив с фалами
http://sendfile.su/604084
код:
[Setup]
AppName=Test Mouse Event
AppVersion=1.5
DefaultDirName={pf}\My Application
SolidCompression=yes
Compression=lzma/ultra
PrivilegesRequired=none
OutputDir=userdocs:Inno Setup Examples Output
[Files]
Source: "Cremator_poster.bmp"; Flags: dontcopy solidbreak
Source: "Airex_tower_large.bmp"; Flags: dontcopy solidbreak
[ Code]
var
Pic: TBitmapImage;
procedure Navodim_na_kartinku(Sender: TObject); /// при наведении
begin
Pic.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Airex_tower_large.bmp')); /// грузим в картинку другой файл картинки
end;
//procedure Navodim_na_kartinku(Sender: TObject; Shift: TShiftState; X, Y: Integer); /// при наведении
//begin
// Pic.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Airex_tower_large.bmp')); /// грузим в картинку другой файл картинки
//end;
procedure Ubiraem_Mish(Sender: TObject); /// уводим курсор с картинки
begin
Pic.Bitmap.LoadFromFile(ExpandConstant('{tmp}\Cremator_poster.bmp')); /// грузим в картинку файл картинки по умолчанию
end;
procedure InitializeWizard();
begin
with WizardForm do
begin
AutoScroll := False;
ClientHeight := ScaleY(637);
ClientWidth := ScaleX(523);
OuterNotebook.Visible := False;
CancelButton.SetBounds(ScaleX(450), ScaleY(600), ScaleX(60), ScaleY(20));
Bevel.Hide;
end;
ExtractTemporaryFile('Cremator_poster.bmp'); // извлекаем в темп обе картинки
ExtractTemporaryFile('Airex_tower_large.bmp');
Pic := TBitmapImage.Create(WizardForm)
with Pic do
begin
Parent := WizardForm;
Left := ScaleX(20);
Top := ScaleY(20);
Bitmap.LoadFromFile(ExpandConstant('{tmp}\Cremator_poster.bmp'));
AutoSize := True;
OnMouseEnter := @Navodim_na_kartinku;
//OnMouseMove := @Navodim_na_kartinku; /// при наведении (вариант)
OnMouseLeave := @Ubiraem_Mish; /// когда курсор за пределами картинки
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
WizardForm.NextButton.Visible := False;
end;
GoshaPolo
30-05-2012, 13:16
Johny777, хм... не хочет у меня компилятор 5.4.3 принимать OnMouseEnter. Пишет, что неизвестный идентификатор.
Johny777
30-05-2012, 13:22
GoshaPolo,
у меня тоже 5.4.3.
всё компилится
(ANSI)
скачай архив с файлами
если не получится ставь заново или скачай InnoUltra из ссылки моего поста
GoshaPolo
30-05-2012, 14:22
Johny777, установил InnoUltra и все переменные заработали как следует. Спасибо! По RadioButton тоже все верно поняли, все получилось. Только вот маленький вопросик по панелям. Можно ли сделать фон панели прозрачным?
И еще в догонку, последние четыре интересующих меня вопроса, больше не будет:
1. Как поменять название окна, которое отображается в панели задач? Со стандартного "Установить" на что-нибудь свое.
2. Как поменять заголовок окна деинсталяции?
3. Как поменять текст в первом окне деисталяции, где пишется "Вы действительно хотите удалить..."?
3. Как поменять текст в завершающем деинсталяцию окне, где пишется "Программа *** была полностью удалена с Вашего компьютера."?
GoshaPolo
30-05-2012, 15:19
Johny777, вот сейчас появился вопрос :)
Это не есть хорошо, что RadioButton прозрачной нельзя сделать. А можно ли тогда чекбоксами реализовать подобное? Чтобы при нажатии на один чекбокс с другого снималась галочка, и без панелей.
И еще микро-вопросик всплыл. Какой ID имеет моя страница, вставленная после wpSelectComponents? Не могу ее скрыть никак.
Raf-9600
30-05-2012, 15:31
У меня есть замечательный скрипт который добавляет зависимость от не дочерних компонентов, но есть в нем одно неудобство: он завязан на номерах компонентов. Собсно можно ли его переделать, чтобы зависимость была от названия компонента?
Т.е. желательно не от "Description", а от "Name".
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Components]
Name: "GameDiablo2"; Description: Diablo 2; Flags: fixed; Types: full compact custom;
Name: GameLoD; Description: Lord of Destruction; Types: full;
Name: Version; Description: Версия; Flags: fixed; Types: full compact custom;
Name: Version\107; Description: 1.07; Flags: exclusive;
Name: Version\108; Description: 1.08; Flags: exclusive;
Name: Version\109; Description: 1.09; Flags: exclusive; Types: full;
Name: NoCD; Description: NoCD; Types: full;
[c0de]
var
OldEvent_ComponentsListClickCheck: TNotifyEvent;
procedure ComponentsListClickCheck(Sender: TObject);
begin
If IsComponentSelected('GameLoD') then begin
WizardForm.ComponentsList.ItemEnabled[3]:=True;
WizardForm.ComponentsList.ItemEnabled[4]:=True;
end else begin
WizardForm.ComponentsList.ItemEnabled[3]:=False;
WizardForm.ComponentsList.ItemEnabled[4]:=False;
OldEvent_ComponentsListClickCheck(Sender);
end;
end;
procedure InitializeWizard();
begin
with WizardForm.ComponentsList do
begin
OldEvent_ComponentsListClickCheck := OnClickCheck;
OnClickCheck := @ComponentsListClickCheck;
ItemEnabled[3]:=True;
end;
end;
Gnom_aka_Lexander
30-05-2012, 15:43
только ParentBackground := True; (цвет) »
На юникоде не только цвет, но и картинка ;)
и радиобаттоны тоже не сделать прозрачными »
Аналогично - юникод их автоматом прозрачными делает.
Raf-9600, посмотри на свойство ItemName - вроде-бы то, что нужно.
GoshaPolo, ID страниц по порядку:
wpWelcome = 1;
wpLicense = 2;
wpPassword = 3;
wpInfoBefore = 4;
wpUserInfo = 5;
wpSelectDir = 6;
wpSelectComponents = 7;
wpSelectProgramGroup = 8;
wpSelectTasks = 9;
wpReady = 10;
wpPreparing = 11;
wpInstalling = 12;
wpInfoAfter = 13;
wpFinished = 14;
Какой ID имеет моя страница, вставленная после wpSelectComponents? Не могу ее скрыть никак. »
...
var
MyPage: TWizardPage;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID= MyPage.ID then
...
end;
Это не есть хорошо, что RadioButton прозрачной нельзя сделать. А можно ли тогда чекбоксами реализовать подобное? »
Чекбоксы тоже прозрычными сделать нельзя (дефолтные у анси) :)
Решение следующее: Создаете радиокнопку без надписи справа, создаете отдельно надпись к ней (элемент TLabel с Transparent:=True). Пишите процедурку клик по TLabel=клик по радиокнопочке. И в итоге получаете прозрачную радиокнопочку. Примеров таких кнопочек и чекбоксов - немеряно, поэтому ищем (скрипт Prototype от Shegorat к примеру)
Raf-9600
30-05-2012, 15:49
посмотри на свойство ItemName - вроде-бы то, что нужно. »
А можно пример использования? Просто если честно, то я не шарю в этом всем http://i26.fastpic.ru/big/2011/0719/4b/a301ce665424f1d6dcf65cddbd6b8e4b.gif
GoshaPolo
30-05-2012, 16:01
ID страниц по порядку:
читать дальше » »
Про ID стандартных страниц я знаю. Меня интересует ID страницы созданной мной дополнительно.
Чекбоксы тоже прозрычными сделать нельзя (дефолтные у анси) »
В том то и дело, что на АНСИ чекбоксы если поставить размером 13х13, фона по бокам нет, поскольку они квадратные. А RadioButton при размерах 13х13, имеют фон по краям.
Поэтому мне нужно как-то реализовать, чтобы при выборе одного чекбокса, с другого, или даже с нескольких, снимались галочки.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.