Показать полную графическую версию : [архив] Скрипты Inno Setup. Помощь и советы [часть 2]
Народ, а как правильно перечислить страницы
Parent := (CurPageID=wpSelectProgramGroup),(CurPageID=wpWelcome) так не пашет
YURSHAT, это ты по задумке Комбата панель на панель накладываешь для прозрачности в Unicode-версии?? :spiteful:
A1EXXX, да не, делаю панель с использованием фотошопа. Кстати на вопросик не ответите?
P.S.
По задумке комбата панель получается полностью прозрачной, а нам надо полупрозрачность
YURSHAT, да я сам особо не вникал в те прозрачности... А просто Parent := WizardForm не покатит?
А просто Parent := WizardForm не покатит? »
Не так не катит
вот новая трабла)))
как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились
МИШАНЧИК
11-12-2009, 03:24
Serega, Habetdin, большое вам спасибо!
скрипт для возможности - установить и распаковать программу! как у 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
Кто может помочь с этим кодом Кнопки внизу были , было прозрачно а не бело ;)[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, получается изображение как-бы на всю страницу , в скрипт дописывается код автоматом, а при компиляции ничего не меняется(как по умолчанию).
Почему?
Почему? »
Добавьте название процедуры созданной автоматом в 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;
как правильно перечислить страницы »
Если не хочется перечислять все страницы последовательно, т.е.:
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;
как сделать чтобы если виста то файлы автоматом в одну папку а если хр то в другую инсталились »
[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, скажите пожалуйста, а можно ли этим способом растянув картинку на весь инсталятор сделать чтоб текст был на картинке, а не на белом фоне?
Serega, огромнейшее Вам СПАСИБО за помощь!!! :up :up :up :up
а можно ли этим способом растянув картинку на весь инсталятор сделать чтоб текст был на картинке, а не на белом фоне? »
Если я правильно вас понял, то вы имеете ввиду белый фон текста TNewStaticText?
Если да, то вам придётся прятать все стандартные TNewStaticText, а заместо них создавать TLabel, со свойством Transparent:= True;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC