Inno Setup (создание инсталяционных пакетов). Часть 2

Статус
В этой теме нельзя размещать новые ответы.

LexBell

Борода
Супер модератор
K.I.S, Держи. Обрати внимание - декларацию панели и самого лого вынес в глобальные переменные - в самом верху скрипта. Условие показа - скрытие - в самом низу скрипта, в процедуре CurPageChanged. Для справки - эта процедура срабатывает при каждом переходе на следующую или предидущую страницу:
[SOURCE="iss"]
procedure CurPageChanged(CurPageID: Integer);
begin
BtnPanel.Show; // показываем лого на всех страницах
if CurPageID = wpWelcome then // создаем условие для страницы приветствия
BtnPanel.Hide; // Скрываем лого на странице приветствия (wpWelcome)
[/SOURCE]
 

Вложения

deaddima

Новичок
Такой вопрос....
Я бы хотел сделать инсталлятор на подобии Undercover,только поскромнее
Хотел бы узнать...что в первую очередь мне делать.
т.е я знаю что нужно сначала все страницы скрыть.Использовать ли мне скрипт от Gnoma?
А вот что дальше?
 

Rikill

Новичок
deaddima, скрыть все элементы, потом создать лейблы (TLabel), картинки, чекбоксы, кнопки и тд. Для прорисовки кнопок и картинок лучше использовать botva2.
Скрывается так:
Код:
procedure InitializeWizard(); 
begin 
  WizardForm.OuterNotebook.Hide; 
  WizardForm.InnerNotebook.Hide;
end;
Прошу прощения, исправил.
 
Последнее редактирование модератором:

ARS_23

R.I.P
Проверенный
deaddima,
Код:
procedure InitializeWizard(); 
begin 
 WizardForm.OuterNotebook.Hide; 
 WizardForm.InnerNotebook.Hide;
end;
 

ARS_23

R.I.P
Проверенный
Как сделать чтобы на финишной странице если например игра не установлена то выводилось сообщение типа: произошла ошибка отключите сторонние программы и повторите попытку
Код:
Procedure CurPageChanged(CurPageID: Integer);
Begin
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    WizardForm.FinishedLabel.Font.Color:= clRed;
    WizardForm.FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
  end;
end;
 

ARS_23

R.I.P
Проверенный
K.I.S,
замени свою процедуру CurPageChanged на эту
Код:
procedure CurPageChanged(CurPageID: Integer);
begin
  BtnPanel.Show;
  if (CurPageID = wpFinished) and ISDoneError then
  begin
    (*LabelTime3.Hide;*)
    WizardForm.Caption:= ExpandConstant('{cm:Error}');
    FinishedLabel.Caption:= SetupMessage(msgSetupAborted) ;
    FinishedLabel.Font.Color:= clRed;
  end;
  if CurPageID = wpInstalling then
  BtnPanel.Hide;
  CurPageChanged2(CurPageID);
  CurPageChanged3(CurPageID);
  CurPageChanged6(CurPageID);
  CurPageChanged8(CurPageID);
end;
 

shidow

Новичок
Подскажите, как можно сделать определенное действие, если в DirEdit введен определенный текст?
Что-то типа этого, только чтоб работало :)
[SOURCE="iss"]procedure CurPageChanged(CurPageID: Integer);
begin
if WizardForm.DirEdit.Text:='123' then begin
...
end;[/SOURCE]
 

GVS276

Старожил
Проверенный
shidow,
Пример 1:
[source="iss"]
Код:
var
 UTimer: TTimer;  //Таймер для обновления событий

procedure UpdateTimer(Sender: TObject); 
begin
//123 - ваш определённый текст!
if WizardForm.DirEdit.Text='123' then begin
 WizardForm.NextButton.Enabled:= False;
end;
if WizardForm.DirEdit.Text='' then begin
 WizardForm.NextButton.Enabled:= True;
end;
end;

procedure InitializeWizard;
begin
 UTimer:= TTimer.Create(WizardForm);
 UTimer.Interval:= 1;
 UTimer.OnTimer:= @UpdateTimer;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
 UTimer.Enabled:= False;
if CurPageID=wpSelectDir then begin
 UTimer.Enabled:= True;
end;
end;[/source]
[HR][/HR]
Пример 2:
[source="iss"][Code]
procedure CurPageChanged(CurPageID: Integer);
begin
 WizardForm.DirEdit.Text:= '123';
if CurPageID=wpSelectDir then begin
if WizardForm.DirEdit.Text='123' then begin
 WizardForm.NextButton.Enabled:= False;
end;
end;
end;[/source]
[ADMIN="YURSHAT"]Нужно было указать, что первый пример для расширенной версии, а то новички не поймут ;)[/ADMIN]
 
Последнее редактирование:

Rikill

Новичок
K.I.S, обсуждалось + есть в коллекции скриптов + есть готовые инсталлы с этим.
 

Adil

Старожил
У кого есть учебник по редактору форм на inno setup 5.4.3 всборке innoultra
а то не могу растянуть какойто Tnewnotebookpage
помогите если не трудно
 

LexBell

Борода
Супер модератор
nazbek010, честно говоря, была у меня мысль написать учебник по инно. Год назад, где-то. Сейчас я понимаю всю нелепость такого желания. Просто внимательно изучи все кнопки формдизайнера, может там и не интуитивно, но достаточно понятно. В правом верхнем углу есть комбобокс со всеми элементами, выбираешь нужный тебе и делаешь с ним все, что душе угодно.
 
  • Like
Реакции: Adil

ARS_23

R.I.P
Проверенный
Как сделать чтобы где иконка был тоже черный цвет вместо белого...
Код:
WizardForm.WizardSmallBitmapImage.BackColor := clBlack;
помогите пожалуйста текструировать прогресс бар через ботву к этому скрипту
есть в справке ---> :rtfm:
 

ARS_23

R.I.P
Проверенный
А как поменять цвет прогресс бара ISDone
Из шапки осзоне:
nik1967 написал(а):
Код:
[_Code]
function SetWindowTheme(hwnd: HWND; pszSubAppName: pchar; pszSubIdList: pchar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall delayload';
 
Procedure InitializeWizard();
begin
try
SetWindowTheme(wizardform.progressgauge.Handle, ' ', ' ');
except
end
end;
 
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then
SendMessage(wizardform.progressgauge.Handle, $0409, 0, clBlack);
end;
Или вот с этим побаловаться:
Код:
TNewProgressBarState = (npbsNormal, npbsError, npbsPaused);
 

ARS_23

R.I.P
Проверенный
K.I.S,
Используй стандартный прогресс бар:
Код:
function ProgressCallback(OveralPct,CurrentPct: integer;CurrentFile,TimeStr1,TimeStr2,TimeStr3:PAnsiChar): longword;
begin
  if OveralPct<=1000 then WizardForm.ProgressGauge.Position:= OveralPct div 10;
  LabelPct1.Caption := IntToStr(OveralPct div 10)+'.'+chr(48 + OveralPct mod 10)+'%';
  LabelCurrFileName.Caption:=ExpandConstant('{cm:ExtractedFile} ')+MinimizePathName(CurrentFile, LabelCurrFileName.Font, LabelCurrFileName.Width-ScaleX(100));
  LabelTime1.Caption:=ExpandConstant('{cm:ElapsedTime} ')+TimeStr2;
  LabelTime2.Caption:=ExpandConstant('{cm:RemainingTime} ')+TimeStr1;
  LabelTime3.Caption:=ExpandConstant('{cm:AllElapsedTime}')+TimeStr3;
  Result := ISDoneCancel;
end;
 

Avangard

Участник
Я так уже пробовал дело в том что у меня прогресс бар в ISDone лежит не на wizardform.progressgauge а на Parent := WizardForm;
Код:
[_Code]
function SetWindowTheme(hwnd: HWND; pszSubAppName: pchar; pszSubIdList: pchar): Longint; external 'SetWindowTheme@uxtheme.dll stdcall delayload';
 
Procedure InitializeWizard();
begin
try
SetWindowTheme(ISDoneProgressBar1.Handle, ' ', ' ');
except
end
end;
 
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpSelectDir then SendMessage(ISDoneProgressBar1.Handle, $0409, 0, clBlack);
end;
 

Avangard

Участник
K.I.S
У тебя эта функция запускается до создания самого контролла, в данном случае прогресс-бара. Перенеси SetWindowTheme(ISDoneProgressBar1.Handle, ' ', ' '); в процедуру CreateControls, после создания ISDoneProgressBar1.
 

ARS_23

R.I.P
Проверенный
K.I.S,
нет уж, делай ка сам... больше шансов что научишься на своих ошибках ;)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху