PDA

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


Страниц : 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 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

Антон_Мураткин@vk
14-05-2014, 20:19
Dodakaedr, я хз из-за чего но теперь ошибки нет но и скин не появляется а просто серый экран

Антон_Мураткин@vk
14-05-2014, 20:46
Разобрался из-за чего такое было. Стандартные картинки работают которые 580-390 а вставляю свои картинки 700-400 не работает картинка кроме скина png.

Dodakaedr, Как изменить под свои скины и картинки? Разрешение в скрипте поменял так - же и картинки но это не помогает. Подскажи пожалуйста

Kashtan007
14-05-2014, 20:47
Всем привет ребята.
Возникла такая проблема.
В установщике используется страница Components и Tasks. Но Components находится в нестандартном положении (т.е. по нажатию кнопки внизу) Но из-за этого страница компонентов переносится вниз. Возможно ли как-то. Иметь в установщике 2 страницы компонентов? Одна внизу при нажатии кнопки, вторая на странице Components.
Прилагаю скрипт и скриншоты.
Скрипт (http://rghost.ru/private/55157523/5c6b0d693b8fb52f599d1b2369587eaf)
Скриншоты

http://rghost.ru/55157558/image.png
http://rghost.ru/55157560/image.png
http://rghost.ru/55157568/image.png


Прошу помочь мне решить эту проблему. Заранее спасибо!

Dodakaedr
14-05-2014, 21:15
Разобрался из-за чего такое было. Стандартные картинки работают которые 580-390 а вставляю свои картинки 700-400 не работает картинка кроме скина png.
Dodakaedr, Как изменить под свои скины и картинки? Разрешение в скрипте поменял так - же и картинки но это не помогает. Подскажи пожалуйста »
ImgLoad(UninstallProgressForm.Handle,ExpandConstant('{tmp}\Skin.jpg'),0,0,548,368,true,true);
548,368 это разрешение картинки в деинсталяторе
I1:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I1.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
i2:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I2.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
i3:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I3.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
i4:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I4.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
i5:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I5.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);
i6:=ImgLoad(WizardForm.Handle,ExpandConstant('{tmp}\I6.jpg'),ScaleX(25), ScaleY(20),ScaleX(530), ScaleY(313),false,True);

ScaleX(530), ScaleY(313) это разрешение картинок в инсталяторе

Dodakaedr
14-05-2014, 21:32
Одна внизу при нажатии кнопки, вторая на странице Components. »
Как-то так:[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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


[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponent(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponent(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponent(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponent(5)

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[CustomMessages]
RU.CompSubtitlesLng=Язык субтитров
RU.CompVoiceLng=Язык озвучки
RU.CompRussian=Русский
RU.CompEnglish=Английский


[ code]
var
Flag: Boolean;
SettingButton: TButton;
ComponentsPage: TWizardPage;
SelectComponentsLabel: TNewStaticText;
ComponentsList: TNewCheckListBox;

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(450);
Flag:= False;
SettingButton.Caption:= '[]';
end;
end;

procedure RedesignWizardForm;
begin
SelectComponentsLabel := TNewStaticText.Create(WizardForm);
with SelectComponentsLabel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(42));
AutoSize := False;
WordWrap := True;
Caption := SetupMessage(msgSelectComponentsLabel2);
end;

ComponentsList := TNewCheckListBox.Create(WizardForm);
with ComponentsList do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to ComponentsList.ItemCount - 1 do
begin
if CompIndex <= (ComponentsList.ItemCount - 1) then
Result := ComponentsList.Checked[CompIndex];
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= '[]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;
with WizardForm do begin
ComponentsList.Parent:= WizardForm;
WizardForm.ComponentsList.Checked[1]:=True
WizardForm.ComponentsList.Checked[2]:=True
WizardForm.ComponentsList.Top := ScaleY(370);
WizardForm.ComponentsList.Height := ScaleY(55);
WizardForm.ComponentsList.Left := ScaleY(40);
WizardForm.ComponentsList.Color := clMenu;
end;
end;

Антон_Мураткин@vk
14-05-2014, 21:37
Dodakaedr, Это я знаю. Я всё это поменял, но при удаление игры фон больше чем картинка хотя и стоит 700x400 вот скрин http://i64.fastpic.ru/big/2014/0514/ad/83b044476cdd47cc77c79b9b0491f1ad.jpg

Dodakaedr, Может ты знаешь где разрешения удаления поменять т.к картинка в конце удаления 700-400 а фон под картинкой больше почему то. Где это ещё можно поменять?

Kashtan007
14-05-2014, 21:46
Еще небольшой вопросик. Хочу сделать на каждой странице установщика разную шапку. Ибо если использовать функцию BitImage то будет одна и та же на всех страницах. Какой код нужно прописывать чтобы для каждой страницы разную шапку.
Если не ошибаюсь то есть код на отключение изображения на определенных страницах. Вот именно это мне нужно.

P.S. Dodakaedr благодарю за помощь в с компонент листами.

Dodakaedr
14-05-2014, 21:54
Dodakaedr, Может ты знаешь где разрешения удаления поменять т.к картинка в конце удаления 700-400 а фон под картинкой больше почему то. Где это ещё можно поменять? »
В модуле Uninstall.iss, но как видите она не больше ваших картинок
procedure InitializeUninstallProgressForm;
begin
UninstallProgressForm.ClientWidth:=550; //ширина
UninstallProgressForm.ClientHeight:=440; // высота
UninstallProgressForm.OuterNotebook.Hide;
UninstallProgressForm.InnerNotebook.Hide;
UninstallProgressForm.Bevel.Hide;
UninstallProgressForm.Center;

Если не ошибаюсь то есть код на отключение изображения на определенных страницах. Вот именно это мне нужно. »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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


[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponent(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponent(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponent(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponent(5)

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[CustomMessages]
RU.CompSubtitlesLng=Язык субтитров
RU.CompVoiceLng=Язык озвучки
RU.CompRussian=Русский
RU.CompEnglish=Английский


[ code]
var
Flag: Boolean;
SettingButton: TButton;
ComponentsPage: TWizardPage;
SelectComponentsLabel: TNewStaticText;
ComponentsList: TNewCheckListBox;

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(450);
Flag:= False;
SettingButton.Caption:= '[]';
end;
end;

procedure RedesignWizardForm;
begin
SelectComponentsLabel := TNewStaticText.Create(WizardForm);
with SelectComponentsLabel do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(42));
AutoSize := False;
WordWrap := True;
Caption := SetupMessage(msgSelectComponentsLabel2);
end;

ComponentsList := TNewCheckListBox.Create(WizardForm);
with ComponentsList do
begin
Parent := WizardForm.SelectComponentsPage;
SetBounds(ScaleX(0), ScaleY(61), ScaleX(417), ScaleY(169));
AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to ComponentsList.ItemCount - 1 do
begin
if CompIndex <= (ComponentsList.ItemCount - 1) then
Result := ComponentsList.Checked[CompIndex];
end;
end;

procedure InitializeWizard();
begin
RedesignWizardForm;
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= '[]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;
with WizardForm do begin
ComponentsList.Parent:= WizardForm;
WizardForm.ComponentsList.Checked[1]:=True
WizardForm.ComponentsList.Checked[2]:=True
WizardForm.ComponentsList.Top := ScaleY(370);
WizardForm.ComponentsList.Height := ScaleY(55);
WizardForm.ComponentsList.Left := ScaleY(40);
WizardForm.ComponentsList.Color := clMenu;
end;
end;

//отключение/включение изображения
procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectDir:
begin
WizardForm.WizardSmallBitmapImage.Hide;
end;
wpSelectComponents:
begin
WizardForm.WizardSmallBitmapImage.Show;
end;
wpReady:
WizardForm.WizardSmallBitmapImage.Hide;
end;
end;

Значения PageID для определенных страниц мастера:
wpWelcome, wpLicense, wpPassword, wpInfoBefore, wpUserInfo, wpSelectDir, wpSelectComponents, wpSelectProgramGroup, wpSelectTasks, wpReady, wpPreparing, wpInstalling, wpInfoAfter, wpFinished

Kashtan007
14-05-2014, 22:12
Dodakaedr, спасибо за помощь.

Есть еще вопрос по поводу компонент листов.
Вообщем дело такое... Чтобы добавлять компоненты в нижний компонент лист можно пользоваться секцией Components. А чтобы добавлять на основной компонент лист который находится на странице Components нужно уже компоненты писать не в секции Components а в Code. Возможно ли заменить это местами? Т.е. чтобы в нижний компонент лист можно было добавлять компоненты через код (ибо там будет всего 3-4 файла, чтобы не заморачиватся). А на компонент лист который находится на основной странице компонентов, компоненты можно было бы добавить через секцию Components.
Нужно это потому что в нижнем компонент листе нужно всего лишь 3-4 файла, а на основном около 100. А через секцию Components добавлять компоненты легче чем через секцию Code.
Заранее спасибо за ответ!

Dodakaedr
14-05-2014, 22:26
Т.е. чтобы в нижний компонент лист можно было добавлять компоненты через код (ибо там будет всего 3-4 файла, чтобы не заморачиватся). А на компонент лист который находится на основной странице компонентов, компоненты можно было бы добавить через секцию Components. »
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

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


[Files]
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "TextRussian.isl"; Check: IsComponent(1)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "TextEnglish.isl"; Check: IsComponent(2)
Source: "compiler:Languages\Russian.isl"; DestDir: "{app}"; DestName: "VoiceRussian.isl"; Check: IsComponent(4)
Source: "compiler:Default.isl"; DestDir: "{app}"; DestName: "VoiceEnglish.isl"; Check: IsComponent(5)

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: text; Description: Дополнительное по; Types: full;
Name: text\DirectX; Description: DirectX 9;
Name: text\Visual; Description: Microsoft Visual C++;

[CustomMessages]
RU.CompSubtitlesLng=Язык субтитров
RU.CompVoiceLng=Язык озвучки
RU.CompRussian=Русский
RU.CompEnglish=Английский


[ code]
var
Flag: Boolean;
SettingButton: TButton;
ComponentsPage: TWizardPage;
ComponentsList: TNewCheckListBox;

procedure HideShowOnClick(Sender: TObject);
begin
if Flag = False then begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(360);
Flag:= True;
SettingButton.Caption:= '[]';
end else begin
WizardForm.ClientWidth:= ScaleX(497);
WizardForm.ClientHeight:= ScaleY(500);
Flag:= False;
SettingButton.Caption:= '[]';
end;
end;

function IsComponent(CompIndex: Integer): Boolean;
var
i: Integer;
begin
Result := False;
for i := 0 to ComponentsList.ItemCount - 1 do
begin
if CompIndex <= (ComponentsList.ItemCount - 1) then
Result := ComponentsList.Checked[CompIndex];
end;
end;

procedure InitializeWizard();
begin
SettingButton:= TButton.Create(WizardForm);
SettingButton.SetBounds(ScaleX(10),ScaleY(325), ScaleX(30), ScaleY(30))
SettingButton.Caption:= '[]';
SettingButton.OnClick:= @HideShowOnClick;
SettingButton.Parent:= WizardForm;
Flag:=True;

ComponentsList := TNewCheckListBox.Create(WizardForm);
with ComponentsList do
begin
Parent := WizardForm;
SetBounds(ScaleX(40), ScaleY(370), ScaleX(417), ScaleY(100));
AddCheckBox(CustomMessage('CompSubtitlesLng'), '', 0, True, False, False, True, nil);
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
AddCheckBox(CustomMessage('CompVoiceLng'), '', 0, True, False, False, True, nil);
AddRadioButton(CustomMessage('CompRussian'), '', 1, True, True, nil);
AddRadioButton(CustomMessage('CompEnglish'), '', 1, False, True, nil);
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
case CurPageID of
wpSelectDir:
begin
WizardForm.WizardSmallBitmapImage.Hide;
end;
wpSelectComponents:
begin
WizardForm.WizardSmallBitmapImage.Show;
end;
wpReady:
WizardForm.WizardSmallBitmapImage.Hide;
end;
end;

Антон_Мураткин@vk
14-05-2014, 22:35
В модуле Uninstall.iss, но как видите она не больше ваших картинок » В Uninstall.iss вообще нечего не менял но на скине видно что с права полоса и снизу. Из-за чего же это может быть?

Dodakaedr
14-05-2014, 22:41
В Uninstall.iss вообще нечего не менял но на скине видно что с права полоса и снизу. Из-за чего же это может быть? »
Не знаю, может из-за скина, а может попробуйте отцентрировать свое изображение.

Антон_Мураткин@vk
14-05-2014, 23:20
Dodakaedr, Всё разобрался. Только почему так получается фиг его знает. Сделал ширина - 693 высота 372 и всё стало нормально и разрешение исталятора 700x400.

Просто мистика какая та.

Dodakaedr, Огромное спасибо за помощь. :up:

Dodakaedr, И ещё вопросик, можно ли сделать текст с глянцевым эффектом?
Может знаешь?

Dodakaedr
14-05-2014, 23:27
Dodakaedr, И ещё вопросик, можно ли сделать текст с глянцевым эффектом?
Может знаешь? »
Не знаю, но можете попробувать создать изображение с текстом с глянцевым эффектом на прозрачном фоне и сохранить в .png формате и потом через ботву вставить. Как-то так :)

Антон_Мураткин@vk
14-05-2014, 23:35
создать изображение с текстом с глянцевым эффектом на прозрачном фоне и сохранить в .png » Так текста уж много. Ладно что то другое поищу.

Dodakaedr
15-05-2014, 09:49
Как в этом коде указать HKU\{code:UsSID}\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts?

procedure BackupData(FileExt: String);
var
OldValueData: string;
begin
if RegKeyExists(HKCR, '.' + FileExt) then
begin
RegQueryStringValue(HKCR, '.' + FileExt, '', OldValueData);
RegWriteStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
end;
end;
procedure RestoreData(FileExt: String);
var
OldValueData: string;
begin
if RegKeyExists(HKCR, '.' + FileExt + '(backup)') then
begin
RegQueryStringValue(HKCR, '.' + FileExt + '(backup)', '', OldValueData);
RegWriteStringValue(HKCR, '.' + FileExt, '', OldValueData);
RegDeleteKeyIncludingSubkeys(HKCR, '.' + FileExt + '(backup)');
end;
end; »

С этим решено, теперь подскажите как сделать чтобы код бекапил полностью ключ со всеми значениями и подключами, потому что этот код бекапит только значение ключа.

saurn
15-05-2014, 15:27
ключ со всеми значениями и подключами »
Предлагаю, так:
[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; AfterInstall: IsRegExport(); Flags: ignoreversion;


[code]
procedure IsRegExport();
var
i: Integer;
RegKey: String;
begin
RegKey := 'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Inno Setup 5_is1';

Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea export.reg ' + AddQuotes( RegKey ), ExpandConstant( '{app}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;


procedure IsRegImport();
var
i: Integer;
RegFile: String;
begin
RegFile:= ExpandConstant('{app}\export.reg');

if FileExists(RegFile) <> False then
Exec( 'regedit.exe', ' /s ' + AddQuotes( RegFile ), ExpandConstant( '{win}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usUninstall: IsRegImport();
end;
end;

Dodakaedr
15-05-2014, 18:43
Предлагаю, так: »
А как больше веток добавить? Так не работает:
procedure IsRegExport();
var
i: Integer;
RegKey: String;
begin
RegKey := 'HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mp3';
RegKey := 'HKEY_CLASSES_ROOT\.mp3';
Exec( ExpandConstant( '{win}\regedit.exe' ), '-ea export.reg ' + AddQuotes( RegKey ), ExpandConstant( '{app}' ), SW_HIDE, ewWaitUntilTerminated, i );
end;
И то создал бекап ключа HKEY_CLASSES_ROOT\.mp3 а при удалении программы не восстанавливает.

С восстановлением разобрался, а как больше путей добавить без понятия.

Shift85
15-05-2014, 18:44
можно ли сделать текст с глянцевым эффектом? »
Антон_Мураткин@vk, Нет. Вот попробуй модуль для текста.http://rghost.ru/55185131 :ok:

Kashtan007
15-05-2014, 19:05
Привет всем. Как сделать чтобы шапка установщика на каждой странице была разная. Разные шапки получилось поставить только на начальной и финишной странице. А на страницах: каталог, компонент лист и т.д. ставилась одна общая шапка.
Ставил изображения через Редактор форм в расширенном Инно. Добавлял BitmapImage.
Возможно ли как-то сделать на этих страницах разные шапки. Если да, то как? Заранее спасибо!




© OSzone.net 2001-2012