procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Notify := True;
MediaPlayer1.OnNotify := NotifyProc;
end;
procedure TForm1.NotifyProc(Sender: TObject);
beginwith Sender as TMediaPlayer dobegincase Mode of
mpStopped: {do something here};
end;
//must set to true to enable next-time notification
Notify := True;
end;
end;
{
NOTE that the Notify property resets back to False when a
notify event is triggered, so inorder for you to recieve
further notify events, you have to set it back to True as in the code.
for the MODES available, see the helpfile for MediaPlayer.Mode;
}
Преобразуем контент в русский язык:
Процедура NotifyProc - это callback-функция, которая вызывается при изменении состояния компонента TMediaPlayer. В этом случае событие OnNotify установлено на NotifyProc, что означает, что оно будет вызываться каждый раз, когда свойство Notify компонента TMediaPlayer устанавливается в значение True.
Процедура NotifyProc проверяет текущий режим TMediaPlayer с помощью свойства Mode и принимает различные действия в зависимости от этого режима. В этом конкретном примере, когда режим равен mpStopped, это означает, что воспроизведение остановлено.
Чтобы определить момент, когда воспроизведение действительно закончилось, можно установить флаг или переменную для отслеживания того, продолжается ли воспроизведение. Вот обновленная версия процедуры NotifyProc:
procedureTForm1.NotifyProc(Sender:TObject);beginwithSenderasTMediaPlayerdobegincaseModeofmpStopped:begin// Воспроизведение остановленоIsPlaybackPlaying:=False;end;mpPlaying:begin// Воспроизведение продолжаетсяIsPlaybackPlaying:=True;end;end;Notify:=True;// Должно быть установлено в true для включения следующего уведомленияend;end;
В обновленной версии мы добавили флаг IsPlaybackPlaying, который отслеживает, продолжается ли воспроизведение. Когда режим равен mpStopped, мы устанавливаем IsPlaybackPlaying в значение False. Когда режим равен mpPlaying, мы устанавливаем IsPlaybackPlaying в значение True.
Затем можно использовать этот флаг для определения момента, когда воспроизведение действительно закончилось:
procedureTForm1.FormCreate(Sender:TObject);beginMediaPlayer1.Notify:=True;IsPlaybackPlaying:=False;// Инициализируем флаг воспроизведенияend;// ...ifnotIsPlaybackPlayingthenbegin// Воспроизведение закончилось, выполните что-то здесь...end;
Обратите внимание, что это подход зависит от вызова процедуры NotifyProc при изменении состояния TMediaPlayer. Если вы используете другой метод для управления воспроизведением (например, через таймер или ручное управление), вам может потребоваться адаптация вашей логики.
Определить момент завершения воспроизведения медиафайла в TMediaPlayer с помощью свойства Notify и процедуры OnNotify.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS