Скрипты Inno Setup. Помощь и советы [часть 5]

Ответить
 • Просмотры: 6
Аватара пользователя
Gnom_aka_Lexander

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Gnom_aka_Lexander »

Цитата Gnom_aka_Lexander:



bear!, ты все правильно делаешь, в принцыпе.

Идеальный вариант - ищешь в разделе реестра Uninstall путь к папке с программой, которую хочешь русифицировать. Наиболее вероятно, что в пути будет подпапка с большим количеством букво-цифер, заключенная в фигурные скобки - это будет AppID программы - все официальные пачи на нем и базируются обычно. далее указываешь именно этот ключ и параметр, в котором находится путь к программе - все должно получиться
Скрипты Inno Setup. Помощь и советы [часть 5]




Ничего не получается, установку предлагает в C:\Program Files\CivilizationV
Аватара пользователя
ispolin

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение ispolin »

Подскажите как решить три ниже перечисленных вопроса:



1. Как поменять заголовок окна Windows? Желательно для каждой страницы установки свой индивидуальный заголовок.

2. Как поменять сообщение, которое вылазит при закрытии программы установки с уведомлением о подтверждении закрытия, на свое?

3. Как убрать определенную страницу программы установки, если я не хочу, чтобы она вылазила?



Заранее спасибо за ответы или ссылки на ответы Изображение
Аватара пользователя
Mailchik

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Mailchik »

GoshaPolo,

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]

Сообщение Mailchik »

Nikish X,
читать дальше »


Цитата:

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]

Сообщение Nikish X »

alert30, они мне не скажут. Изображение

LordSP, установи Unicode, ANSI не подерживает большинство функций.
Аватара пользователя
Gnom_aka_Lexander

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение Gnom_aka_Lexander »

Johny777, спасибо еще раз!



По поводу чекбоксов еще вопросик маленький. Как их поместить на определенной странице, а не на всех?
Аватара пользователя
kodzoyev

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение kodzoyev »

Цитата GoshaPolo:



Как их поместить на определенной странице, а не на всех?
Скрипты 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]

Сообщение sergey3695 »

Johny777, спасибо еще раз! Очень выручил Изображение



Johny777, что-то не могу разобраться. Прописал чекбокс на запуск программы в секцию RUN и он запускается сразу после странички с прогрессбаром. А как сделать, чтобы он запускался только после нажатия завершения установки на последней странице?
Аватара пользователя
insombia

Re: Скрипты Inno Setup. Помощь и советы [часть 5]

Сообщение insombia »

как убрать кнопку отмены isdone чтобы осталась дефольтная?
Ответить

Вернуться в «Автоматическая установка приложений»