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

Ответить
 • Просмотры: 39
Аватара пользователя
volga163@vk

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

Сообщение volga163@vk »

Мне тут раньше вроде подсказывали, что делать если фаил справки пустой открывается.... перечитал сообщения за 2 месяца... не нашел... напомните, пожалуйста.
Аватара пользователя
nik1967

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

Сообщение nik1967 »

Shkutu, для этого в Inno есть секция [CustomMessages].
Если я правильно понял


Код:

Код: Выделить всё

[Setup]
AppName=My Program
AppVerName=My Program v 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl
[CustomMessages]
rus.interface=Интерфейс
rus.choice=Выберите компоненты, которые вы хотите установить.
eng.interface=Interface
eng.choice=Select components which you want to set.
[_Code]
var
  Page: TWizardPage;
procedure InitializeWizard;
begin
  Page:=CreateCustomPage(wpWelcome, ExpandConstant('{cm:interface}'), ExpandConstant('{cm:choice}'));
end;


Наткнулся на скрипт, который писал неизвестно когда и неизвестно кому Изображение. Может пригодится кому.
MyCoustomExit


Код:

Код: Выделить всё

[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
OutputDir=.
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
Name: eng; MessagesFile: compiler:Default.isl
[CustomMessages]
rus.ExitSetupTitle1=Вы уверены, что хотите выйти из программы установки?
eng.ExitSetupTitle1=Quit the setup program?
[_code]
const
  ID_QUESTION = 65579;
var
  MyCoustomExit: TPanel;
  YesButton,NoButton: TButton;
  IsExit: boolean;
  PageNameLabel2,PageDescriptionLabel2: TNewStaticText;
  MyExitLabel: TLabel;
procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean);
begin
  Confirm:= false;
end;
procedure MyCoustomCancelClick(Sender: TObject; var CanClose: Boolean);
begin
  CanClose:= IsExit;
  MyCoustomExit.Show;
  NoButton.Show;
  YesButton.Show;
  WizardForm.Bevel.Parent:= MyCoustomExit;
  WizardForm.Bevel1.Parent:= MyCoustomExit;
end;
procedure NoButtonClick(Sender: TObject);
begin
  IsExit:= false;
  MyCoustomExit.Hide;
  NoButton.Hide;
  YesButton.Hide;
  WizardForm.Bevel.Parent:= WizardForm;
  WizardForm.Bevel1.Parent:= WizardForm.InnerPage;
end;
procedure YesButtonClick(Sender: TObject);
begin
  IsExit:= True;
  WizardForm.CancelButton.OnClick(WizardForm.CancelButton);
end;
procedure InitializeWizard();                       
begin
  MyCoustomExit:= TPanel.Create(WizardForm);
  with MyCoustomExit do begin
    Parent:= WizardForm;
    SetBounds(ScaleX(0),ScaleY(0),WizardForm.Width,WizardForm.Height);
    with TNewIconImage.Create(WizardForm) do begin
      Parent:= MyCoustomExit;
      Left:= ScaleX(230);
      Top:= ScaleY(85);
      Icon.Handle := ID_QUESTION;
    end;
    PageNameLabel2:= TNewStaticText.Create(MyCoustomExit); 
    with PageNameLabel2 do begin
      Parent:= MyCoustomExit;
      SetBounds(WizardForm.PageNameLabel.Left,WizardForm.PageNameLabel.Top,WizardForm.PageNameLabel.Width,WizardForm.PageNameLabel.Height);
      Font.Style:= [fsBold];
      Caption:= SetupMessage(msgExitSetupTitle);      
    end;
    PageDescriptionLabel2:= TNewStaticText.Create(MyCoustomExit);
    with PageDescriptionLabel2 do begin
      Parent:= MyCoustomExit;
      SetBounds(WizardForm.PageDescriptionLabel.Left,WizardForm.PageDescriptionLabel.Top,WizardForm.PageDescriptionLabel.Width,WizardForm.PageDescriptionLabel.Height);
      Caption:= CustomMessage('ExitSetupTitle1');
    end;
    MyExitLabel:= TLabel.Create(MyCoustomExit); 
    with MyExitLabel do begin
      Parent:= MyCoustomExit;
      SetBounds(ScaleX(0),ScaleY(150),WizardForm.Width,ScaleY(80));
      AutoSize:= False;
      WordWrap:= True;
      Alignment:= taCenter;
      Caption:= SetupMessage(msgExitSetupMessage);      
    end;
    NoButton:= TButton.Create(MyCoustomExit);
    with NoButton do begin
      Parent:= WizardForm;
      SetBounds(WizardForm.CancelButton.Left,WizardForm.CancelButton.Top,WizardForm.CancelButton.Width,WizardForm.CancelButton.Height);
      Caption:= SetupMessage(msgButtonNo);
      OnClick:= @NoButtonClick;
    end;
    YesButton:= TButton.Create(MyCoustomExit);
    with YesButton do begin
      Parent:= WizardForm;
      SetBounds(WizardForm.NextButton.Left,WizardForm.NextButton.Top,WizardForm.NextButton.Width,WizardForm.NextButton.Height);
      Caption:= SetupMessage(msgButtonYes);
      OnClick:= @YesButtonClick;
    end;
  end;
end;
Procedure CurPageChanged(CurPageID: Integer);
begin
  MyCoustomExit.Hide;
  NoButton.Hide;
  YesButton.Hide;
  WizardForm.OnCloseQuery:=@MyCoustomCancelClick;
end;


Единственное "но" - при стандартной распаковке при нажатии на "Отмена" не останавливается распаковка.
Аватара пользователя
Johny777

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

Сообщение Johny777 »

Цитата Johny777:



как например та же WinApi функция MessageBox(Ex) обрабатывает входные флаги?

вот например мы отправляем туда флаги := MB_ICONINFORMATION or MB_TASKMODAL or MB_CANCELTRYCONTINUE

or складывает эти значения, если не ошибаюсь. Получается новое. А каким макаром теперь из этого числа выдрать те 3 флага назад?

спрашиваю, потому что не понимаю, но хочу понять, тк поняв смогу использовать ( плагиатъ ) тот же подход для своих процедур/функций значительно укоротив при этом их прототипы
Скрипты Inno Setup. Помощь и советы [часть 6]




Нужно сделать побитовое И с нужным флагом, при учете того что значение флага является степенью двойки.



Код:

Код: Выделить всё

 if (Flags and FM_MY_FLAG1)  0 then ...


Цитата Johny777:



и просьба: у кого есть мануал, хорошая книга (посоветуйте пожалуйста), где для самых тупых описана побитавая работа с числами (shr shl xor) или момет мне кто тут всё объяснить?
Скрипты Inno Setup. Помощь и советы [часть 6]




Логическое И (and) - для каждого бита операндов результат равен 1, если оба бита равны 1, иначе 0

Логическое ИЛИ (or) - для каждого бита операндов результат равен 1, если в одном из битов есть 1, иначе 0

Логическое отрицание (not) - каждый бит операнда инвертируется, если был 1 станет 0 и наоборот.

Логическое исключающее ИЛИ (xor) - для каждого бита операндов результат равен 1, если биты неравны между собой (наборы 0 1, 1 0). Если 2 единицы, то результат 0, также как и при двух нулях.

Логический сдвиг влево (shl) - сдвигает все биты операнда на n разрядов влево, в освободившееся место забиваются нули.

Логический сдвиг вправо (shr) - сдвигает все биты операнда на n разрядов вправо, в освободившееся место забиваются нули.



P.S. Подразумевается работа с двумя операндами.
Аватара пользователя
tr011_tmn

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

Сообщение tr011_tmn »

скажите пожалуйста, почему может во время установки не работать кнопка отмена?
Аватара пользователя
jiumx60rus

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

Сообщение jiumx60rus »

Цитата Fakt_37:



скажите пожалуйста, почему может во время установки не работать кнопка отмена?
Скрипты Inno Setup. Помощь и советы [часть 6]




Гляньте в процедуре CancelButtonClick. А лучше скрипт покажите.
Аватара пользователя
nik1967

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

Сообщение nik1967 »

Johny777, благодарю! От иконки избавился, скрипт переписал. Оказалось ещё, что на ANSI не отображается бевел на панели выхода - исправил. Хотя сам пользуюсь UNICODE версией Inno.
Аватара пользователя
icq99999999

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

Сообщение icq99999999 »

Всем привет , у меня имеется 3 7zsfx архива , при установке я хочу сделать пошаговую распаковку архивов а не всех сразу через секция run , пож-та помогите , заранее спасибо !
Аватара пользователя
insombia

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

Сообщение insombia »

icq99999999,

function ShouldSkipPage(PageID: Integer): Boolean;

begin

if (PageID =wpSelectComponents) or (PageID =wpSelectProgramGroup) or (PageID =wpready) or (PageID =wpfinished) then

Result:= True;

end;

или

[setup]

DisableDirPage = yes

и т д
Аватара пользователя
insombia

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

Сообщение insombia »

icq99999999

procedure InitializeWizard();

begin

wizardform.WelcomeLabel1.hide;

и т д, можно ещё вообще все скрыть со страницы,если хочешь создать свою страницу



procedure InitializeWizard();

begin

with WizardForm do begin

InnerNotebook.Hide;

OuterNotebook.Hide;

Bevel.Hide;

end;
Аватара пользователя
icq99999999

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

Сообщение icq99999999 »

Кто-нибудь имел дело с импортом функции из dll/stdcall по индексу, а не имени (по типу паскалевского function Bla-bla-bla(name: type): type; stdcall; external 'dll.dll'; index 10;)?
Ответить

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