Скрипты Inno Setup. Помощь и советы [часть 5]
-
Gnom_aka_Lexander
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Цитата Gnom_aka_Lexander:
bear!, ты все правильно делаешь, в принцыпе.
Идеальный вариант - ищешь в разделе реестра Uninstall путь к папке с программой, которую хочешь русифицировать. Наиболее вероятно, что в пути будет подпапка с большим количеством букво-цифер, заключенная в фигурные скобки - это будет AppID программы - все официальные пачи на нем и базируются обычно. далее указываешь именно этот ключ и параметр, в котором находится путь к программе - все должно получиться
Ничего не получается, установку предлагает в C:\Program Files\CivilizationV
bear!, ты все правильно делаешь, в принцыпе.
Идеальный вариант - ищешь в разделе реестра Uninstall путь к папке с программой, которую хочешь русифицировать. Наиболее вероятно, что в пути будет подпапка с большим количеством букво-цифер, заключенная в фигурные скобки - это будет AppID программы - все официальные пачи на нем и базируются обычно. далее указываешь именно этот ключ и параметр, в котором находится путь к программе - все должно получиться
Скрипты Inno Setup. Помощь и советы [часть 5]
Ничего не получается, установку предлагает в C:\Program Files\CivilizationV
-
ispolin
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Подскажите как решить три ниже перечисленных вопроса:
1. Как поменять заголовок окна Windows? Желательно для каждой страницы установки свой индивидуальный заголовок.
2. Как поменять сообщение, которое вылазит при закрытии программы установки с уведомлением о подтверждении закрытия, на свое?
3. Как убрать определенную страницу программы установки, если я не хочу, чтобы она вылазила?
Заранее спасибо за ответы или ссылки на ответы
1. Как поменять заголовок окна Windows? Желательно для каждой страницы установки свой индивидуальный заголовок.
2. Как поменять сообщение, которое вылазит при закрытии программы установки с уведомлением о подтверждении закрытия, на свое?
3. Как убрать определенную страницу программы установки, если я не хочу, чтобы она вылазила?
Заранее спасибо за ответы или ссылки на ответы

-
Mailchik
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
GoshaPolo,
1.
Код:
2.
а) форма (выдрал у себя из скрипта, только без картинки
):
Код:
б) месседжбокс:
Код:
в) другой пример:
Код:
3.
Код:
ай ди страниц:
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;
YourCustomPageName.ID /// твоя страница с .ID на конце
1.
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[ Code]
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpWelcome then
begin
WizardForm.Caption := 'Я страница приветствия';
end;
////////////////////////////////////////
if CurPageID=wpSelectDir then
begin
WizardForm.Caption := 'Я страница выбоа директории установки';
end;
//////////////////////////////////////////////////
if CurPageID=wpInstalling then /// страница установки
begin
WizardForm.Caption := 'Я страница установки';
end;
///////////////////////////////////////////////////////
if CurPageID=wpFinished then /// завершающая страница
begin
WizardForm.Caption := 'Я страница завершения';
end;
end;2.
а) форма (выдрал у себя из скрипта, только без картинки
):читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[ Code]
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord; external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL; external 'DeleteMenu@user32.dll stdcall';
function GetClassLong(Wnd: HWnd; Index: Integer): Longint; external 'GetClassLongA@user32.dll stdcall';
function SetClassLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetClassLongA@user32.dll stdcall';
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
var
NoButton, YesButton: TButton;
MyExit: TSetupForm;
begin
Confirm := False;
begin
MyExit := CreateCustomForm();
with MyExit do
begin
Position := poScreenCenter;
ClientWidth := ScaleX(154);
ClientHeight := ScaleY(65);
Caption := 'Уверен*(а)?';
Color := clBtnFace;
DeleteMenu(GetSystemMenu(MyExit.Handle,False), $F060,0); /// сделать кнопку "закрыть" неактивной
SetClassLong(MyExit.Handle, -26, GetClassLong(Wizardform.Handle, -26) or $200);
end;
NoButton := TButton.Create(MyExit);
with NoButton do
begin
Parent := MyExit;
Caption := ExpandConstant(SetupMessage(msgButtonNo));
SetBounds(ScaleX(3), ScaleY(20), ScaleX(71), ScaleY(25));
ModalResult:= mrNo;
end;
YesButton := TButton.Create(MyExit);
with YesButton do
begin
Caption := ExpandConstant(SetupMessage(msgButtonYes));
Parent := MyExit;
SetBounds(NoButton.Left + ScaleX(77), NoButton.Top, NoButton.Width, NoButton.Height);
ModalResult := mrYes;
end;
end;
if MyExit.ShowModal() = mrNo then Cancel := False;
end;б) месседжбокс:
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp
[ code]
procedure WizardClose(Sender: TObject; var Action: TCloseAction);
Begin
Action:= caNone;
If MsgBox('Вы хотите закрыть мастер установки?', mbInformation, MB_YESNO) = IDYES then
MainForm.Close;
End;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Cancel:= True;
Confirm:= False;
end;
procedure InitializeWizard();
begin
WizardForm.OnClose:= @WizardClose
end;в) другой пример:
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp
[ code]
procedure WizardFormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MsgBox('Ты опух?',mbConfirmation,MB_YESNO)=IDNO then CanClose:=False;
end;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
Confirm:=False;
end;
procedure InitializeWizard;
begin
WizardForm.OnCloseQuery:=@WizardFormCloseQuery;
end;3.
читать дальше »
Код:
Код: Выделить всё
[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp
//можно так:
//подробнее в справке
DisableWelcomePage=yes
[ code]
//или так
function ShouldSkipPage(PageID: Integer): Boolean; /// встроенная функция пропуска страниц
begin
case /// в случае айди страницы "wpWelcome", то результат true, те пропустить
PageID of wpWelcome: Result := True;
end;
end;ай ди страниц:
читать дальше »
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;
YourCustomPageName.ID /// твоя страница с .ID на конце
-
Mailchik
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Nikish X,
Цитата:
function ShowChangeDiskWindow
Код:
показывает диалог с запросом следующего диска и ожиданием появления в DefaultPath файла, указанного SearchFile. Свой текст запроса можно указать значением Text;
DefaultPath - должен обязательно указывать {src}, иначе работоспособность не гарантируется;
SearchFile - файл, который каждые 0,2 секунды ищется по указанному пути;
Существует возможность в запросе сменить путь на другой, и если там будет найден SearchFile, то все последующие {src} в функциях распаковки будут идентифицироваться как указанный в данном диалоге путь.
neorom, никак.
R.i.m.s.k.y., Ставь через простой ISSkin.dll. Пример как полностью заскинить окно выбора языка:
Код:
читать дальше »
Цитата:
function ShowChangeDiskWindow
Код:
Код: Выделить всё
function ShowChangeDiskWindow (Text, DefPath, SearchFile: string):boolean;показывает диалог с запросом следующего диска и ожиданием появления в DefaultPath файла, указанного SearchFile. Свой текст запроса можно указать значением Text;
DefaultPath - должен обязательно указывать {src}, иначе работоспособность не гарантируется;
SearchFile - файл, который каждые 0,2 секунды ищется по указанному пути;
Существует возможность в запросе сменить путь на другой, и если там будет найден SearchFile, то все последующие {src} в функциях распаковки будут идентифицироваться как указанный в данном диалоге путь.
neorom, никак.
R.i.m.s.k.y., Ставь через простой ISSkin.dll. Пример как полностью заскинить окно выбора языка:
читать дальше »
Код:
Код: Выделить всё
#ifdef UNICODE
#define A "W"
#else
#define A "A"
#endif
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Languages]
Name: "english"; MessagesFile: "compiler:Languages\English.isl"
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: ISSkin{#A}.dll; Flags: dontcopy;
Source: ISSkin.cjstyles; Flags: dontcopy;
[code]
var
mySelectLanguageForm: TForm;
mySelectLabel: TLabel;
myLangCombo: TNewComboBox;
myOKButton: TButton;
myCancelButton: TButton;
myIconBitmapImage: TBitmapImage;
bCancel: Boolean;
OldProc: Longint;
procedure LoadSkin(lpszPath: String; lpszIniFileName: String);
external 'LoadSkin@files:isskin{#A}.dll stdcall';
procedure UnloadSkin();
external 'UnloadSkin@files:isskin{#A}.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint;
external 'CallWindowProc{#A}@user32.dll stdcall delayload';
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint;
external 'SetWindowLong{#A}@user32.dll stdcall delayload';
function NewProc(h: hwnd; Msg, wParam, lParam: Longint): Longint;
begin
if (Msg = $0112) then begin
if (wParam = 61536) then begin
myCancelButton.OnClick(myCancelButton);
wParam := 0;
end;
end;
Result := CallWindowProc(OldProc, h, Msg, wParam, lParam);
end;
procedure myOKButtonClick(Sender: TObject);
begin
SelectLanguageForm.LangCombo.ItemIndex := myLangCombo.ItemIndex;
mySelectLanguageForm.Close;
SetWindowLong(mySelectLanguageForm.Handle, -4, OldProc);
end;
procedure myCancelButtonClick(Sender: TObject);
begin
mySelectLanguageForm.Close;
bCancel := True;
SetWindowLong(mySelectLanguageForm.Handle, -4, OldProc);
end;
procedure mySelectLanguageFormP;
begin
with SelectLanguageForm do begin
mySelectLanguageForm := TForm.Create(nil);
with mySelectLanguageForm do begin
ClientWidth := ScaleX(300);
ClientHeight := ScaleY(125);
BorderIcons := [biSystemMenu];
BorderStyle := bsDialog;
Caption := SelectLanguageForm.Caption;
Position := poScreenCenter;
end;
mySelectLabel := TLabel.Create(mySelectLanguageForm);
with mySelectLabel do begin
Parent := mySelectLanguageForm;
AutoSize := False;
WordWrap := True;
SetBounds(SelectLabel.Left, SelectLabel.Top,
SelectLabel.Width, SelectLabel.Height);
Caption := SelectLabel.Caption;
end;
myLangCombo := TNewComboBox.Create(mySelectLanguageForm);
with myLangCombo do begin
Parent := mySelectLanguageForm;
SetBounds(LangCombo.Left, LangCombo.Top,
LangCombo.Width, LangCombo.Height);
Items := LangCombo.Items;
Style := csDropDownList;
Sorted := True;
ItemIndex := LangCombo.ItemIndex;
end;
myOKButton := TButton.Create(mySelectLanguageForm);
with myOKButton do begin
Parent := mySelectLanguageForm;
SetBounds(OKButton.Left, OKButton.Top,
OKButton.Width, OKButton.Height);
Caption := OKButton.Caption;
OnClick := @myOKButtonClick;
end;
myCancelButton := TButton.Create(mySelectLanguageForm);
with myCancelButton do begin
Parent := mySelectLanguageForm;
SetBounds(CancelButton.Left, CancelButton.Top,
CancelButton.Width, CancelButton.Height);
Caption := CancelButton.Caption;
OnClick := @myCancelButtonClick;
end;
myIconBitmapImage := TBitmapImage.Create(mySelectLanguageForm);
with myIconBitmapImage do begin
Parent := mySelectLanguageForm;
SetBounds(IconBitmapImage.Left, IconBitmapImage.Top,
IconBitmapImage.Width, IconBitmapImage.Height);
Bitmap := IconBitmapImage.Bitmap;
end;
end;
OldProc := SetWindowLong(mySelectLanguageForm.Handle, -4, CallbackAddr('NewProc'));
mySelectLanguageForm.ShowModal;
mySelectLanguageForm.Free;
end;
function InitializeLanguageDialog(): Boolean;
begin
ExtractTemporaryFile('ISSkin.cjstyles');
LoadSkin(ExpandConstant('{tmp}\ISSkin.cjstyles'), '');
mySelectLanguageFormP;
Result := False;
end;
procedure DeinitializeSetup();
begin
UnloadSkin();
end;
function InitializeSetup(): Boolean;
begin
if bCancel then
Result := False else Result := True;
end;-
Nikish X
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
alert30, они мне не скажут. 
LordSP, установи Unicode, ANSI не подерживает большинство функций.

LordSP, установи Unicode, ANSI не подерживает большинство функций.
-
Gnom_aka_Lexander
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Johny777, спасибо еще раз!
По поводу чекбоксов еще вопросик маленький. Как их поместить на определенной странице, а не на всех?
По поводу чекбоксов еще вопросик маленький. Как их поместить на определенной странице, а не на всех?
-
kodzoyev
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Цитата GoshaPolo:
Как их поместить на определенной странице, а не на всех?
Parent := WizardForm.SelectDirPage; например
можно на панели или на форме разместить (если на форме, то TNewCheckBox.Create(название формы);
или другая страница
только вверх сдвинь, тк он низко находится
alert30
Цитата alert30:
чтобы маскировать установщик в NSIS
впервые слышу
можно поинтересоваться зачем тебе это?
в ...\Inno Setup 5\Scripts\NSIS_SkinCrafter\ не оно?
Как их поместить на определенной странице, а не на всех?
Скрипты Inno Setup. Помощь и советы [часть 5]
Parent := WizardForm.SelectDirPage; например
можно на панели или на форме разместить (если на форме, то TNewCheckBox.Create(название формы);
или другая страница
только вверх сдвинь, тк он низко находится
alert30
Цитата alert30:
чтобы маскировать установщик в NSIS
Скрипты Inno Setup. Помощь и советы [часть 5]
впервые слышу
можно поинтересоваться зачем тебе это?
в ...\Inno Setup 5\Scripts\NSIS_SkinCrafter\ не оно?
-
sergey3695
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
Johny777, спасибо еще раз! Очень выручил 
Johny777, что-то не могу разобраться. Прописал чекбокс на запуск программы в секцию RUN и он запускается сразу после странички с прогрессбаром. А как сделать, чтобы он запускался только после нажатия завершения установки на последней странице?

Johny777, что-то не могу разобраться. Прописал чекбокс на запуск программы в секцию RUN и он запускается сразу после странички с прогрессбаром. А как сделать, чтобы он запускался только после нажатия завершения установки на последней странице?
-
insombia
Re: Скрипты Inno Setup. Помощь и советы [часть 5]
как убрать кнопку отмены isdone чтобы осталась дефольтная?