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

📄 main.pas

📁 有关多媒体的各个细节
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit Main;

interface

uses
  WinProcs, WinTypes,Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls,  StdCtrls, Menus, Tabs;

//自定义常量
const MaxShowBmpNum=4;
      SamllShowBmpNum=1;
      BarShowHeight=72;
      BarShowWidth=72;
      MaxShowArrayNum=100;

type
  BmpRecord=Record//图片信息记录类型
   TitleName,FileName,SmallFileName:String[30];
  end;

  AviRecord=Record//动画信息记录类型
   FileName:String[30];
   Left,Top,Width,Height:Integer;
  end;

  TxtRecord=Record//文字说明记录类型
   FileName:String[30];
   Left,Top,Width,Height:Integer;
  end;

  BlinkRecord=Record//闪烁记录类型
   Blink:String[8];
   Left,Top,Width,Height:Integer;
  end;

  ShowDataRecord=Record//具体显示信息组合记录类型
   bmp:BmpRecord;
   avi:AviRecord;
   txt:TxtRecord;
   blink:BlinkRecord;
   WavFileName:string;
  end;

  ShowBar=Record//小图显示信息组合记录类型
   BackPanel,ColorPanel,BarPanel:TPanel;
   LabelShape:TShape;
   TitleLable:TLabel;
   ShowImage:TImage;
   AviFileName,BmpFileName:String[30];
  end;

  TMainForm = class(TForm)
    Panel1: TPanel;
    ScrollBar1: TScrollBar;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Image1: TImage;
    Panel5: TPanel;
    Panel6: TPanel;
    Panel7: TPanel;
    Image2: TImage;
    Panel8: TPanel;
    Panel9: TPanel;
    Panel10: TPanel;
    Image3: TImage;
    Shape1: TShape;
    Panel11: TPanel;
    Panel12: TPanel;
    Panel13: TPanel;
    Image4: TImage;
    Shape2: TShape;
    Shape3: TShape;
    Shape4: TShape;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Timer1: TTimer;
    TabSet1: TTabSet;
    DirListBox: TListBox;
    UnStretchImage: TImage;
    MainMemo: TMemo;
    ExerciseMemo: TMemo;
    ExeMemo: TMemo;
    procedure Image1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure ScrollBar1Change(Sender: TObject);
    procedure TabSet1Change(Sender: TObject; NewTab: Integer;
      var AllowChange: Boolean);
    procedure DirListBoxClick(Sender: TObject);
  private
    { Private declarations }
    CurrentClickImageNum:Integer;//当前选中图形
    ShowBarArray:Array[1..MaxShowBmpNum] of ShowBar;//图形框显示处理数组
    procedure InitShowBarArray;//初始化图形框显示处理数组
  public
    { Public declarations }
    UpdateShowBarFlag:Boolean;//更新显示标志
    MainDir,TxtDir,BmpDir,AviDir,WavDir:String[40];//目录字符串
    ShowArray:Array[0..MaxShowArrayNum] of ShowDataRecord;//具体画面信息显示处理数组
    procedure GetNowMemo(const CompareStr:String;const DirectMemo,SourceMemo:TMemo);
    procedure TranslateStr;//当前画面信息翻译
    procedure ShowTimeRespone;//即时更新显示
    procedure UpdateExerciseMemo(Const TabVar:TTabSet);//更新具体节内容
    procedure TabControlChange(const TabVar:TTabSet);//标符合
    procedure InitTimeResponeData(const ResponeTitle:String;const TabVar:TTabSet);//初始化即时更新信息
    procedure InitShowArray;//清除显示信息数组
    procedure InitDirMemoData;//初始化显示目录
    Function  MyStrToInt(const SourceStr:String):Integer;//自定义字符串数字转换过程
    procedure UpdateShowBarArray(Var StartNum,MemoLinesCount:Integer);//更新显示框显示
    function  ReturnCurrentDisplayLineNum(const WantfindStr:String):Integer;//获取当前显示行
    Procedure UnVisibleShowBar;//不可见显示框
    Procedure ClearShowBarColor;//清显示框颜色
    Procedure SetShowBarColor(Const CurrentSelectedNum:Integer);//设置选中显示框颜色
    Procedure VisibleShowBar(const EndNum:Integer);//可见显示框
    procedure ShowFirstRecord;//程序运行时显示第一个章第一节内容
  end;

var
  MainForm: TMainForm;

implementation

uses ExePlay;

{$R *.DFM}
//即时更新显示
procedure TMainForm.ShowTimeRespone;
begin
 Timer1.Enabled:=False;//禁止定时器
 MainForm.ScrollBar1.Min:=0;//初始化滚动条
 if ExerciseMemo.Lines.Count>0 then
   MainForm.ScrollBar1.Max:=ExerciseMemo.Lines.Count-1
  else
   MainForm.ScrollBar1.Max:=0;
 UpdateShowBarFlag:=True;// 允许更新显示框
 Timer1.Enabled:=True;//开启定时器
end;

//程序起动时,显示第一章第一节
procedure TMainForm.ShowFirstRecord;
begin
  if DirListBox.Items.Count<>0 then
   begin
    InitTimeResponeData(DirListBox.Items[0],TabSet1);//取某一章数据
    ShowTimeResPone;//
   end; 
end;
//不可见显示处理
Procedure TMainForm.UnVisibleShowBar;
var
 i:Integer;
begin
 for i:=1 to MaxShowBmpNum do
  begin
   ShowBarArray[i].BackPanel.Visible:=False;
   ShowBarArray[i].LabelShape.Visible:=False;
   ShowBarArray[i].TitleLable.Visible:=False;
   ShowBarArray[i].ShowImage.Picture:=Nil;
  end;
end;
//清显示框颜色
Procedure TMainForm.ClearShowBarColor;
 var i:Integer;
begin
  for i:=1 to MaxShowBmpNum do
   begin
    ShowBarArray[i].ColorPanel.Color:=clBtnFace;
    ShowBarArray[i].TitleLable.Font.Color:=clBlack;
   end;
end;

//设置选中显示框颜色
Procedure TMainForm.SetShowBarColor(Const CurrentSelectedNum:Integer);
begin
 ShowBarArray[CurrentSelectedNum].ColorPanel.Color:=clFuchsia;
 ShowBarArray[CurrentSelectedNum].TitleLable.Font.Color:=clFuchsia;
end;

//可见显示框
Procedure TMainForm.VisibleShowBar(const EndNum:Integer);
var
 i:Integer;
begin
 for i:=1 to EndNum do
  begin
   ShowBarArray[i].BackPanel.Visible:=True;
   ShowBarArray[i].LabelShape.Visible:=True;
   ShowBarArray[i].TitleLable.Visible:=True;
  end;
end;

//自定义字符数字转换函数
Function  TMainForm.MyStrToInt(const SourceStr:String):Integer;
begin
 if SourceStr<>'' then
  begin
   Result:=StrToInt(SourceStr);
  end
 else
  Result:=0;
end;
//初始化目录显示数据
procedure  TMainForm.InitDirMemoData;
var
 i,StartNum:Integer;
 EndFlag:Boolean;
begin
 if MainMemo.Lines.Count=0 then exit;{主文件为空,退出}

 DirListBox.Clear;
 StartNum:=0;
 i:=0;
 while i<mainMemo.Lines.Count-1 do{找到文件头}
  begin
   if Pos('FileHead'+'~',mainMemo.Lines[i])<>0 then
    begin
     StartNum:=i;
     i:=mainMemo.Lines.Count;
    end
   else Inc(i);
  end;
 if i<>mainMemo.Lines.Count-1 then{分离出响应主题}
  begin
   DirListBox.Clear;
   EndFlag:=False;
   Inc(StartNum);
   while (Not EndFlag) and (StartNum<mainMemo.Lines.Count) do
    begin
     if Pos('^',MainMemo.Lines[StartNum])=0 then
      begin
       DirListBox.Items.Add(MainMemo.Lines[StartNum]);
       Inc(StartNum);
      end
     else EndFlag:=True;
    end;
  end;
end;

//初始化ShowArray数组
procedure TMainForm.InitShowArray;
var
 i:Integer;
begin
  for i:=0 to MaxShowArrayNum do
   begin
    ShowArray[i].Bmp.TitleName:='';
    ShowArray[i].Bmp.FileName:='';

    ShowArray[i].Avi.FileName:='';
    ShowArray[i].Avi.Top:=0;
    ShowArray[i].Avi.Left:=0;
    ShowArray[i].Avi.Width:=0;
    ShowArray[i].Avi.Height:=0;

    ShowArray[i].Txt.FileName:='';
    ShowArray[i].Txt.Top:=0;
    ShowArray[i].Txt.Left:=0;
    ShowArray[i].Txt.Width:=0;
    ShowArray[i].Txt.Height:=0;

    ShowArray[i].Blink.Blink:='';
    ShowArray[i].Blink.Top:=0;
    ShowArray[i].Blink.Left:=0;
    ShowArray[i].Blink.Width:=0;
    ShowArray[i].Blink.Height:=0;

    ShowArray[i].WavFileName:='';
   end;
end;

{初始化或更新响应的主题}
procedure TMainForm.InitTimeResponeData(const ResponeTitle:String;const TabVar:TTabSet);
var
 i,StartNum,MemoLinesCount:Integer;
 EndFlag:Boolean;
begin
 InitShowArray;
 StartNum:=0;
 MemoLinesCount:=MainMemo.Lines.Count;
 MainForm.Caption:=ResponeTitle;
 i:=0;
 while i<MemoLinesCount-1 do//查找当前响应主题
  begin
   if Pos(ResponeTitle+'~',mainMemo.Lines[i])<>0 then
    begin
     StartNum:=i;
     i:=MemoLinesCount;
    end
   else Inc(i);
  end;

 if i<>MemoLinesCount-1 then//显示处理
  begin
   TabVar.Tabs.Clear;
   EndFlag:=False;
   TabVar.Tabs.Add('所有');
   Inc(StartNum);
   while (Not EndFlag) and (StartNum<MemoLinesCount) do
    begin
     if Pos('^',MainMemo.Lines[StartNum])=0 then
      begin
       TabVar.Tabs.Add(MainMemo.Lines[StartNum]);
       Inc(StartNum);
      end
     else EndFlag:=True;
    end;
   UpdateExerciseMemo(TabVar);
   InitShowArray;
   TranslateStr;
   TabVar.TabIndex:=TabVar.FirstIndex;
  end
 else
  ShowMessage('没有当前主题 !');
end;

//获取当前章所有内容节的内容
procedure TMainForm.GetNowMemo(const CompareStr:String;const DirectMemo,SourceMemo:TMemo);
var
 i,StartNum,MemoLinesCount:Integer;
 EndFlag:Boolean;
begin
 StartNum:=0;
 MemoLinesCount:=SourceMemo.Lines.Count;
 i:=0;
 while i<MemoLinesCount-1 do//查找当前章
  begin
   if Pos(CompareStr+'~',SourceMemo.Lines[i])<>0 then
    begin
     StartNum:=i;
     i:=MemoLinesCount;
    end
   else Inc(i);
  end;

 if i<>MemoLinesCount-1 then//分离出当前章的所有的节
  begin
   Inc(StartNum);
   EndFlag:=False;
   while (Not EndFlag) and (StartNum<MemoLinesCount) do
    begin
     if Pos('^',SourceMemo.Lines[StartNum])=0 then
      begin
       DirectMemo.Lines.Add(SourceMemo.Lines[StartNum]);
       Inc(StartNum);
      end
     else EndFlag:=True;
    end;
  end;
end;

//程序创建时,初始化数据
procedure TMainForm.FormCreate(Sender: TObject);
begin
 MainDir:=ExtractFilePath(ParamStr(0));
 TxtDir:='txt\';
 BmpDir:='bmp\';
 AviDir:='avi\';
 WavDir:='wav\';

 MainMemo.Lines.Clear;
 MainMemo.Lines.LoadFromFile(MainDir+TxtDir+'main.txt');//读入main.txt文件
 ExeMemo.Lines.Clear;
 Exememo.Lines.LoadFromFile(MainDir+TxtDir+'main.ext');//读入main.ext文件
 InitDirMemoData;//初始化目录数据
 InitShowBarArray; //初始化ShowBarArray数组数据
 CurrentClickImageNum:=1; //设置第一个图为选中
 UnVisibleShowBar; //不可见显示框
 UpdateShowBarFlag:=False;//更新显示标志为假

⌨️ 快捷键说明

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