Вопрос Как добавить на форму время (по таймеру и на определенных страницах).

Yaroslav950

Участник
В установщик нужно добавить время (чтобы оно шло,а не просто скомпилировалось и осталось). Есть варианты?
 

nik1967

Old Men
Проверенный
Мало информации. Куда добавить? Как должно быть (лебел с текущим временем на всех страницах)?
 

Nemko

Дилетант
Модератор
Yaroslav950, по таймеру, может:
Код:
[Setup]
AppName=Test
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=False

[Code]
var
  Time: LongWord;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

function GetTime: String;
begin
  Result:=GetDateTimeString('hh:nn:ss', ':', #0);
end;

procedure TimeProc;
begin
  WizardForm.WelcomeLabel1.Caption:=GetTime;
end;

procedure InitializeWizard;
var
  proc: LongWord;
begin
  #ifndef IS_ENHANCED
    proc:=CreateCallBack(@TimeProc);
  #else
    proc:=CallbackAddr('TimeProc');
  #endif
  Time:=SetTimer(0, 0, 1000, proc);
  WizardForm.WelcomeLabel1.Caption:=GetTime;
end;

procedure DeinitializeSetup;
begin
  if Time <> 0 then KillTimer(0, Time);
end;
 

Yaroslav950

Участник
@Nemko,Хорошо,а размещение его на определенных страницах + расположение самого времени (слева,справа,внизу,вверху)?.
nik1967, спасибо за подсказку.
 
Последнее редактирование:

Yaroslav950

Участник
А расположение его слева, сверху,снизу?
 
Последнее редактирование модератором:

Andreo Fadio

Старожил
@Yaroslav950,

Код:
[Setup]
AppName=Test
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=False

[Code]
var
  Time: LongWord;
  Label1: TLabel;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

function GetTime: String;
begin
  Result:=GetDateTimeString('hh:nn:ss', ':', #0);
end;

procedure TimeProc;
begin
  Label1.Caption:=GetTime;
end;

procedure RedesignWizardForm;
begin
  Label1 := TLabel.Create(WizardForm.MainPanel);
  with Label1 do
  begin
    Parent := WizardForm.MainPanel;
    Caption := '';
    Left := ScaleX(8);
    Top := ScaleY(40);
    Width := ScaleX(127);
    Height := ScaleY(16);
  end;

  with WizardForm.PageDescriptionLabel do
  begin
    Visible := False;
  end;

  with WizardForm.PageNameLabel do
  begin
    Visible := False;
  end;
end;

procedure InitializeWizard;
var
  proc: LongWord;
begin
  RedesignWizardForm;
  #ifndef IS_ENHANCED
    proc:=CreateCallBack(@TimeProc);
  #else
    proc:=CallbackAddr('TimeProc');
  #endif
  Time:=SetTimer(0, 0, 1000, proc);
  Label1.Caption:=GetTime;
end;

procedure DeinitializeSetup;
begin
  if Time <> 0 then KillTimer(0, Time);
end;
 

Yaroslav950

Участник
@Andreo Fadio,
with WizardForm.PageDescriptionLabel do
begin
Visible := False;
end;

with WizardForm.PageNameLabel do
begin
Visible := False;
эту строчку можно убрать и за что она отвечает?.
 

nik1967

Old Men
Проверенный
@Yaroslav950, ещё пару примеров :)
2022-07-25_012538.png
Код:
#define MakeCallback(any Method) defined(IS_ENHANCED) ? "CallbackAddr('" + Method + "')" : "CreateCallback(@" + Method + ")"

[Setup]
AppName=Test
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=False

[Code]
var
  time: LongWord;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

function GetTime: String;
begin
  Result:= GetDateTimeString('hh:nn:ss', ':', #0);
end;

procedure TimeProc;
begin
  WizardForm.Caption:= GetTime;
end;

procedure InitializeWizard;
begin
  Time:= SetTimer(0, 0, 1000, {#emit MakeCallback("TimeProc")});
  WizardForm.Caption:= GetTime;
end;

procedure DeinitializeSetup;
begin
  if Time <> 0 then KillTimer(0, Time);
end;
2022-07-25_012617.png
Код:
#define MakeCallback(any Method) defined(IS_ENHANCED) ? "CallbackAddr('" + Method + "')" : "CreateCallback(@" + Method + ")"

[Setup]
AppName=Test
AppVersion=1.5
CreateAppDir=no
DisableWelcomePage=False

[Code]
var
  time: LongWord;
  label1: TLabel;

function SetTimer(hWnd, nIDEvent, uElapse, lpTimerFunc: LongWord): LongWord; external 'SetTimer@user32.dll stdcall';
function KillTimer(hWnd, nIDEvent: LongWord): LongWord; external 'KillTimer@user32.dll stdcall';

function GetTime: String;
begin
  Result:= GetDateTimeString('hh:nn:ss', ':', #0);
end;

procedure TimeProc;
begin
  Label1.Caption:= GetTime;
end;

procedure InitializeWizard;
begin
  Label1:= TLabel.Create(WizardForm);
  with Label1 do begin
    SetBounds(ScaleX(12), ScaleY(329), ScaleX(129), ScaleY(16));
    Parent:= WizardForm;
    Caption:= GetTime;
  end;
  Time:= SetTimer(0, 0, 1000, {#emit MakeCallback("TimeProc")});
end;

procedure DeinitializeSetup;
begin
  if Time <> 0 then KillTimer(0, Time);
end;
 
Последнее редактирование:
Сверху