Вопрос Rare effect between pages

nizcoz

Участник
@Ramiro Cruzo I seen a setup (i don´t remember when and where), that the pages of this setup run two times (something like that) and show a rare effect when i press next or back. Maybe the word is not ¨delay¨.
 
Последнее редактирование:

Nemko

Дилетант
Модератор
Look this:

Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
  OldEvent_BackButtonClick: TNotifyEvent;
  OldEvent_NextButtonClick: TNotifyEvent;

procedure _BackButtonClick(Sender: TObject); forward;
procedure _NextButtonClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
with WizardForm.BackButton do
begin
  OldEvent_BackButtonClick := OnClick;
  OnClick := @_BackButtonClick;
end;
with WizardForm.NextButton do
begin
  OldEvent_NextButtonClick:=OnClick;
  OnClick:=@_NextButtonClick;
end;
end;

procedure _BackButtonClick(Sender: TObject);
begin
  OldEvent_BackButtonClick(Sender);
  WizardForm.Hide;
  Sleep(400);
  WizardForm.Show;
end;

procedure _NextButtonClick(Sender: TObject);
begin
  OldEvent_NextButtonClick(Sender);
  WizardForm.Hide;
  Sleep(400);
  WizardForm.Show;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

Sleep ( 200-400 ) and okey :ok:
 
Последнее редактирование:

Carlos

Участник
Модератор
Перепробовал всё варианты (от 0 до 600 (включая различные 11, 333 и т.д.)), но так плавно как на видео не получается.
Но либо резко переходит, мельканием, либо с большой задержкой. Может быть есть объяснение какое-нибудь? Или я что-то не так делаю?
 
Последнее редактирование:

Nemko

Дилетант
Модератор
так плавно как на видео не получается.
Может с помощью функции AnimateWindow подойдет. Вроде бы лучше стало как по мне.

Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
const
  AW_BLEND = $00080000;
  AW_HIDE = $00010000;

var
  OldEvent_BackButtonClick: TNotifyEvent;
  OldEvent_NextButtonClick: TNotifyEvent;
 
function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean;
external 'AnimateWindow@user32 stdcall';

procedure _BackButtonClick(Sender: TObject); forward;
procedure _NextButtonClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
with WizardForm.BackButton do
begin
  OldEvent_BackButtonClick := OnClick;
  OnClick := @_BackButtonClick;
end;
with WizardForm.NextButton do
begin
  OldEvent_NextButtonClick:=OnClick;
  OnClick:=@_NextButtonClick;
end;
end;

procedure _BackButtonClick(Sender: TObject);
begin
  OldEvent_BackButtonClick(Sender);
  WizardForm.Hide;
  AnimateWindow(WizardForm.Handle, 200, AW_HIDE);
  AnimateWindow(WizardForm.Handle, 200, AW_BLEND);
  WizardForm.Show;
end;

procedure _NextButtonClick(Sender: TObject);
begin
  OldEvent_NextButtonClick(Sender);
  WizardForm.Hide;
  AnimateWindow(WizardForm.Handle, 200, AW_HIDE);
  AnimateWindow(WizardForm.Handle, 200, AW_BLEND);
  WizardForm.Show;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;
 

Nemko

Дилетант
Модератор
Немного изменил Пример да также скачок замечаю, но что бы не было прорисовка элементов заработала:

Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
const
  AW_ACTIVATE = $00020000;
  AW_BLEND = $00080000;
  AW_HIDE = $00010000;

var
  OldEvent_BackButtonClick: TNotifyEvent;
  OldEvent_NextButtonClick: TNotifyEvent;

function AnimateWindow(hWnd: HWND; dwTime: DWORD; dwFlags: DWORD): Boolean;
external 'AnimateWindow@user32 stdcall';

procedure _BackButtonClick(Sender: TObject); forward;
procedure _NextButtonClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
with WizardForm.BackButton do
begin
  OldEvent_BackButtonClick := OnClick;
  OnClick := @_BackButtonClick;
end;
with WizardForm.NextButton do
begin
  OldEvent_NextButtonClick:=OnClick;
  OnClick:=@_NextButtonClick;
end;
end;

procedure _BackButtonClick(Sender: TObject);
begin
  WizardForm.Hide;
  AnimateWindow(WizardForm.Handle, 50, AW_HIDE);
  AnimateWindow(WizardForm.Handle, 250, AW_BLEND);
  OldEvent_BackButtonClick(Sender);
  WizardForm.Show;
end;

procedure _NextButtonClick(Sender: TObject);
begin
  WizardForm.Hide;
  AnimateWindow(WizardForm.Handle, 50, AW_HIDE);
  AnimateWindow(WizardForm.Handle, 250, AW_BLEND);
  OldEvent_NextButtonClick(Sender);
  WizardForm.Show;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;

P.S: Я пока тока развиваюсь поэтому тока так умею, методом тыка...
 

Carlos

Участник
Модератор
Видимо не судьба. Буду тоже пробовать различные варианты, глядишь и дойду до плавного переключения.
 

Nemko

Дилетант
Модератор
Carlos, все оказалось очень элементарно. Нашел оригинальный скрипт...

Код:
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application

[Code]
var
  OldEvent_BackButtonClick: TNotifyEvent;
  OldEvent_NextButtonClick: TNotifyEvent;

procedure _BackButtonClick(Sender: TObject); forward;
procedure _NextButtonClick(Sender: TObject); forward;

procedure RedesignWizardForm;
begin
with WizardForm.BackButton do
begin
  OldEvent_BackButtonClick := OnClick;
  OnClick := @_BackButtonClick;
end;
with WizardForm.NextButton do
begin
  OldEvent_NextButtonClick:=OnClick;
  OnClick:=@_NextButtonClick;
end;
end;

procedure _BackButtonClick(Sender: TObject);
begin
  OldEvent_BackButtonClick(Sender);
  WizardForm.Position:=poScreenCenter;
end;

procedure _NextButtonClick(Sender: TObject);
begin
  OldEvent_NextButtonClick(Sender);
  WizardForm.Position:=poScreenCenter;
end;

procedure InitializeWizard();
begin
  RedesignWizardForm;
end;
 

Carlos

Участник
Модератор
С оригиналом вообще беда :D
Самый первый пример,который ты кидал, оказался самый более менее подходящий. Буду от него отталкиваться)
 

Вложения

Сверху