How to animate a control roll out in Inno Setup

后端 未结 1 649
再見小時候
再見小時候 2021-01-07 09:31

I want to animate a control roll out in my installer.

You can see this video.

1条回答
  •  再見小時候
    2021-01-07 10:14

    You can use a timer to animate a control.

    [Code]
    
    function SetTimer(hWnd: longword; nIDEvent, uElapse: LongWord; lpTimerFunc: LongWord):
      LongWord; external 'SetTimer@user32.dll stdcall';
    function KillTimer(hWnd, nIDEvent: LongWord): LongWord;
      external 'KillTimer@User32.dll stdcall';
    
    var
      MainPanelAnimated: Boolean;
      AnimationTimer: LongWord;
    
    procedure AnimationTimerProc(
      H: LongWord; Msg: LongWord; IdEvent: LongWord; Time: LongWord);
    var
      L: Integer;
    begin
      L := WizardForm.MainPanel.Left + ScaleX(5);
      if L > 0 then
      begin
        L := 0;
        KillTimer(0, AnimationTimer);
      end;
      WizardForm.MainPanel.Left := L;
    end;
    
    procedure CurPageChanged(CurPageID: Integer);
    begin
      if WizardForm.OuterNotebook.ActivePage = WizardForm.InnerPage then
      begin
        if not MainPanelAnimated then
        begin
          AnimationTimer := SetTimer(0, 0, 5, CreateCallback(@AnimationTimerProc));
          WizardForm.MainPanel.Left := -WizardForm.MainPanel.Width;
          MainPanelAnimated := True;
        end;
      end;
    end;
    

    For CreateCallback function, you need Inno Setup 6. If you are stuck with Inno Setup 5, you can use WrapCallback function from InnoTools InnoCallback library.

    (the animation is actually more smooth than the image shows)

    For right-to-left animation, see Inno Setup - Animate a control roll out from right in a determinate page.

    0 讨论(0)
提交回复
热议问题