📄 main.pas
字号:
//页面变量
Page_Width_v : integer; //页面宽度
Page_Height_v : integer; //页面高度
Page_Top_v : integer; //页面上位置
Page_1_Left_v : integer; //左页面左位置
Page_2_Left_v : integer; //右页面左位置
Page_Number : Longint; //页面可存放行数
Page_Test_Width_v : integer; //测试页面的宽度
Page_Test_Height_v : integer; //测试页面的高度
//下划线变量
UnderLine_Number : Longint; //下划线行数
UnderLine_Color : Integer; //下划线颜色
UnderLine_Offset : Integer; //下划线距离
UnderLine_Thick : Integer; //下划线宽度
Auto_Page_Move_Run : Boolean; //自动翻页时,调整下划线
//文本框变量
TextRead : array [1..MaxTextRead] of TMemo; //最终用于显示的文本框
TextRead_Ready : array [1..MaxTextRead] of string; //处理后的文本框
TextRead_Bak : array [1..MaxTextRead] of string; //原始的文本框
TextRead_do : string; //处理的文本框
SelString : string; //选择内容
EndChange : Boolean; //处理结束标志
ChangeIndex : longint; //处理起始位置
Countlines : Longint; //总行数
CountTextRead : integer; //实际总文本框数
CurrentTextRead : integer; //当前文本框数
Page_Line_Number : longint; //页起始行数
Count_Line_Number : longint; //总文本框行数
//书签变量
Label_Left_v : integer; //书签左位置
Label_Top_v : integer; //书签上位置
Label_Width_v : integer; //书签宽度
Label_Height_v : integer; //书签高度
AddLabel : TMenuItem; //书签添加菜单
Label_Indexv : array [0..Reg_Label_Count-1] of integer; //书签索引
Label_Stringv : array [0..Reg_Label_Count-1] of string; //书签说明
//翻页变量
Page_Move_Width_v : integer; //翻页宽度
Page_Move_Height_v : integer; //翻页高度
Page_Next_Left_v : integer; //右翻页左位置
//自动翻页变量
Page_RecordTime : integer; //自动测试翻页时间_时间
Current_Auto_Page : Boolean; //当前是否能自动翻页
Auto_Scroll_Count : integer; //自动卷行数
//按钮变量
Book_Button_Width_v : integer; //按钮宽度
//页码变量
ye_1_loc,ye_2_loc : string; //页码位置参数
ye_Loc_Left_v : integer; //页码左位置
ye_Loc_Top_v : integer; //页码上位置
ye_Current_v : longint; //当前页码
ye_Count_v : longint; //总页码
//文件变量
fp : File; //文件指针
Lfp : TextFile; //书库文件指针
tempfilename : string; //临时文件名
pfilename : string; //菜单中文件名
filename : string; //所打开的文件名
Open_File_Count : longint; //打开的文件计数
Readnum : Longint; //实际读文件长度大小
FileLength : Longint; //文件长
LeftLength : Longint; //剩余长度
DataBuf : array [1..BufSize] of Char; //读文件缓冲
Close_Filename : string; //上次关闭时候的文件名索引
Close_Filename_Index : integer; //上次关闭时候的文件名索引
Close_Filename_ye : longint; //上次关闭时候的文件页码
AddNew : TMenuItem; //最新文件添加菜单
OpenNew_Flag : Boolean; //打开最新文件标志
OpenNew_parm : Boolean; //打开参数文件标志
OpenNew_Item : Boolean; //仅加入菜单标志
pOpenNew_Index : Integer; //打开最新文件索引(临时)
OpenNew_Index : Integer; //打开最新文件索引
Open_blf_File : Boolean; //打开书库文件
//第一次启动判断变量
First_Boot : Boolean;
//打开参数文件正确标志
Openfile_Flag : Boolean;
//一般变量
i,j,k,l : Longint;
tf1,tf2,tf3,tf4 : Boolean;
s1,s2,s3 : string;
implementation
uses helpa, setup, ye, gb2big5, mess, LabelIn, clearnew;
{$R *.DFM}
procedure Tf_main.FormCreate(Sender: TObject);
begin
//建立“托盘”图标
New(PNotify);
PNotify^.Wnd:=f_main.Handle;
PNotify^.uID:=0;
PNotify^.uFlags:=NIF_ICON+NIF_MESSAGE+NIF_TIP;
PNotify^.hIcon:=f_main.Icon.Handle;
PNotify^.uCallbackMessage:=MyIcoMes;
PNotify^.szTip:='电子小说';
Shell_NotifyIcon(NIM_ADD,PNotify);
//设置菜单图片
for i:=0 to pop_image_count-1 do
begin
pop_Bitmap[i]:=TBitmap.Create;
pop_image.GetBitmap(i,pop_Bitmap[i]);
end;
//注册mp3控件
RegMp3;
try
mp3play:=TMp3Play.Create(self);
mp3play.Parent:=f_main;
mp3play.Top:=-300;
mp3play.Left:=-300;
mp3play.OnThreadEnded:=Mp3PlayThreadEnded;
//mp3play.OnActFrame:=Mp3PlayActFrame;
existmp3:=True; //存在MP3控件
except
existmp3:=False; //不存在MP3控件
end;
//建立文本框
for i:=1 to MaxTextRead do
begin
TextRead[i]:=TMemo.Create(self);
TextRead[i].Parent:=f_main;
TextRead[i].Left:=0;
TextRead[i].Top:=-600;
TextRead[i].width:=300;
TextRead[i].Height:=500;
TextRead[i].BorderStyle:=bsSingle; //防止超出Label框
TextRead[i].ScrollBars:=ssNone;
end;
//初始化下划线
UnderLine.Canvas.MoveTo(0,0);
UnderLine.Canvas.LineTo(Page_Width_v,0);
//初始化系统变量
DragAcceptFiles(f_main.Handle,True); //能够接受拖放文件
Page_1.Caption:=''; //清空页面1
Page_2.Caption:=''; //清空页面2
Book_Resize_Flag:=False; //写标志:允许改变窗口大小
First_Boot:=True; //写标志:第一次启动
Openfile_Flag:=False; //写标志:没有正确打开文件
xtsub:=False; //写标志:非系统调用
OpenNew_Flag:=False; //写标志:不是打开最新文件
OpenNew_parm:=False; //写标志:不是打开参数文件
OpenNew_Item:=False; //写标志:不是仅加入菜单
//初始化变量
sound_number:=0; //mp3数目写0
filename:=''; //打开文件名写''
pfilename:=''; //菜单文件名写''
Open_File_Count:=0; //文件计数写0
Open_blf_File:=False; //写标志:不是打开书库文件
Auto_Scroll_Count:=0; //自动卷行写0
ye_Count_v:=0; //总页码写0
ye_Current_v:=0; //当前页码写0
CountTextRead:=0; //总文本框数写0
CurrentTextRead:=0; //当前文本框数写0
//清除文本框内容
for i:=1 to MaxTextRead do
begin
TextRead[i].Text:='';
TextRead_Ready[i]:='';
TextRead_Bak[i]:='';
end;
end;
procedure Tf_main.FormShow(Sender: TObject);
begin
if First_Boot then
begin //第一次启动
First_Boot:=False; //写标志:非第一次启动
Init; //初始化设置
//初始化MP3设置
pop_MP3.Enabled:=existmp3;
f_setup.Check_Sound.Enabled:=existmp3;
//取消设置标志
f_ye.ye_check.Checked:=False;
f_setup.setup_check.Checked:=False;
f_LabelIn.Label_Check.Checked:=False;
end;
pop_Show.Caption:='隐藏书本';
end;
procedure Tf_main.FormHide(Sender: TObject);
begin
pop_Show.Caption:='显示书本';
end;
procedure Tf_main.Init();
var ParmFileIndex : longint; //参数文件索引
begin
Init_Var; //初始化系统变量
xtsub:=True; //若为系统调用,则退出
Init_Max; //调整最大化显示
xtsub:=False; //若为系统调用,则退出
Init_Window; //初始化窗口
Openfile_Flag:=False; //写标志:不是正确打开文件
if ParamStr(1)='' then
begin //无参数文件
//判断是否打开说明文件
if (f_setup.Check_OpenFile.Checked) and (Close_Filename_Index>=0) and (Close_Filename_ye>0) then
begin //打开上次关闭时候的文件
if (Close_filename_index<pop_new.Count-2) then
begin //在最新文件列表中,则打开索引中的文件
OpenNew_Flag:=True; //写标志:打开最新文件
pOpenNew_Index:=Close_filename_index; //最新文件索引
pFilename:=pop_new.Items[pOpenNew_Index].Caption; //菜单文件名
OpenFile; //打开文件
end
else
begin //不在最新文件列表中,则打开参数文件
OpenNew_parm:=True; //写标志:打开参数文件
pFileName:=Close_Filename; //菜单文件名
OpenFile; //打开文件
end;
end;
if not Openfile_Flag then
begin //没有正确打开文件,则打开说明文件
Filename:=''; //初始化打开文件名
Init_Page; //初始化页面
Init_Page_String; //初始化页面内容
Init_ye; //初始化页码
end
else //正确打开文件,则翻到上次关闭时候的页码
Changeye(Close_Filename_ye);
//退出循环
exit;
end
else
begin //打开参数文件
//逐个打开参数文件
Open_File_Count:=0; //文件计数写0
Open_blf_File:=False; //写标志:不是打开书库文件
for ParmFileIndex:=ParamCount downto 1 do
begin
pFileName:=ParamStr(ParmFileIndex); //菜单文件名
Open_Param_File(pFileName); //打开参数文件
end;
//判断是否打开了书库文件,并且删除原最新菜单
if (Open_blf_File) and (f_setup.Check_ClearNew.Checked) then
for ParmFileIndex:=Open_File_Count to pop_new.Count-1-2 do
Delete_NewItem(Open_File_Count);
end;
if not Openfile_Flag then
begin //打开参数文件失败,则打开说明文件
Filename:=''; //初始化打开文件名
Init_Page; //初始化页面
Init_Page_String; //初始化页面内容
Init_ye; //初始化页码
end
else
begin //打开参数文件中的第一个文件
f_main.Enabled:=False;
OpenNew_Flag:=True; //写标志:打开最新文件
pOpenNew_Index:=0; //参数文件索引写0
pFilename:=pop_new.Items[0].Caption; //菜单文件名
OpenFile; //打开文件
f_main.Enabled:=True;
end;
end;
procedure Tf_main.Init_Var();
var Reg_Flag : string; //注册标志
RegBookPath : string; //注册表路径
begin
//注册快捷菜单
//打开注册表
Reg_ini := TRegIniFile.Create('');
Reg_ini.RootKey:=HKEY_CLASSES_ROOT;
RegBookPath:='Book Files'; //定义注册表中路径
//注册软件
Reg_ini.WriteString(RegBookPath,'','电子小说阅读器');
Reg_ini.WriteString(RegBookPath+'\DefaultIcon','',ParamStr(0)+',0');
Reg_ini.WriteString(RegBookPath+'\Shell\使用电子小说阅读器阅读(&R)\command','',ParamStr(0)+' %1');
//注册右键快捷菜单
Reg_ini.WriteString('\.'+Lib_File,'',RegBookPath);
Reg_ini.WriteString('\htmlfile\shell\使用电子小说阅读器阅读(&R)\command','',ParamStr(0)+' %1');
Reg_ini.WriteString('\txtfile\shell\使用电子小说阅读器阅读(&R)\command','',ParamStr(0)+' %1');
//注册参数
Reg_ini.RootKey:=HKEY_LOCAL_MACHINE;
//注册版本号
Reg_ini.WriteString(Reg_Path,Reg_reg_ver,ver);
//更新旧版本的注册
if Reg_ini.ReadString(Reg_Path,Reg_Filename+'0','')<>'' then //存在旧版本最新文件
for i:=0 to Reg_Filename_Count-1 do
begin //将旧版本中的最新文件转移到新版本的路径下,并删除旧版本的最新文件
tempfilename:=Reg_ini.ReadString(Reg_Path,Reg_Filename+IntToStr(i),'');
Reg_ini.WriteString(Reg_File_Path,Reg_Filename+IntToStr(i),tempfilename);
Reg_ini.DeleteKey(Reg_Path,Reg_Filename+IntToStr(i));
end;
//更新最新文件索引
if Reg_ini.ReadInteger(Reg_File_Path,Reg_Filename_Sort+'0',-1)=-1 then
for i:=0 to Reg_Filename_Count-1 do
begin //建立默认索引
Reg_ini.WriteInteger(Reg_File_Path,Reg_Filename_Sort+IntToStr(i),i);
end;
//判断是否注册
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -