Проблема Не работает прогресс бар

zettend

Старожил
Всем привет.
Недавно скачать скрипт Metro UI Install, настроил под себя, подкорректировал, добавил функции.
Но при установки не работает прогресс бар.
Там есть файл ProgressBar.iss его код.
Код:
type
  TImgPB = record  h: HWND; Left, Top, Width, Height, MaxWidth: Integer; img1, img2: Longint; end;

function ImgPBCreate(hParent: HWND; bk, pb: AnsiString; Left, Top, Width, Height: Integer): TImgPB;
begin
  Result.Left:=Left;
  Result.Top:=Top;
  Result.Width:=0;
  Result.Height:=Height;
  Result.MaxWidth:=Width;
  Result.h:= hParent;
  if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True,True) else Result.img1:= 0;
  if Length(bk)>0 then Result.img2:=ImgLoad(hParent, bk, Left, Top, Width, Height, True, True) else Result.img2:=0;
  ImgApplyChanges(Result.h);
end;

procedure ImgPBSetPosition(PB: TImgPB; Percent: Extended);
var
  NewWidth: Integer;
begin
  if PB.img1<>0 then begin
    NewWidth:=Round(PB.MaxWidth*Percent/1000);
    if PB.Width<>NewWidth then begin
      PB.Width:=NewWidth;
      ImgSetPosition(PB.img1,PB.Left,PB.Top,PB.Width,PB.Height);
      ImgSetVisiblePart(PB.img1, ScaleX(0), ScaleY(0), ScaleX(PB.Width), ScaleY(PB.Height));
      ImgApplyChanges(PB.h);
    end;
  end;
end;

procedure ImgPBDelete(PB: TImgPB);
begin
  if PB.img1<>0 then ImgRelease(PB.img1);
  if PB.img2<>0 then ImgRelease(PB.img2);
  PB.img1:=0;
  PB.img2:=0;
  ImgApplyChanges(PB.h);
end;

procedure ImgPBVisibility(var PB :TImgPB;Visible :boolean);
begin
  ImgSetVisibility(PB.img1,Visible);
  ImgSetVisibility(PB.img2,Visible);
end;
Используется ISDone.
Помогите исправить.
Сам скрипт.
 

Shift85

Старожил
dEf0lT, Держи исправленную версию.
http://rghost.ru/7Ll9skyk7

ProgressBar.iss

type
TImgPB = record h: HWND; Left, Top, Width, Height, MaxWidth: Integer; img1, img2: Longint; end;

function ImgPBCreate(hParent: HWND; bk, pb: AnsiString; Left, Top, Width, Height: Integer): TImgPB;
begin
Result.Left:=Left;
Result.Top:=Top;
Result.Width:=0;
Result.Height:=Height;
Result.MaxWidth:=Width;
Result.h:= hParent;
if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True, False) else Result.img1:= 0;
if Length(bk)>0 then Result.img2:=ImgLoad(hParent, bk, Left, Top, Width, Height, True, True) else Result.img2:=0;
ImgApplyChanges(Result.h);
end;

procedure ImgPBSetPosition(PB: TImgPB; Percent: Extended);
var
NewWidth: Integer;
begin
if PB.img1<>0 then begin
NewWidth:=Round(PB.MaxWidth*Percent/1000);
if PB.Width<>NewWidth then begin
PB.Width:=NewWidth;
ImgSetPosition(PB.img1,PB.Left,PB.Top,PB.Width,PB.Height);
ImgSetVisiblePart(PB.img1, ScaleX(0), ScaleY(0), ScaleX(PB.Width), ScaleY(PB.Height));
ImgApplyChanges(PB.h);
end;
end;
end;

procedure ImgPBDelete(PB: TImgPB);
begin
if PB.img1<>0 then ImgRelease(PB.img1);
if PB.img2<>0 then ImgRelease(PB.img2);
PB.img1:=0;
PB.img2:=0;
ImgApplyChanges(PB.h);
end;

procedure ImgPBVisibility(var PB :TImgPB;Visible :boolean);
begin
ImgSetVisibility(PB.img1,Visible);
ImgSetVisibility(PB.img2,Visible);
end;
 
Последнее редактирование:

Shift85

Старожил
А можешь рассказать в чем проблема?
dEf0lT, там просто в модуле Пб заменить один параметр:
Код:
if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True, True) else Result.img1:= 0;
на
Код:
if Length(pb)>0 then Result.img1:=ImgLoad(hParent, pb, Result.Left, Result.Top, 0, Result.Height, True, False) else Result.img1:= 0;
 

zettend

Старожил
Shift85, True на False, все понятно, большая ошибка большинства скриптов...
Спасибо!
 
Сверху