

视频播放的代码执行全屏时总时提示灾难性故障
WindowsMediaPlayer1.fullscreen:=true; //每次执行到这句就提示灾难性故障
解决方法:设置一个Timer控件,让它每隔5秒检测一下播放状态,如果是正在播放就全屏
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if WindowsMediaPlayer1.playState = wmppsPlaying then //主要是要加入这句检测播放状态的代码,否则一执行全屏的代码就会提示灾难性错误
begin
WindowsMediaPlayer1.fullscreen:=true;
Timer1.Enabled:=false; //全屏后把定时检测的定时器关闭
end;
end;
===============================================================
解决问题的步骤
步骤1:
在软件的官网搜索WindowsMediaPlayer.fullScreen 属性的用法,发现其示例代码在每次执行全屏属性时都检测了一下播放状态
private void fullScreen_Click(object sender, System.EventArgs e)
{
// If the player is playing, switch to full screen.
if (player.playState == WMPLib.WMPPlayState.wmppsPlaying)
{
player.fullScreen = true;
}
}
https://learn.microsoft.com/zh-cn/windows/win32/wmp/axwmplib-axwindowsmediaplayer-fullscreen--vb-and-c
步骤2:再把根据delphi7的调用到ChatGPT里搜索WindowsMediaPlayer1.playState,发现其有如下属性
WindowsMediaPlayer1.playState 是用于获取 Windows Media Player 控件(WindowsMediaPlayer1)的播放状态的属性。
playState 属性是一个整数值,用于表示不同的播放状态。以下是一些常见的 playState 值及其含义:
wmppsUndefined (0): 未定义的状态
wmppsStopped (1): 停止状态,当前没有任何内容正在播放
wmppsPaused (2): 暂停状态,当前的内容暂停播放
wmppsPlaying (3): 正在播放状态,当前内容正在播放
wmppsScanForward (4): 正在快速向前扫描
wmppsScanReverse (5): 正在快速向后扫描
wmppsBuffering (6): 缓冲状态,当前内容正在缓冲
wmppsWaiting (7): 等待状态,正在等待其他事件发生
wmppsMediaEnded (8): 媒体播放结束
wmppsTransitioning (9): 正在进行转场操作
步骤3,自己构造如下输入到delphi中没有报错
if WindowsMediaPlayer1.playState = wmppsPlaying then WindowsMediaPlayer1.fullscreen:=true;