📄 main.pas
字号:
//---注册页面设置---
c_strRegBookMoveFlag = '窗口移动';
c_strRegBookResizeFlag = '窗口改变大小';
c_strRegPageMoveFlag = '点击页面移动';
c_strRegPageYeFlag = '点击页面翻页';
c_strRegMaxFlag = '最大化显示';
c_strRegSinglePage = '单页显示';
c_strRegAutoPageMoveFlag = '自动翻页';
c_strRegAutoVal = '自动翻页时间';
c_strRegUnMimeCodeFlag = '处理UnMimeCode文件标志';
c_strRegUnQPCodeFlag = '处理UnQPCode文件标志';
c_strRegUnHZCodeFlag = '处理UnHZCode文件标志';
c_strRegBIG5Flag = '处理BIG5码文件标志';
c_strRegGBFlag = '处理GB码文件标志';
c_strRegHtmlFlag = '处理HTML文件标志';
c_strRegChapFlag = '智能分段标志';
c_strRegHangDFlag = '行距加倍标志';
c_strRegUnderLineFlag = '下划线标志';
c_strRegUnderLineColor = '下划线颜色';
c_strRegUnderLineOffset = '下划线距离';
c_strRegUnderLineThick = '下划线宽度';
//---注册页码设置---
c_strRegYe1Be = '页码1前缀';
c_strRegYe1Af = '页码1后缀';
c_strRegYe1Loc = '页码1位置';
c_strRegYe1Count = '页码1显示总页数';
c_strRegYe2Be = '页码2前缀';
c_strRegYe2Af = '页码2后缀';
c_strRegYe2Loc = '页码2位置';
c_strRegYe2Count = '页码2显示总页数';
//---注册界面设置---
c_strRegBackBmpFlag = '背景图片';
c_strRegBackBmpFilename = '背景图片文件';
c_strRegLabelImageFlag = '书签图片';
c_strRegLabelImageFilename = '书签图片文件';
c_strRegLabel = '书签';
c_strRegLabelString = '书签说明';
c_strRegShowTime = '显示时间';
c_strRegAlarmFlag = '定时提醒';
c_strRegAlarmTime = '定时提醒时间';
c_strRegAlarmMsg = '显示内容';
c_strRegBtnFlat = '浮动式按钮';
c_strRegViewCtrl = '显示界面控制按钮';
//---注册系统设置---
c_strRegItemChangeFlag = '改变最新文件顺序';
c_strRegOpenFileFlag = '打开上次关闭时候的文件';
c_strRegCloseFilename = '上次关闭文件';
c_strRegCloseFilenameIndex = '上次关闭文件索引';
c_strRegCloseFilenameYe = '上次关闭文件页码';
c_strRegClearLabFlag = '清除书签信息';
c_strRegClearNewFlag = '清除最新文件';
c_strRegSimpleItem = '简化最新文件菜单';
c_strRegAutoGB = '自动转换为GB/BIG5码';
c_strRegFilename = '最新文件';
c_nRegFilenameCount = 50; //最多保存最新文件数
c_strRegFilenameSort = '最新文件顺序';
c_strRegYeViewFlag = '页码显示';
c_strRegYeFontName = '页码字体';
c_strRegYeFontSize = '页码字体大小';
c_strRegYeFontColor = '页码字体颜色';
c_strRegYeFontCharset = '页码字体语系';
c_strRegYeFontStyle1 = '页码字体粗体';
c_strRegYeFontStyle2 = '页码字体斜体';
c_strRegYeFontStyle3 = '页码字体删除线';
c_strRegYeFontStyle4 = '页码字体下划线';
c_strRegPageFontName = '页面字体';
c_strRegPageFontSize = '页面字体大小';
c_strRegPageFontColor = '页面字体颜色';
c_strRegPageFontCharset = '页面字体语系';
c_strRegPageFontStyle1 = '页面字体粗体';
c_strRegPageFontStyle2 = '页面字体斜体';
c_strRegPageFontStyle3 = '页面字体删除线';
c_strRegPageFontStyle4 = '页面字体下划线';
c_strRegMaxFileRead = '最大容纳的文件容量';
var
FormMain : TFormMain;
implementation
uses
About,
Alarm,
ClearNew,
InputYe,
LabelInput,
Mess,
MoreName,
MP3Play,
Search,
Setup,
ZipPrev,
Gb2Big5,
Decode,
ZipPass,
Global;
{$R *.DFM}
//----------------------------------窗口事件-------------------------------
//---建立窗口---
procedure TFormMain.FormCreate(Sender: TObject);
begin
//建立托盘图标
New(FpNotify);
with FpNotify^ do
begin
Wnd := Handle;
uID := 0;
uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;
hIcon := Icon.Handle;
uCallbackMessage := c_nTaskIcoMsg;
szTip := '电子小说阅读器';
end;
Shell_NotifyIcon(NIM_ADD, FpNotify);
//建立字体
g_YeFont := TFont.Create;
with g_YeFont do
begin
Name := '宋体';
Size := 9;
Color := clBlack;
Charset := 134;
Style := [];
end;
g_PageFont := TFont.Create;
with g_PageFont do
begin
Name := '宋体';
Size := 9;
Color := clBlack;
Charset := 134;
Style := [];
end;
//建立打开文件对话框
FDlgOpenTextFile := TOpenTextDialog.Create(Self);
with FDlgOpenTextFile do
begin
Filter := '所有小说文件|*.txt;*.htm;*.html;*.rtf;*.ini;*.zip;*.gb;*.blf|' +
'文本文件(*.txt)|*.txt|' +
'HTML文件(*.htm, *.html)|*.htm;*.html|' +
'RTF文件(*.rtf)|*.rtf|' +
'INI文件(*.ini)|*.ini|' +
'ZIP文件(*.zip)|*.zip|' +
'GB文件(*.gb)|*.gb|' +
'书库文件(*.blf)|*.blf|' +
'所有文件(*.*)|*.*';
FilterIndex := 1;
Options := [ofAllowMultiSelect, ofPathMustExist, ofFileMustExist];
Title := '打开小说文件';
end;
//建立保存文件对话框
FDlgSaveTextFile := TSaveTextDialog.Create(Self);
with FDlgSaveTextFile do
begin
DefaultExt := '*.txt';
Filter := '文本文件(*.txt)|*.txt';
FilterIndex := 1;
Options := [ofOverwritePrompt];
Title := '保存小说文件';
end;
//建立保存书库对话框
FDlgSaveLibFile := TSaveTextDialog.Create(Self);
with FDlgSaveLibFile do
begin
DefaultExt := '*.' + c_strLibFile;
Filter := '书库文件(*.' + c_strLibFile + ')|*.' + c_strLibFile;
FilterIndex := 1;
Options := [ofOverwritePrompt];
Title := '生成书库文件';
end;
//建立编辑框1
FMemoPageEdit[1] := TMemo.Create(Self);
with FMemoPageEdit[1] do
begin
BorderStyle := bsSingle;
ScrollBars := ssNone;
Visible := False;
OnKeyDown := OnMemoPageEditKeyDown;
Parent := FormMain;
end;
//建立编辑框2
FMemoPageEdit[2] := TMemo.Create(Self);
with FMemoPageEdit[2] do
begin
BorderStyle := bsSingle;
ScrollBars := ssNone;
Visible := False;
OnKeyDown := OnMemoPageEditKeyDown;
Parent := FormMain;
end;
//建立最新文件列表
FstrNewFileList := TStringList.Create;
//建立最小化事件
Application.OnMinimize := OnMinimize;
//能够接受拖放文件
DragAcceptFiles(Handle, True);
//初始化页面
LabelPage1.Caption := '';
LabelPage2.Caption := '';
//初始化下划线
with ImageUnderLine do
begin
Canvas.MoveTo(0, 0);
Canvas.LineTo(FnPageWidth, 0);
end;
//初始化程序
Init;
end;
//---卸载窗口事件---
procedure TFormMain.FormDestroy(Sender: TObject);
var i : integer;
begin
//删除任务栏图标
Shell_NotifyIcon(NIM_DELETE, FpNotify);
//删除字体
g_YeFont.Free;
g_PageFont.Free;
//删除对话框
FDlgOpenTextFile.Free;
FDlgSaveTextFile.Free;
FDlgSaveLibFile.Free;
//删除编辑框
FMemoPageEdit[1].Free;
FMemoPageEdit[2].Free;
//清除分配给文本框数组内存
// SetLength(FMemoTextRead, 0);
// SetLength(FstrTextReadReady, 0);
// SetLength(FstrTextReadBak, 0);
//删除文本框
for i := 1 to g_nMaxTextRead do
FMemoTextRead[i].Free;
//删除添加的指定书签的子菜单
for i := 0 to ItemLabelInput.Count - 1 do
ItemLabelInput.Delete(0);
//删除添加的最新文件的子菜单、列表内容
for i := 0 to FstrNewFileList.Count - 1 do
begin
FstrNewFileList.Delete(0);
ItemNew.Delete(0);
end;
//删除最新文件列表
FstrNewFileList.Free;
end;
//---最小化事件---
procedure TFormMain.OnMinimize(Sender: TObject);
begin
if IsWindowEnabled(Handle) then
FormMain.Hide;
end;
//---显示窗口事件---
procedure TFormMain.FormShow(Sender: TObject);
begin
if FboolIsMP3Show then FormMP3Play.Show;
Application.Restore;
FormMain.BringToFront;
FormMain.Update;
end;
//---窗口改变大小事件---
procedure TFormMain.FormResize(Sender: TObject);
begin
//判断是否允许改变窗口大小
if FboolBookResizeFlag then Exit;
//判断窗口不能过小
if FormMain.Width < 2 * FnBookButtonWidth + 100 then
FormMain.Width := 2 * FnBookButtonWidth + 100;
if FormMain.Height < 3 * FnBookButtonWidth + 40 then
FormMain.Height := 3 * FnBookButtonWidth + 40;
//调整窗口位置、大小变量
g_nBookLeft := FormMain.Left;
g_nBookTop := FormMain.Top;
g_nBookWidth := FormMain.Width;
g_nBookHeight := FormMain.Height;
if g_boolSystemCall then Exit; //若为系统调用,则退出
Init_Window; //初始化窗口
Init_Page; //初始化页面
//最大化显示翻页
if g_boolMaxYe then
begin
g_boolMaxYe := False; //写标志:没有最大化显示翻页
ChangeYe(FnCloseFileYe); //翻到关闭时候的页码
end
else
begin
ChangeYe(g_nYeCurrent); //翻到指定页
end;
end;
//---窗口键盘事件---
procedure TFormMain.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
case Key of
33, 37 : //上一页 "PageUp" "左键"
ItemPagePrev.Click;
34, 39, 32 : //下一页 "PageDown" "右键" "空格"
ItemPageNext.Click;
38 : //上一页 / 行 "上键"
if g_boolUnderLine then
MoveUnderLine(-1)
else
ItemPagePrev.Click;
40 : //下一页 / 行 "下键"
if g_boolUnderLine then
MoveUnderLine(1)
else
ItemPageNext.Click;
36 : //第一页 "Home"
ItemPageFirst.Click;
35 : //最后一页 "End"
ItemPageLast.Click;
8 : //回退到翻页前的一页 "退格键"
ChangeYe(g_nOldYeCurrent);
109, 189 : //上一篇小说(文件) " - "
OpenDiskFile(-1);
107, 187 : //下一篇小说(文件) " + "
OpenDiskFile(1);
188 : //上一篇小说(列表) "<"
ItemFilePrev.Click;
190 : //下一篇小说(列表) ">"
ItemFileNext.Click;
13, 79 : //打开文件 "Enter" "O"
ItemOpen.Click;
84 : //显示 / 隐藏时间 "T"
ShowTime(not g_boolShowTime);
27 : //隐藏窗口 "Esc"
FormMain.Hide;
18 : //弹出Pop菜单 "Alt"
begin
GetCurrentMousePoint;
FormMain.BringToFront;
MenuMain.Popup(g_MousePoint.x, g_MousePoint.y);
end;
66 : //转换为BIG5 "B"
ItemBIG5.Click;
71 : //转换为GB "G"
ItemGB.Click;
72 : //处理HTML "H"
ItemHtml.Click;
70 : //智能分段 "F"
ItemChap.Click;
68 : //行距加倍 "D"
ItemHangD.Click;
85 : //显示下划线 "U"
ItemUnderLine.Click;
69 : //编辑原稿 "E"
ItemEdit.Click;
75 : //生成书库 "K"
ItemLib.Click;
76 : //增加书签 "L"
ItemAddLabel.Click;
89 : //指定页 "Y"
ItemInputYe.Click;
65 : //自动翻页 "A"
ItemAutoPageMove.Click;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -