📄 main.pas
字号:
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 + -