PDA

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


Страниц : 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 126 127 128 129 130 131 132 133

YURSHAT
11-12-2009, 01:36
Народ, а как правильно перечислить страницы
Parent := (CurPageID=wpSelectProgramGroup),(CurPageID=wpWelcome) так не пашет

A1EXXX
11-12-2009, 01:47
YURSHAT, это ты по задумке Комбата панель на панель накладываешь для прозрачности в Unicode-версии?? :spiteful:

YURSHAT
11-12-2009, 01:50
A1EXXX, да не, делаю панель с использованием фотошопа. Кстати на вопросик не ответите?
P.S.
По задумке комбата панель получается полностью прозрачной, а нам надо полупрозрачность

A1EXXX
11-12-2009, 02:03
YURSHAT, да я сам особо не вникал в те прозрачности... А просто Parent := WizardForm не покатит?

YURSHAT
11-12-2009, 02:19
А просто Parent := WizardForm не покатит? »
Не так не катит

lmiol
11-12-2009, 02:36
вот новая трабла)))
как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились

МИШАНЧИК
11-12-2009, 03:24
Serega, Habetdin, большое вам спасибо!

Kilya
11-12-2009, 13:55
скрипт для возможности - установить и распаковать программу! как у NOD32 Update Viewer (http://nodview.net.ru/)


[Setup]
AppName=My Program
AppVerName=My Program
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=userdocs:My Program.
AppID=NAV

[.Code.]
var
InstType, UnpackType: TRadioButton;

procedure InitializeWizard();
var
TypeText: TNewStaticText;
begin
TypeText := TNewStaticText.Create(WizardForm);
with TypeText do
begin
Left := WizardForm.WelcomeLabel2.Left;
Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - WizardForm.WelcomeLabel2.Height div 4 - ScaleY(20);
Width := WizardForm.WelcomeLabel2.Width div 2;
Caption := 'Тип установки:';
Parent := WizardForm.WelcomePage;
end;

InstType := TRadioButton.Create(WizardForm);
with InstType do
begin
Left := WizardForm.WelcomeLabel2.Left + ScaleX(20);
Top := WizardForm.WelcomeLabel2.Top + WizardForm.WelcomeLabel2.Height - WizardForm.WelcomeLabel2.Height div 4;
Width := WizardForm.WelcomeLabel2.Width div 2;
Caption := 'Установить';
Checked := True;
Parent := WizardForm.WelcomePage;
end;

UnpackType := TRadioButton.Create(WizardForm);
with UnpackType do
begin
Left := WizardForm.WelcomeLabel2.Left + ScaleX(20);
Top := InstType.Top + InstType.Height + ScaleY(3);
Width := WizardForm.WelcomeLabel2.Width div 2;
Caption := 'Распаковать файлы';
Parent := WizardForm.WelcomePage;
end;
end;

procedure CurStepChanged(CurStep: TSetupStep);
begin
if CurStep = ssDone then
if UnpackType.Checked then
begin
// Если отмечено "Распаковать файлы"
// Удаляются файлы деинсталлятора и реестра.
DeleteFile(ExpandConstant('{uninstallexe}'));
DeleteFile(ExpandConstant('{app}\unins000.dat'));
RegDeleteKeyIncludingSubkeys(HKLM, 'Software\Microsoft\Windows\CurrentVersion\Uninstall\NAV_is1');
end;
end;



в єтом коде все прекрасно, но...
Если до этого установка производилась и были созданы ярлыки в СтартМеню - Все программы
то при распаковке их желательно удалить тоже, уже бьюсь бьюсь - а удалить их не получается....
Помогите!!!
Интересует єта ветка (ProgramData\Microsoft\Windows\Start Menu)

МИШАНЧИК
11-12-2009, 15:30
Подскажите пожалуйста!
Как удалить определённые ветви реестра перед началом инсталяции?

ADremLIN
11-12-2009, 16:23
Отвечаю на свой вопрос сам.
Цитировать »
Пример перехвата события "выбор компонента - галочка" на странице выбора компонентов:


[_Code]
var
ComponentsOnClickCheck: TNotifyEvent; //Переменная для хранения адреса старого обработчика

procedure InitializeWizard;
begin
{ Save global default OnClickCheck procedure}
ComponentsOnClickCheck := WizardForm.ComponentsList.OnClickCheck; //Сохраняем адрес старого обработчика
end;

// Свой обработчик OnClickCheck:
procedure ComponentsClickCheck(Sender: TObject);
var
ItemIndex, AppIndex, RequireIndex: Integer;
begin
ComponentsOnClickCheck(Sender); //Вызываем старый обработчик (Inherited). Он выполняет действия по-умолчанию...
ItemIndex := WizardForm.ComponentsList.ItemIndex; //Индекс "кликнутого" компонента (в этом примере не используется)

{Check require for 'Application™'} // Проверяем зависимости для Приложения
AppIndex := WizardForm.ComponentsList.Items.IndexOf('Application™'); //Индекс компонента-приложения подлежащего проверке

//Если он (компонент-приложение подлежащий проверке) "чеканутый"
if (WizardForm.ComponentsList.Checked[AppIndex]) then begin // то:
RequireIndex := WizardForm.ComponentsList.Items.IndexOf('Engine™'); // Определяем индекс требуемого компонента

//Если он (требуемый компонент) "не чеканутый", то:
if not WizardForm.ComponentsList.Checked[RequireIndex] then
begin
MsgBox('Engine™ engine will enabled: Require for Application™.', mbInformation, 1);// Сообщение для пользователя об этом
WizardForm.ComponentsList.CheckItem(RequireIndex, coCheck); // Включаем компонент
end;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectComponents then
WizardForm.ComponentsList.OnClickCheck := @ComponentsClickCheck; //Подменяем обработчик на свой
end;



Может кому-то пригодится...

Habetdin
11-12-2009, 16:27
МИШАНЧИК, пример:
function InitializeSetup(): Boolean;
begin
RegDeleteKeyIncludingSubkeys(HKLM, 'Software\My Program\Cache');
Result:= True;
end;
P.S.: пишите в PM, если нужен скрипт USB Safely Remove

zl0ybot
11-12-2009, 17:31
Кто может помочь с этим кодом Кнопки внизу были , было прозрачно а не бело ;)[Setup]
AppName=Status Panel
AppVerName=Status Panel
DefaultDirName={pf}\Test
DefaultGroupName=Status Panel
WizardImageFile=compiler:WizModernImage-IS.bmp
OutputDir=userdocs:.
OutputBaseFilename=status_panel
DisableReadyPage=True
[Files]
; Test
Source: "{sys}\*.dll"; DestDir: "{app}"; Flags: ignoreversion external deleteafterinstall;
[Icons]
Name: "{group}\Удалить StatusPanel"; Filename: "{uninstallexe}";
[Code]
function GetSystemMetrics(nIndex:Integer):Integer;
external 'GetSystemMetrics@user32.dll stdcall';
var
Welcome, Edit1, Edit2, Ready1, Ready2,
Setup1, Setup2, Finish1, Finish2: TLabel;
procedure InitializeWizard();
begin
WizardForm.ClientWidth := ScaleX(750);
WizardForm.ClientHeight := ScaleY(500);
WizardForm.Bevel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.MainPanel.Hide;
WizardForm.WizardBitmapImage.Left := ScaleX(0);
WizardForm.WizardBitmapImage.Top := ScaleY(0);
WizardForm.WizardBitmapImage.Width := WizardForm.Width;
WizardForm.WizardBitmapImage.Height := WizardForm.Height;
WizardForm.WizardBitmapImage.Parent := WizardForm;
WizardForm.WizardBitmapImage2.Hide;
Welcome := TLabel.Create(WizardForm);
Welcome.Top := ScaleY(45);
Welcome.Caption := 'Приветствие';
Welcome.Transparent := True;
Welcome.Parent := WizardForm;
Edit1 := TLabel.Create(WizardForm);
Edit1.Left := WizardForm.ClientWidth / 5;
Edit1.Top := ScaleY(45);
Edit1.Width := WizardForm.ClientWidth / 5;
Edit1.AutoSize := False;
Edit1.Caption := '|';
Edit1.Transparent := True;
Edit1.Parent := WizardForm;
Edit2 := TLabel.Create(WizardForm);
Edit2.Top := ScaleY(45);
Edit2.Caption:= 'Параметры';
Edit2.Transparent := True;
Edit2.Parent := WizardForm;
Ready1 := TLabel.Create(WizardForm);
Ready1.Left := Edit1.Left + Edit1.Width;
Ready1.Top := ScaleY(45);
Ready1.Width := WizardForm.ClientWidth / 5;
Ready1.AutoSize := False;
Ready1.Caption := '|';
Ready1.Transparent := True;
Ready1.Parent := WizardForm;
Ready2 := TLabel.Create(WizardForm);
Ready2.Top := ScaleY(45);
Ready2.Caption := 'Меню "Пуск"';
Ready2.Transparent := True;
Ready2.Parent := WizardForm;
Setup1 := TLabel.Create(WizardForm);
Setup1.Left := Ready1.Left + Ready1.Width;
Setup1.Top := ScaleY(45);
Setup1.Width := WizardForm.ClientWidth / 5;
Setup1.AutoSize := False;
Setup1.Caption := '|';
Setup1.Transparent := True;
Setup1.Parent := WizardForm;
Setup2 := TLabel.Create(WizardForm);
Setup2.Top := ScaleY(45);
Setup2.Caption := 'Установка';
Setup2.Transparent := True;
Setup2.Parent := WizardForm;
Finish1 := TLabel.Create(WizardForm);
Finish1.Left := Setup1.Left + Setup1.Width;
Finish1.Top := ScaleY(45);
Finish1.Width := WizardForm.ClientWidth / 5;
Finish1.AutoSize := False;
Finish1.Caption := '|';
Finish1.Transparent := True;
Finish1.Parent := WizardForm;
Finish2 := TLabel.Create(WizardForm);
Finish2.Top := ScaleY(45);
Finish2.Caption := 'Готово';
Finish2.Transparent := True;
Finish2.Parent := WizardForm;
WizardForm.BackButton.Top := WizardForm.BackButton.Top + ScaleY(110);
WizardForm.NextButton.Top := WizardForm.NextButton.Top + ScaleY(110);
WizardForm.CancelButton.Top := WizardForm.CancelButton.Top + ScaleY(110);
WizardForm.OuterNotebook.Left := WizardForm.Width / 2 - WizardForm.OuterNotebook.Width / 2;
WizardForm.OuterNotebook.Top := ScaleY(105);
WizardForm.InnerNotebook.Top := ScaleY(10);
WizardForm.Left := GetSystemMetrics(0) / 2 - WizardForm.Width / 2;
WizardForm.Top := GetSystemMetrics(1) / 2 - WizardForm.Height / 2;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
Welcome.Font.Color := clSilver;
Edit1.Font.Color := clSilver;
Edit2.Font.Color := clSilver;
Ready1.Font.Color := clSilver;
Ready2.Font.Color := clSilver;
Setup1.Font.Color := clSilver;
Setup2.Font.Color := clSilver;
Finish1.Font.Color := clSilver;
Finish2.Font.Color := clSilver;
Welcome.Left := WizardForm.ClientWidth / 5 / 2 - Welcome.Width / 2;
Edit2.Left := Edit1.Left + Edit1.Width / 2 - Edit2.Width / 2;
Ready2.Left := Ready1.Left + Ready1.Width / 2 - Ready2.Width / 2;
Setup2.Left := Setup1.Left + Setup1.Width / 2 - Setup2.Width / 2;
Finish2.Left := Finish1.Left + Finish1.Width / 2 - Finish2.Width / 2;
if CurPageID = wpWelcome then
begin
Welcome.Font.Color := clWhite;
Edit1.Font.Color := clWhite;
end;
if CurPageID = wpSelectDir then
begin
Edit1.Font.Color := clWhite;
Edit2.Font.Color := clWhite;
Ready1.Font.Color := clWhite;
end;
if CurPageID = wpSelectProgramGroup then
begin
Ready1.Font.Color := clWhite;
Ready2.Font.Color := clWhite;
Setup1.Font.Color := clWhite;
WizardForm.NextButton.Caption := 'Установить';
end;
if CurPageID = wpInstalling then
begin
Setup1.Font.Color := clWhite;
Setup2.Font.Color := clWhite;
Finish1.Font.Color := clWhite;
end;
if CurPageID = wpFinished then
begin
Finish1.Font.Color := clWhite;
Finish2.Font.Color := clWhite;
end;
end;

МИШАНЧИК
12-12-2009, 04:20
Habetdin, спасибо!
P.S.: пишите в PM, если нужен скрипт USB Safely Remove »
Не, я уже собрал, спасибо. Это я с неро вожусь.

Serega, подскажите пожалуйста что, я неправильно делаю.
Хочу убрать последнюю страницу и на предпоследней заменить "Далее" на "Установить".
Никакого кода кроме указанного ниже нет.
[Setup]
DisableReadyPage=yes
[_Code]
procedure CurPageChanged(CurPageID: Integer);
begin
CurPageChanged(CurPageID);
if CurPageID = wpSelectTasks then // удаляет последнюю страницу
WizardForm.NextButton.Caption:= 'Установить'; // меняет кнопку "Далее" на предпоследней странице на "Установить"
CurPageChanged(CurPageID);
end;
Serega, подскажите пожалуйста что, я неправильно делаю »
P.S.Разобрался.

МИШАНЧИК
12-12-2009, 13:10
Serega, подскажите пожалуйста!
Хочу привлечь внимание всех!!!
В расширенной версии от Restools сделали возможность редактирования форм, т.е. вы можете изменить страницу инсталлятора по своему усмотрению... »
Редактирую(растягиваю картинку) на вкладке WizardFormDesigner, получается изображение как-бы на всю страницу , в скрипт дописывается код автоматом, а при компиляции ничего не меняется(как по умолчанию).
Почему?

Serega
12-12-2009, 13:32
Почему? »
Добавьте название процедуры созданной автоматом в procedure InitializeWizard();

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Code]
{ RedesignWizardFormBegin } // Don't remove this line!
// Don't modify this section. It is generated automatically.
var
NewButton1: TNewButton;

procedure RedesignWizardForm;
begin
{ NewButton1 }
NewButton1 := TNewButton.Create(WizardForm);
with NewButton1 do
begin
Parent := WizardForm.WelcomePage;
Left := ScaleX(288);
Top := ScaleY(200);
Width := ScaleX(75);
Height := ScaleY(25);
Caption := 'NewButton1';
TabOrder := 2;
end;

{ ReservationBegin }
// This part is for you. Add your specialized code here.

{ ReservationEnd }
end;
// Don't modify this section. It is generated automatically.
{ RedesignWizardFormEnd } // Don't remove this line!

procedure InitializeWizard();
begin
RedesignWizardForm;
end;

Serega
12-12-2009, 14:09
как правильно перечислить страницы »
Если не хочется перечислять все страницы последовательно, т.е.:

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpSelectDir then
WizardForm.WelcomeLabel1.Parent:= WizardForm.SelectDirPage;
if CurPageID = wpSelectProgramGroup then
WizardForm.WelcomeLabel1.Parent:= WizardForm.SelectDirPage;
end;

то всё равно нужно написать функцию, которая будет возвращать название страниц:

function DetectPage(CurPageID: Integer): TNewNotebookPage;
begin
case CurPageID of
wpWelcome: Result:= WizardForm.WelcomePage;
wpLicense: Result:= WizardForm.LicensePage;
wpPassword: Result:= WizardForm.PasswordPage;
wpInfoBefore: Result:= WizardForm.InfoBeforePage;
wpUserInfo: Result:= WizardForm.UserInfoPage;
wpSelectDir: Result:= WizardForm.SelectDirPage;
wpSelectComponents: Result:= WizardForm.SelectComponentsPage;
wpSelectProgramGroup: Result:= WizardForm.SelectProgramGroupPage;
wpSelectTasks: Result:= WizardForm.SelectTasksPage;
wpReady: Result:= WizardForm.ReadyPage;
wpPreparing: Result:= WizardForm.PreparingPage;
wpInstalling: Result:= WizardForm.InstallingPage;
wpInfoAfter: Result:= WizardForm.InfoAfterPage;
wpFinished: Result:= WizardForm.FinishedPage;
end;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if (CurPageID = wpSelectDir) or (CurPageID = wpSelectProgramGroup) then
WizardForm.WelcomeLabel1.Parent:= DetectPage(CurPageID);
end;

Serega
12-12-2009, 14:52
как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились »

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\{code:DetectWindows}
OutputDir=.
Compression=lzma/ultra
InternalCompressLevel=ultra
SolidCompression=yes

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

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Code]
function DetectWindows(s: string): string;
var
SubKeyName, ResultStr: string;
begin
SubKeyName:= 'Software\Microsoft\Windows NT\CurrentVersion';
RegQueryStringValue(HKLM, SubKeyName, 'ProductName', ResultStr);
if Pos('XP', ResultStr) > 0 then
Result:= 'XP'
else
if Pos('Vista', ResultStr) > 0 then
Result:= 'Vista'
else Result:= 'My Program';
end;

МИШАНЧИК
12-12-2009, 15:23
Serega, скажите пожалуйста, а можно ли этим способом растянув картинку на весь инсталятор сделать чтоб текст был на картинке, а не на белом фоне?

YURSHAT
12-12-2009, 16:29
Serega, огромнейшее Вам СПАСИБО за помощь!!! :up :up :up :up

Serega
12-12-2009, 17:02
а можно ли этим способом растянув картинку на весь инсталятор сделать чтоб текст был на картинке, а не на белом фоне? »
Если я правильно вас понял, то вы имеете ввиду белый фон текста TNewStaticText?
Если да, то вам придётся прятать все стандартные TNewStaticText, а заместо них создавать TLabel, со свойством Transparent:= True;




© OSzone.net 2001-2012