⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exeplay.pas

📁 有关多媒体的各个细节
💻 PAS
字号:
unit Exeplay;

interface

uses
  WinProcs, WinTypes,Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, MPlayer, StdCtrls, Buttons;

type
  TExeForm = class(TForm)
    Timer1: TTimer;
    ShowImage: TImage;
    AviMediaPlayer: TMediaPlayer;
    StepComboBox: TComboBox;
    DisPlayAviPanel: TPanel;
    BackPanel: TPanel;
    IntroMemo: TMemo;
    WavMediaPlayer: TMediaPlayer;
    RePlayBitBtn: TBitBtn;
    AutoBitBtn: TBitBtn;
    priorBitBtn: TBitBtn;
    NextBitBtn: TBitBtn;
    ReturnBitBtn: TBitBtn;
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ShowImageMouseMove(Sender: TObject;
      Shift: TShiftState; X, Y: Integer);
    procedure ReturnBitBtnClick(Sender: TObject);
    procedure NextBitBtnClick(Sender: TObject);
    procedure StepComboBoxChange(Sender: TObject);
    procedure priorBitBtnClick(Sender: TObject);
    procedure AutoBitBtnClick(Sender: TObject);
    procedure RePlayBitBtnClick(Sender: TObject);
  private
    { Private declarations }
    BitBtnDealArray:Array[1..5] of TBitBtn;//定义按钮数组
    procedure InitBitBtnDealArray;//初始化按钮数组
  public
    { Public declarations }
    HaveBlinkFlag,HaveWavFlag,HaveAviFlag:Boolean;
    AviLength,WavLength:Longint;
    AviRect:TRect;
    CurrentDisplayLine:Integer;
    AutoFlag:Boolean;
    blink1x0,blink1y0,blink1x1,blink1y1,BLINKWIDTH:Integer;
    Procedure AdjustAviPlayArea;//调整AVI显示区域
    Procedure ShowCurrentLine;//显示当前画面
    Procedure InitStepComboBoxData;//更新步选择框
    procedure InitData;//初始化数据
    procedure UnVisibleCompone;//不可见构件处理
  end;

var
  ExeForm: TExeForm;

implementation

uses Main;

{$R *.DFM}
//初始化BitBtnDealArray
procedure TExeForm.InitBitBtnDealArray;
var
 i:Integer;
begin
 BitBtnDealArray[1]:=ReplayBitBtn;
 BitBtnDealArray[2]:=AutoBitBtn;
 BitBtnDealArray[3]:=PriorBitBtn;
 BitBtnDealArray[4]:=NextBitBtn;
 BitBtnDealArray[5]:=ReturnBitBtn;
 for i:=1 to 5 do
  begin
   BitBtnDealArray[i].Caption:='';
   BitBtnDealArray[i].Visible:=False;
   BitBtnDealArray[i].Cursor:=crHandPoint;
  end;
end;

//不可见构件处理
procedure TExeForm.UnVisibleCompone;
var
 i:Integer;
begin
 DisPlayAviPanel.Visible:=False;
 for i:=1 to 5 do
  begin
   BitBtnDealArray[i].Visible:=False;
  end;
end;
//初始化数据
procedure TExeForm.InitData;
begin
 InitBitBtnDealArray;
 AviLength:=0;
 WavLength:=0;
 HaveAviFlag:=False;
 HaveWavFlag:=False;
 CurrentDisplayLine:=0;
 StepComboBox.Visible:=False;
 StepComboBox.Font.Color:=clWhite;
 AutoFlag:=True;
 blink1x0:=192;
 blink1y0:=318;
 blink1x1:=223;
 blink1y1:=348;
 BLINKWIDTH:=4;
 haveBlinkFlag:=False;
 //装入图象按钮
 RePlayBitbtn.glyph.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'button\replay.bmp');
 AutoBitbtn.glyph.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'button\AutoOff.bmp');
 PriorBitbtn.glyph.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'button\last.bmp');
 NextBitbtn.glyph.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'button\next.bmp');
 ReturnBitbtn.glyph.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'button\return.bmp');
end;
//初始化步选框
Procedure TExeForm.InitStepComboBoxData;
var
 i:Integer;
begin
 StepComBoBox.Clear;
 for i:=0 to MainForm.ExerciseMemo.Lines.Count-1 do
  begin
   StepComBoBox.Items.Add(MainForm.ShowArray[i].Bmp.TitleName);
  end;
end;
//显示当前画面
Procedure TExeForm.ShowCurrentLine;
begin
 UnVisibleCompone;
 Timer1.Enabled:=False;

//显示标题
 ExeForm.Caption:=MainForm.ShowArray[CurrentDisplayLine].Bmp.TitleName;
//显示图片
 ShowImage.Update;
  if FileExists(MainForm.MainDir+MainForm.BmpDir+MainForm.ShowArray[CurrentDisplayLine].Bmp.FileName) then
     begin
      ShowImage.Picture.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+
        MainForm.ShowArray[CurrentDisplayLine].Bmp.FileName);
     end
    else
     begin
      ShowImage.Picture.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'Black.bmp');
     end;

//显示文字说明
  if FileExists(MainForm.MainDir+MainForm.TxtDir+MainForm.ShowArray[CurrentDisplayLine].Txt.FileName) then
    begin
     BackPanel.Top:=MainForm.ShowArray[CurrentDisplayLine].Txt.Top;
     BackPanel.Left:=MainForm.ShowArray[CurrentDisplayLine].Txt.Left;
     BackPanel.Height:=MainForm.ShowArray[CurrentDisplayLine].Txt.Height;
     BackPanel.Width:=MainForm.ShowArray[CurrentDisplayLine].Txt.Width;

     IntroMemo.Top:=1;
     IntroMemo.Left:=1;
     IntroMemo.Height:=MainForm.ShowArray[CurrentDisplayLine].Txt.Height-10 div 2;
     IntroMemo.Width:=MainForm.ShowArray[CurrentDisplayLine].Txt.Width-10 div 2;

     IntroMemo.Visible:=True;
     BackPanel.Visible:=True;
     IntroMemo.Lines.LoadFromFile(MainForm.MainDir+MainForm.TxtDir+MainForm.ShowArray[CurrentDisplayLine].Txt.FileName);
    end
   else
    begin
     IntroMemo.Visible:=False;
     BackPanel.Visible:=False;
    end;


//判断有无声音
  HaveWavFlag:=False;
  if FileExists(MainForm.MainDir+MainForm.WavDir+MainForm.ShowArray[CurrentDisplayLine].WavFileName) then
     begin
      HaveWavFlag:=True;
     end
    else
     WavMediaPlayer.Close;

//判断有无闪烁
  HaveBlinkFlag:=False;
  if MainForm.ShowArray[CurrentDisplayLine].Blink.BLink='Blink' then
     begin
      blink1x0:=MainForm.ShowArray[CurrentDisplayLine].Blink.Left;
      blink1y0:=MainForm.ShowArray[CurrentDisplayLine].Blink.Top;
      blink1x1:=blink1x0+MainForm.ShowArray[CurrentDisplayLine].Blink.Width;
      blink1y1:=blink1y0+MainForm.ShowArray[CurrentDisplayLine].Blink.Height;
      with ShowImage.canvas do
       begin
        brush.style:=bsclear;
        pen.mode:=pmCopy;
        pen.color:=clRed;
        pen.width:=BLINKWIDTH;
        pen.style:=psSolid;
        rectangle(blink1x0,blink1y0,blink1x1,blink1y1);
      end;
      HaveBlinkFlag:=True;
     end;

//判断有无AVI
    HaveAviFlag:=False;
    ExeForm.AviMediaPlayer.FileName:=MainForm.MainDir+MainForm.AviDir+
       MainForm.ShowArray[CurrentDisplayLine].Avi.FileName;
    if FileExists(ExeForm.AviMediaPlayer.FileName) then
      HaveAviFlag:=True;

 Timer1.Enabled:=True;
end;
//调整AVI显示区域
Procedure TExeForm.AdjustAviPlayArea;
begin
 with DisplayAviPanel do
  begin
    Top:=MainForm.ShowArray[CurrentDisplayLine].Avi.Top;
    Left:=MainForm.ShowArray[CurrentDisplayLine].Avi.Left;
    Width:=MainForm.ShowArray[CurrentDisplayLine].Avi.Width;
    Height:=MainForm.ShowArray[CurrentDisplayLine].Avi.Height;
  end;
  AviMediaPlayer.DisplayRect:=Rect(0,0,DisplayAviPanel.Width,DisplayAviPanel.Height);
end;

//启动定时器
procedure TExeForm.Timer1Timer(Sender: TObject);
begin
 {Have Blink}
 if HaveBlinkFlag then
  begin
    with ShowImage.canvas do
      begin
        brush.style:=bsclear;
        pen.mode:=pmNotXor;
        pen.color:=clRed;
        pen.width:=BLINKWIDTH;
        pen.style:=psDot;
        rectangle(Blink1X0,Blink1Y0,Blink1X1,Blink1Y1);
      end;
  end;

//有AVI
 if HaveAviFlag then
  begin
   HaveAviFlag:=False;
   with AviMediaPlayer do
    begin
     Close;
     Display:=DisPlayAviPanel;
     Open;
     Next;
     AviLength:=Position;
    end;

    {Adjust avi play area }
    AdjustAviPlayArea;
    DisPlayAviPanel.Visible:=True;
    AviMediaPlayer.Rewind;
    AviMediaPlayer.Play;
  end;

//有WAV
  if HaveWavFlag then
   begin
    HaveWavFlag:=False;
     with WavMediaPlayer do
       begin
        DeviceType:=dtWaveAudio;
        FileName:=MainForm.MainDir+MainForm.WavDir+MainForm.ShowArray[CurrentDisplayLine].WavFileName;
        Open;
        Next;
        WavLength:=Position;
        Rewind;
        Play;
       end;
   end;

//自动翻页处理
  if AutoFlag then
   begin
    if WavLength=WavMediaPlayer.Position then
     begin
      if CurrentDisplayLine<MainForm.ExerciseMemo.Lines.Count-1 then
       begin
         CurrentDisplayLine:=CurrentDisplayLine+1;
         StepComboBox.Text:=StepComboBox.Items[CurrentDisplayLine];
         ShowCurrentLine;
       end;
     end;
  end;

end;
//创建窗体时,初始化数据
procedure TExeForm.FormCreate(Sender: TObject);
begin
 InitData;
end;

//显示按钮处理
procedure TExeForm.ShowImageMouseMove(Sender: TObject;
  Shift: TShiftState; X, Y: Integer);
var
 i:Integer;  
begin
 if Y>ShowImage.Height-30 then
  begin
   ReturnBitBtn.Visible:=True;
   ReplayBitBtn.Visible:=True;
   if StepComboBox.Items.Count-1=0 then
      begin
       StepComboBox.Visible:=False;
       AutoBitBtn.Visible:=False;
      end
   else
    begin
     StepComboBox.Visible:=True;
     AutoBitBtn.Visible:=True;
    end;

   if (StepComboBox.ItemIndex=0) or (StepComboBox.Items.Count-1=0) then
      begin
       PriorBitBtn.Visible:=False;
      end
     else
      begin
       PriorBitBtn.Visible:=True;
      end;

   if StepComboBox.ItemIndex=StepComboBox.Items.Count-1 then
     begin
      NextBitBtn.Visible:=False;
     end
     else
      begin
       NextBitBtn.Visible:=True;
      end;
  end
 else
  begin
   StepComboBox.Visible:=False;
   for i:=1 to 5 do
    begin
     BitBtnDealArray[i].Visible:=False;
    end;
  end;
end;
//返回
procedure TExeForm.ReturnBitBtnClick(Sender: TObject);
begin
 WavMediaPlayer.Close;
 MainForm.Show;
 ExeForm.Close;
end;
//后翻
procedure TExeForm.NextBitBtnClick(Sender: TObject);
begin
 if CurrentDisplayLine<StepComboBox.Items.Count-1 then
   begin
     CurrentDisplayLine:=CurrentDisplayLine+1;
   end
  else CurrentDisplayLine:=StepComboBox.Items.Count-1;

 StepComboBox.ItemIndex:=CurrentDisplayLine;
 if CurrentDisplayLine=StepComboBox.Items.Count-1 then
   NextBitBtn.Visible:=False
  else
     NextBitBtn.Visible:=True;

 if CurrentDisplayLine=0 then
    begin
     PriorBitBtn.Visible:=False;
    end
   else
     PriorBitBtn.Visible:=True;

 ShowCurrentLine;
end;
//选步跳调
procedure TExeForm.StepComboBoxChange(Sender: TObject);
begin
 CurrentDisplayLine:=StepComboBox.ItemIndex;
 ShowCurrentLine;
end;
//前翻
procedure TExeForm.priorBitBtnClick(Sender: TObject);
begin
 if (CurrentDisplayLine>0) and (CurrentDisplayLine<MainForm.ExerciseMemo.Lines.Count) then
   begin
    CurrentDisplayLine:=CurrentDisplayLine-1;
   end
  else CurrentDisplayLine:=0;

 StepComboBox.ItemIndex:=CurrentDisplayLine;
 if CurrentDisplayLine=0 then
    begin
     PriorBitBtn.Visible:=False;
    end
   else
     PriorBitBtn.Visible:=True;
 if CurrentDisplayLine<StepComboBox.Items.Count then
  NextBitBtn.Visible:=True
 else
  NextBitBtn.Visible:=False;

 ShowCurrentLine;
end;
//自动,手动
procedure TExeForm.AutoBitBtnClick(Sender: TObject);
begin
 if AutoFlag then
  begin
   AutoFlag:=False;
   AutoBitbtn.glyph.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'button\AutoOn.bmp');
  end
 else
  begin
   AutoFlag:=True;
   AutoBitbtn.glyph.LoadFromFile(MainForm.MainDir+MainForm.BmpDir+'button\AutoOff.bmp');
  end;
end;
//重放
procedure TExeForm.RePlayBitBtnClick(Sender: TObject);
begin
  Timer1.Enabled:=False;
  if FileExists(MainForm.MainDir+MainForm.AviDir+MainForm.ShowArray[CurrentDisplayLine].Avi.FileName) then
      HaveAviFlag:=True
    else
      HaveAviFlag:=False;

  HaveWavFlag:=False;
  if FileExists(MainForm.MainDir+MainForm.WavDir+MainForm.ShowArray[CurrentDisplayLine].WavFileName) then
     begin
      HaveWavFlag:=True;
     end;
  Timer1.Enabled:=True;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -