📄 exeplay.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 + -