IsDXvideo

DLL IsDXvideo 2022-11-05

Нет прав для скачивания

Yaroslav950

Участник
@LexBell,по видимости даного видео. Хорошо бы пример привести.(я имею виду по коду).
 

LexBell

Борода
Супер модератор
@Yaroslav950, Возможно, как-то криво работает именно CurPageChanged на запуске. Скорее всего, она первый раз срабатывает только после первого нажатия на кнопку далее. если после этого туда-сюда пощелкать, то все работает как положено. Добавил пример отображения работы функции DXvideoGetVisible. так-же взял на себя смелость немного оптимизировать условие по CurPageID.
 

Вложения

LexBell

Борода
Супер модератор
@Yaroslav950,

code_language.pascal:
procedure VideoTmr(Sender: TObject);
begin
  if DXvideoGetCurrentTime(v)=5 then DXvideoSetTime (v, 0);
end;
procedure InitializeWizard();
begin
  with TTimer.Create(WizardForm) do
  begin
    Interval := 10;
    OnTimer := @VideoTmr;
  end;
end;
 

LexBell

Борода
Супер модератор
@Yaroslav950,
code_language.pascal:
procedure VideoTmr(Sender: TObject);
begin
  if DXvideoGetCurrentTime(Video)>=5 then DXvideoSetTime (Video, 0);
end;
Так получится.
 

Yaroslav950

Участник
@LexBell, круто получается,но я походу наверное не так обьяснил, а если проигрывается полноценное видео до конца,становится на паузу,а после этого подождать несколько секунд и пойдет повтор.Здесь берется отрезок времени от видео 0-5 секунд и идёт повтор.
 

LexBell

Борода
Супер модератор
@Yaroslav950, по умолчанию - видео проигрывается всегда по кругу. Весь принцип в том, чтобы сделать видео для инсталлятора, в котором конец незаметно стыкуется с началом, и получается закольцованное видео, которое непрерывно воспроизводится. Нужно как-то по другому?
DXvideoInit; - у тебя я не нашел вызова этой функции нигде. он как раз отвечает в том числе и за круговое воспроизведение. А так-же за в ней борьба со срывом воспроизведения картинки после ухода в фон.
 
Последнее редактирование:

Yaroslav950

Участник
@LexBell,я ж чего и спрашиваю есть ли такой код,когда видео заканичивается и повтор шёл не сейчас, а допустим через 5 секунд или допустим переходил к не к повтору а ко 2 торому видео.
 

LexBell

Борода
Супер модератор
@LexBell,я ж чего и спрашиваю есть ли такой код,когда видео заканичивается и повтор шёл не сейчас, а допустим через 5 секунд или допустим переходил к не к повтору а ко 2 торому видео.
Можно, конечно. так-же в таймере отслеживать окончание видео и после окончания делать то, что нужно. DXvideoInit тогда лучше не вызывать, чтобы видео по кругу не пошло, иначе окончание видео можно не поймать.
code_language.pascal:
procedure VideoTmr(Sender: TObject);
begin
  if DXvideoGetCurrentTime(Video)=DXvideoGetFinishedTime(Video) then
  begin
    Sleep(5000);
    DXvideoSetTime (Video, 0);
    TTimer(Sender).Free; // убиваем этот таймер
  end;
end;
Например, запуск через 5 секунд. Вместо этого можно запустить другое видео, как это сделать ты уже знаешь, первое же запустил ) Только таймер нужно будет после этого остановить, и если нужно отслеживать что-то по новому видео, то запустить новый с новыми действиями.
 

Yaroslav950

Участник
Если хочется типа видео-сплеш, то нужно на этапе InitializeSetup запускать, если хочется на фоне во весь экран, то нужно видео запускать на MainForm.
Вот эти два разьяснения ближе к делу. Видео можно запустить как сплешку, по поводу MainForm (во весь экран). А примерчики можно?.
 

LexBell

Борода
Супер модератор
@Yaroslav950, как сплеш - запускать в InitializeSetup , в DXvideoAdd, хендл указать 0, в таймере ждать окончание и после окончание выгрузить видео и таймер.
На MainForm - узнать метрику экрана, чтобы в размер экрана сделать, в InitializeWizard - MainForm.Show;, в DXvideoAdd указать хендл - MainForm.Handle. Примеров больше не будет, нужно учиться )
Хотя, сплеш дам, чтобы было немного понятнее )
code_language.pascal:
var
  Video: Integer;
  l : Double;

function GetSystemMetrics (nIndex: Integer): Integer;
  external 'GetSystemMetrics@User32.dll stdcall setuponly';

procedure VideoTmr(Sender: TObject);
begin
  if DXvideoGetCurrentTime(Video)=l then
  begin
    DXvideoPause(Video);
    DXvideoFree;
    TTimer(Sender).Free;
  end;
end;

function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('{#Video}');
  Video:=DXvideoAdd(0, ExpandConstant('{tmp}\{#Video}'), 0, 0, 0, GetSystemMetrics(0), GetSystemMetrics(1), 0);
  l := DXvideoGetFinishedTime(Video);
  DXvideoSetVisible(Video,True);
  DXvideoFullScreen(Video);
  with TTimer.Create(nil) do
  begin
    Interval := 10;
    OnTimer := @VideoTmr;
  end;
  Result := True;
end;
Ну и в закрепе пример для изучения )
 

Вложения

Последнее редактирование:
Сверху