Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Rostlv:
но в XP бегунка нет »
У меня XP SP3, всё прекрасно отображается...
Цитата Rostlv:
И привязать его к секции Run »
Пример

Код: Выделить весь код
; используем прогрессбар без отображения реального процента,
; удобно при установке доп. программ, когда их время установки заранее не известна

[Setup]
AppName=ProgressBarStyle
AppVerName=ProgressBarStyle v 1.0
DefaultDirName={pf}\ProgressBarStyle
OutputDir=.
Compression=lzma/ultra64
InternalCompressLevel=ultra64
SolidCompression=yes
VersionInfoCopyright=Serega

[Languages]
Name: russian; MessagesFile: compiler:Languages\Russian.isl

[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: ignoreversion

[Run]
; при первом и последующем запуске доп. программ, используем - BeforeInstall: AnimatePbMsg('Ваше сообщение')
; при последнем запуске, добавляем - AfterInstall: AnimatePbFree - необходимо для освобождения ресурсов и разрушения прогрессбара
Filename: {app}\MyProg.exe; BeforeInstall: AnimatePbMsg('Первый запуск MyProg.exe'); Flags: skipifsilent
Filename: {app}\MyProg.exe; BeforeInstall: AnimatePbMsg('Тестовый запуск MyProg.exe №2'); Flags: skipifsilent
Filename: {app}\MyProg.exe; BeforeInstall: AnimatePbMsg('Финальный запуск MyProg.exe'); AfterInstall: AnimatePbFree; Flags: skipifsilent

[Code]
function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';

const
  PBM_SETMARQUEE = $040A;
  GWL_STYLE      = -16;
  PBS_MARQUEE    = $08;

var
  AnimatePb: TNewProgressBar;

procedure CreateAnimatePb;
begin
  AnimatePb := TNewProgressBar.Create(WizardForm);
  with AnimatePb do
    begin
      Parent := WizardForm.InstallingPage;
      SetBounds(WizardForm.ProgressGauge.Left, WizardForm.ProgressGauge.Top + WizardForm.ProgressGauge.Height + ScaleY(10),
                WizardForm.ProgressGauge.Width, WizardForm.ProgressGauge.Height);
      SetWindowLong (AnimatePb.Handle, GWL_STYLE, (GetWindowLong (AnimatePb.Handle, GWL_STYLE) or PBS_MARQUEE));
      SendMessage(AnimatePb.Handle, PBM_SETMARQUEE, 1, 20);
    end;
end;

procedure AnimatePbMsg(const msg: string);
begin
  if AnimatePb = nil then
    CreateAnimatePb;
  WizardForm.FilenameLabel.Caption := msg;
end;

procedure AnimatePbFree;
begin
  if AnimatePb <> nil then
    begin
      AnimatePb.Free;
      AnimatePb := nil;
    end;
end;


Цитата actavir:
А как сделать на все? »
по аналогии

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 21:00, 27-12-2010 | #297