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

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

David.D.Rocco

Участник
Проверенный
sergey3695, странно, у меня работает без isdone
примерможет isdone его меняет
 

sergey3695

Ветеран
Модератор
sergey3695, странно, у меня работает без isdone
примерможет isdone его меняет
Без исдона и у меня все робит, просто во время установки исдон меняет титл.
 

Katarn

Новичок
Помогите решить проблему с "Процентами установки", постоянно показывает ноль. В справке искал так и не нашёл решение данной проблемы! Смотреть скрин.
Скрипт прилагается.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
WindowVisible=yes

[Files]
Source:F:\ИГРЫ\Narodnaya solyanka 14.08.2010-03.09.2010 + Bonus\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs

Код:
const
Color = clblack;

var
ProgressLabel: TLabel;

procedure ExtLog();
begin
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
end
end;

procedure InitializeWizard2();
begin
WizardForm.Font.Color:=clLime;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=clblack;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
end;

procedure InitializeWizard3;
begin
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clWindowText
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
end;

procedure InitializeWizard4();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;

procedure InitializeWizard();
begin
  InitializeWizard2();
  InitializeWizard3();
  InitializeWizard4();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-420);
WizardForm.Top:=ScaleY(MainForm.Height-170);

WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502; 
WizardForm.Height:=392; 
WizardForm.Position:=poScreenCenter; 
end
end;[/SPOILER]
 

Pirate

Новичок
Katarn
Попробуй, но работоспособность не гарантирую =)
procedure ExtLog();
var x1, x2, x3: Extended;
begin
with WizardForm.ProgressGauge do begin
x1:= Max; x2:= 100; x3:= (x1/x2);
ProgressLabel.Caption:= IntToStr(round(Position/x3)) + ' %';
end
end;
 

South

Знаток
Проверенный
Katarn
а пропорции в школе уже не проходят? или проходят, но мимо?
вот что ты здесь посчитал?
ProgressLabel.Caption:=IntToStr((Position-Min)/((Max - Min)/100)) + '%'
ЗЫ (Position-Min)*100/(Max - Min)
 
Последнее редактирование:

Katarn

Новичок
South, Пропорции в школе проходил, как положено но это было давно... :) многое уже и позабылось но не в этом суть... По твоей подсказке тоже самое, не робит! :(
 

Snoopak96

Старожил
Katarn,
По моему просто кто-то не знает про таймеры.
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
WindowVisible=yes

[Files]
Source:1\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs

[_Code]
const
Color = clblack;

var
ProgressLabel: TLabel;
TimerID: LongWord;

type
 TTimerProc=procedure(h:longword; msg:longword; idevent:longword; dwTime:longword);

function SetTimer(hWnd: longword; nIDEvent, uElapse: longword; lpTimerFunc: longword): longword; external 'SetTimer@user32.dll stdcall';
function wsprintf( a:ansistring; b:ansistring; c:TTimerProc ): longword; external 'wsprintfA@user32.dll cdecl';
function memcpy( a:longword; c:ansistring; l:longword ): longword; external 'memcpy@msvcrt.dll cdecl';
function VirtualAlloc( a:longword; b:longword; c:longword; d:longword ): longword; external 'VirtualAlloc@kernel32.dll stdcall';
function sh_wrap( u: TTimerProc ): longword;
var
  x,y,cb: longword;
  s: ansistring;
begin
 SetLength( s, 256 );
 wsprintf( s, '%i %i;', u );
 x := StrToInt( Copy(s,1,Pos(' ',s)-1) );
 Delete( s, 1, Pos(' ',s) );
 y := StrToInt( Copy(s,1,Pos(';',s)-1) );
 s := chr(85)+chr(139)+chr(236)+chr(104)+chr(x)+chr(x shr 8)+chr(x shr 16)+chr(x shr 24)+chr(139)+chr(85)+chr(8)+chr(139)+chr(77)+chr(12)+chr(255)+chr(181)+chr(16)+chr(0)+chr(0)+chr(0)+chr(255)+chr(181)+chr(20)+chr(0)+chr(0)+chr(0)+chr(184)+chr(y)+chr(y shr 8)+chr(y shr 16)+chr(y shr 24)+chr(255)+chr(85)+chr(252)+chr(90)+chr(93)+chr(194)+chr(16)+chr(0);
 cb := VirtualAlloc( 0, $2000, $1000, $40 );
 memcpy( cb, s, Length(s) );
result := cb;
end;

procedure ExtLog();
begin
with WizardForm.ProgressGauge do begin
ProgressLabel.Caption:=IntToStr((Position-Min)*100/(Max - Min)) + '%'
end
end;

Procedure mytimerproc1(h:longword; msg:longword; idevent:longword; dwTime:longword);
Begin
    if WizardForm.CurPageID = wpInstalling then ExtLog();
End;

procedure InitializeWizard2();
begin
WizardForm.Font.Color:=clLime;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=clblack;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color ;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime ;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
end;

procedure InitializeWizard3;
begin
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clWindowText
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
end;

procedure InitializeWizard4();
begin
//Выносим кнопку "Отмена" на передний план
WizardForm.CancelButton.BringToFront;
end;

procedure InitializeWizard();
begin
InitializeWizard2();
InitializeWizard3();
InitializeWizard4();
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpInstalling
then
begin
settimer(0,0,1,sh_wrap(@mytimerproc1));
WizardForm.MainPanel.Visible:=False;
WizardForm.Bevel1.Visible:=False;
WizardForm.Width:=ScaleX(395);
WizardForm.Height:=ScaleY(142);
WizardForm.Left:=ScaleX(MainForm.Width-420);
WizardForm.Top:=ScaleY(MainForm.Height-170);

WizardForm.InnerNotebook.Left:=ScaleX(10);
WizardForm.InnerNotebook.Top:=ScaleY(10);
WizardForm.InnerNotebook.Width:=ScaleX(370);
WizardForm.StatusLabel.Left:=ScaleX(0);
WizardForm.StatusLabel.Top:=ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:=ScaleX(0);
WizardForm.FileNameLabel.Top:=ScaleY(20);
WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:=ScaleY(40);
WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:=ScaleX(154);
WizardForm.CancelButton.Top:=ScaleY(80);
end;
if CurPageID=wpFinished
then
begin
WizardForm.Width:=502;
WizardForm.Height:=392;
WizardForm.Position:=poScreenCenter;
end
end;
 

Pirate

Новичок
Katarn, Вот код для расширенной версии Инно от китайцев, только что проверил - работает :):
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
WindowVisible=yes

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs

[ Code]
const
  Color = clblack;

var
  ProgressLabel: TLabel;
  Timer: TTimer;

procedure ExtLog;
var
  x1, x2, x3: Extended;
begin
  with WizardForm.ProgressGauge do begin
    x1:= Max; x2:= 100; x3:= (x1/x2);
    ProgressLabel.Caption:= IntToStr(round(Position/x3)) + ' %';
  end
end;

procedure OnTimer(Sender: TObject);
begin
  ExtLog;
end;

procedure RePaintWnd;
begin
WizardForm.Font.Color:=clLime;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=clblack;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color ;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime ;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clWindowText
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
WizardForm.CancelButton.BringToFront;
end;

procedure InitializeWizard();
begin
  RePaintWnd;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInstalling then begin
  Timer:= TTimer.Create(nil);
  Timer.OnTimer:= @OnTimer;
  Timer.Interval:= 10; //Будет обновляться 100 раз в секунду =)
  Timer.Enabled:= true;

  WizardForm.MainPanel.Visible:=False;
  WizardForm.Bevel1.Visible:=False;
  WizardForm.Width:=ScaleX(395);
  WizardForm.Height:=ScaleY(142);
  WizardForm.Left:=ScaleX(MainForm.Width-420);
  WizardForm.Top:=ScaleY(MainForm.Height-170);
  WizardForm.InnerNotebook.Left:=ScaleX(10);
  WizardForm.InnerNotebook.Top:=ScaleY(10);
  WizardForm.InnerNotebook.Width:=ScaleX(370);
  WizardForm.StatusLabel.Left:=ScaleX(0);
  WizardForm.StatusLabel.Top:=ScaleY(0);
  WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
  WizardForm.FileNameLabel.Left:=ScaleX(0);
  WizardForm.FileNameLabel.Top:=ScaleY(20);
  WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
  WizardForm.ProgressGauge.Top:=ScaleY(40);
  WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
  WizardForm.CancelButton.Left:=ScaleX(154);
  WizardForm.CancelButton.Top:=ScaleY(80);
end;
if CurPageID = wpFinished then begin
  Timer.Enabled:= false;
  WizardForm.Width:= 502;
  WizardForm.Height:= 392;
  WizardForm.Position:= poScreenCenter;
end
end;
 

South

Знаток
Проверенный
Katarn
сорри, рассчет процентов у тебя правильно написан, это я ступил :(

на самом деле твоя процедура ExtLog нигде не вызывается, поэтому не считаются проценты и постоянно написано 0%

ЗЫ тут действительно надо либо на прогрессбар вешаться и при изменении позиции пересчитывать %%, либо таймер как Snoopak96 написал
 
Последнее редактирование:

Devils Night

Ветеран
Как сделать отображение страницы HTML?
Так то в общем то почти сделал, но не то, не смог перенести на новую страницу и долго грузит инсталлятор! И ещё, можно ли это всё сделать без всяких DLL-ок?
 

Katarn

Новичок
Snoopak96, Согласен, про таймеры действительно не знал, :-[ но по твоему примеру всё равно показывает ноль. :unknown:

South, Да ладно ни чего страшного все мы люди, и все имеем свойство ошибаться. :)

Wile E. Coyote, Работает :up:
 
Последнее редактирование модератором:

Pirate

Новичок
Katarn, Вот еще такой код, поменьше, тоже работает:
Код:
procedure ExtLog;
begin
  with WizardForm.ProgressGauge do begin
    ProgressLabel.Caption:= IntToStr(round((Position)*100/(Max))) + ' %';
  end;
end;
 

Snoopak96

Старожил
Katarn,
ну как бэ да совсем не работает:
http://youtu.be/R9xBDBnTh2w

Wile E. Coyote,
Стандартные таймеры в инно не айс, в прочем и всё остальное что встроено в инно работает так себе.
 
Последнее редактирование:

Pirate

Новичок
Katarn, Вот еще один способ без всяких таймеров, но тоже нужна расширенная версия от китайцев:
Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
WindowVisible=yes

[Files]
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs

[ Code]
type
  TProgressBarProc = function (h: HWND; Msg, wParam, lParam: Longint): Longint;

function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';

const
  Color = clblack;

var
  ProgressLabel: TLabel;
  OldProc: Longint;

procedure ExtLog;
begin
  with WizardForm.ProgressGauge do begin
    ProgressLabel.Caption:= IntToStr(round((Position)*100/(Max))) + '%';
  end;
end;

function ProgressBarProc(h: HWND; Msg, wParam, lParam: Longint): Longint;
begin
  Result:= CallWindowProc(OldProc, h, Msg, wParam, lParam);
  if (Msg = $402) and (WizardForm.ProgressGauge.Position > WizardForm.ProgressGauge.Min) then begin
    ExtLog;
  end;
end;

procedure RePaintWnd;
begin
WizardForm.Font.Color:=clLime;
WizardForm.Color:=Color;
WizardForm.WelcomePage.Color:=Color;
WizardForm.InnerPage.Color:=Color;
WizardForm.FinishedPage.Color:=Color;
WizardForm.LicensePage.Color:=Color;
WizardForm.PasswordPage.Color:=Color;
WizardForm.InfoBeforePage.Color:=Color;
WizardForm.UserInfoPage.Color:=Color;
WizardForm.SelectDirPage.Color:=Color;
WizardForm.SelectComponentsPage.Color:=Color;
WizardForm.SelectProgramGroupPage.Color:=Color;
WizardForm.SelectTasksPage.Color:=Color;
WizardForm.ReadyPage.Color:=Color;
WizardForm.PreparingPage.Color:=Color;
WizardForm.InstallingPage.Color:=clblack;
WizardForm.InfoAfterPage.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.DiskSpaceLabel.Color:=Color;
WizardForm.DirEdit.Color:=Color;
WizardForm.GroupEdit.Color:=Color;
WizardForm.PasswordLabel.Color:=Color;
WizardForm.PasswordEdit.Color:=Color;
WizardForm.PasswordEditLabel.Color:=Color;
WizardForm.ReadyMemo.Color:=Color;
WizardForm.TypesCombo.Color:=Color;
WizardForm.WelcomeLabel1.Color:=Color;
WizardForm.WelcomeLabel1.Font.Color:=clLime;
WizardForm.InfoBeforeClickLabel.Color:=Color;
WizardForm.MainPanel.Color:=Color;
WizardForm.PageNameLabel.Color:=Color;
WizardForm.PageDescriptionLabel.Color:=Color;
WizardForm.ReadyLabel.Color:=Color;
WizardForm.FinishedLabel.Color:=Color;
WizardForm.YesRadio.Color:=Color;
WizardForm.NoRadio.Color:=Color;
WizardForm.WelcomeLabel2.Color:=Color;
WizardForm.LicenseLabel1.Color:=Color;
WizardForm.InfoAfterClickLabel.Color:=Color;
WizardForm.ComponentsList.Color:=Color;
WizardForm.ComponentsDiskSpaceLabel.Color:=Color;
WizardForm.BeveledLabel.Color:=Color;
WizardForm.StatusLabel.Color:=Color;
WizardForm.FilenameLabel.Color:=Color;
WizardForm.SelectDirLabel.Color:=Color;
WizardForm.SelectStartMenuFolderLabel.Color:=Color ;
WizardForm.SelectComponentsLabel.Color:=Color;
WizardForm.SelectTasksLabel.Color:=Color;
WizardForm.LicenseAcceptedRadio.Color:=Color;
WizardForm.LicenseNotAcceptedRadio.Color:=Color;
WizardForm.UserInfoNameLabel.Color:=Color;
WizardForm.UserInfoNameEdit.Color:=Color;
WizardForm.UserInfoOrgLabel.Color:=Color;
WizardForm.UserInfoOrgEdit.Color:=Color;
WizardForm.PreparingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Color:=Color;
WizardForm.FinishedHeadingLabel.Font.Color:=clLime ;
WizardForm.UserInfoSerialLabel.Color:=Color;
WizardForm.UserInfoSerialEdit.Color:=Color;
WizardForm.TasksList.Color:=Color;
WizardForm.RunList.Color:=Color;
WizardForm.SelectDirBrowseLabel.Color:=Color;
WizardForm.SelectStartMenuFolderBrowseLabel.Color:=Color;
WizardForm.PageNameLabel.Font.Color:=clLime;
WizardForm.Bevel.visible:=False;
WizardForm.BeveledLabel.visible:=False;
WizardForm.Bevel1.visible:=False;
ProgressLabel:=TLabel.Create(WizardForm)
with WizardForm.ProgressGauge do
begin
ProgressLabel.Top:=4
ProgressLabel.Left:=200
ProgressLabel.Caption:='0%'
ProgressLabel.AutoSize:=True
ProgressLabel.Font.Color:=clWindowText
ProgressLabel.Font.Style:=[fsBold]
ProgressLabel.Transparent:=True
ProgressLabel.Parent:=WizardForm.ProgressGauge
end;
WizardForm.CancelButton.BringToFront;
OldProc:= SetWindowLong(WizardForm.ProgressGauge.Handle, -4, CallBackAddr('ProgressBarProc'));
end;

procedure InitializeWizard();
begin
  RePaintWnd;
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpInstalling then begin
  WizardForm.MainPanel.Visible:=False;
  WizardForm.Bevel1.Visible:=False;
  WizardForm.Width:=ScaleX(395);
  WizardForm.Height:=ScaleY(142);
  WizardForm.Left:=ScaleX(MainForm.Width-420);
  WizardForm.Top:=ScaleY(MainForm.Height-170);
  WizardForm.InnerNotebook.Left:=ScaleX(10);
  WizardForm.InnerNotebook.Top:=ScaleY(10);
  WizardForm.InnerNotebook.Width:=ScaleX(370);
  WizardForm.StatusLabel.Left:=ScaleX(0);
  WizardForm.StatusLabel.Top:=ScaleY(0);
  WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
  WizardForm.FileNameLabel.Left:=ScaleX(0);
  WizardForm.FileNameLabel.Top:=ScaleY(20);
  WizardForm.FileNameLabel.Width:=WizardForm.InnerNotebook.Width;
  WizardForm.ProgressGauge.Top:=ScaleY(40);
  WizardForm.ProgressGauge.Width:=WizardForm.InnerNotebook.Width;
  WizardForm.CancelButton.Left:=ScaleX(154);
  WizardForm.CancelButton.Top:=ScaleY(80);
end;
if CurPageID = wpFinished then begin
  WizardForm.Width:= 502;
  WizardForm.Height:= 392;
  WizardForm.Position:= poScreenCenter;
end
end;

procedure DeinitializeSetup;
begin
  SetWindowLong(WizardForm.ProgressGauge.Handle, -4, OldProc);
end;
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху