Имя пользователя:
Пароль:
 

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

Аватара для Johny777

Ветеран


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

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


Ivan_009,
тогда придётся вернуть переменные
ещё улучшил код
теперь на одну кнопку меньше, тк объединил проигрывание и паузу, а запуск видео и прочее перенёс из переключения страниц в этапы установки
код: (приписал комментарии)
читать дальше »
Код: Выделить весь код
#include "xvid.iss"

[Setup]
AppName=ISVideo
AppVerName=1.5.0
AppPublisher=AVMan
CreateAppDir=no
OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes

[Languages]
Name: english; MessagesFile: compiler:Default.isl

[Files]
Source: Video.avi; DestDir: {tmp}; Flags: dontcopy;
Source: ISVideo.dll; DestDir: {tmp}; Flags: dontcopy;
Source: xvidcore.dll; DestDir: {tmp};Flags: dontcopy;

Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs
Source: {fonts}\*; DestDir: {app}\Files; Flags: external recursesubdirs


[code]
var
  Play_Pause_Button, StopButton: TNewButton;
  Paused: boolean; /// вводим логическую переменную

procedure ISVideoInit(Handle: THandle; FileName: PAnsiChar; L,T,W,H: Integer); external 'ISVideoInit@files:ISVideo.dll stdcall';
procedure ISVideoPause(); external 'ISVideoPause@files:ISVideo.dll stdcall';
procedure ISVideoPlay(); external 'ISVideoPlay@files:ISVideo.dll stdcall';
procedure ISVideoStop(); external 'ISVideoStop@files:ISVideo.dll stdcall';
procedure ISVideoRePlay(); external 'ISVideoRePlay@files:ISVideo.dll stdcall';
procedure ISVideoClose(); external 'ISVideoClose@files:ISVideo.dll stdcall';

function GetWindowLong(Wnd: HWnd; Index: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall';
function SetWindowLong(Wnd: HWnd; Index: Integer; NewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';


procedure CurStepChanged(CurStep: TSetupStep);
begin
  case CurStep of
    ssInstall:   /// перед устанокой
    begin
      ExtractTemporaryFile('video.avi'); /// извлекаем видео перед установкой. Это лучше чем при запуске инстала, тк скорость запуска возрастёт
      XVIDInstall;

      Play_Pause_Button.Show;  /// делаем кнопки видимыми
      StopButton.Show;

      SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) xor $2000000);
      ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421)); /// инициализируем видео

      ISVideoRePlay;  /// запускаем проигрывание
    end;

    ssPostInstall:  /// после установки
    begin
      SetWindowLong(WizardForm.Handle, (-20), GetWindowLong(WizardForm.Handle, (-20)) or $2000000);
      ISVideoClose;  /// закрываем видео

      Play_Pause_Button.Free; /// разрушаем кнопки (или можешь просто прятать PauseButton.Visible := False; или  PauseButton.Hide)
      StopButton.Free;
    end;
  end;
end;

procedure Play_Stop_Pause(Sender: TObject);
begin
  case TNewButton(Sender) of

   // PauseButton:   /// Pause

    Play_Pause_Button:
    begin
      if Paused then /// если в переменной True, то
      begin
        ISVideoRePlay; // play - запускаем видео
        TNewButton(Sender).Caption := 'Pause'; /// меняем текст кнопки (TNewButton(Sender) типэлемента(посыльный), от которог идёт команда) на "паузу"
        Paused := False; /// пишем что сняли с паузы (заметь преременная для удобства переводится как "на паузе")
      end else /// в противном случае, те в переменной значение False
      begin
        ISVideoPause(); /// ставим видео на паузу и меняем текст кнопки
        TNewButton(Sender).Caption := 'Play';
        Paused := True; /// пишем значение
      end;
    end;

    StopButton:         /// Stop
    begin
      ISVideoClose();
      ISVideoInit(WizardForm.Handle, ExpandConstant('{tmp}\video.avi'), ScaleX(1), ScaleY(1), ScaleX(748), ScaleY(421));
      ISVideoStop();

      Play_Pause_Button.Caption := 'Play';
      Paused := True; /// пишем значение
    end;

  end;
end;


procedure InitializeWizard();
begin
  MsgBox('Чтоб имитировать установку во время установки будут скопированы справки и шрифты', mbInformation, MB_OK);
  WizardForm.Width := ScaleX(700);
  WizardForm.Height := ScaleY(600);

  Paused := False; /// присваиваем начальное значение Caption := 'Pause';

  Play_Pause_Button := TNewButton.Create(nil);
  with Play_Pause_Button do
  begin
    Caption := 'Pause';
    Parent := WizardForm;
    SetBounds(ScaleX(190),ScaleY(488),ScaleX(50),ScaleY(25));
    Font.Name := 'Georgia';
    Font.Size := 10;
    Cursor :=crHand;
    OnClick := @Play_Stop_Pause;
    Hide; // сразу прячем
  end;

  StopButton := TNewButton.Create(nil);
  with StopButton do
  begin
    Caption := 'Stop';
    Parent := WizardForm;
    SetBounds(ScaleX(250),ScaleY(488),ScaleX(50),ScaleY(25));
    Font.Name := 'Georgia';
    Font.Size := 10;
    Cursor :=crHand;
    OnClick := @Play_Stop_Pause;
    Hide; // сразу прячем
  end;
end;


наглядный пример со всем необходимым в архиве:
http://sendfile.su/647969
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:25, 12-08-2012 | #608