📄 main.pas
字号:
//---注册页码设置---
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_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 = '页面字体下划线';
var
FormMain : TFormMain;
implementation
uses
About,
Alarm,
ClearNew,
InputYe,
LabelInput,
Mess,
MoreName,
MP3Play,
Search,
Setup,
ZipPrev,
Gb2Big5,
ZipPass,
Global;
{$R *.DFM}
//----------------------------------窗口事件-------------------------------
//---建立窗口---
procedure TFormMain.FormCreate(Sender: TObject);
var i : integer;
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;
//建立文本框
for i := 1 to c_nMaxTextRead do
begin
FMemoTextRead[i] := TMemo.Create(Self);
with FMemoTextRead[i] do
begin
Left := 0;
Top := -600;
width := 300;
Height := 500;
BorderStyle := bsSingle; //防止超出Label框
ScrollBars := ssNone;
TabStop := False;
Text := '';
Parent := FormMain;
end;
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;
//建立最小化事件
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;
//删除文本框
for i := 1 to c_nMaxTextRead do
FMemoTextRead[i].Free;
//删除编辑框
FMemoPageEdit[1].Free;
FMemoPageEdit[2].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, 189 : //上一页 "PageUp" "左键" " - "
ImagePagePrevClick(Self);
34, 39, 187, 32 : //下一页 "PageDown" "右键" " + " "空格"
ImagePageNextClick(Self);
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);
188 : //上一篇小说 "<"
ItemFilePrev.Click;
190 : //下一篇小说 ">"
ItemFileNext.Click;
13, 79 : //打开文件 "Enter" "O"
ItemOpen.Click;
84 : //显示 / 隐藏时间 "T"
begin
ShowTime(not g_boolShowTime);
end;
27 : //隐藏窗口 "Esc"
FormMain.Hide;
18 : //弹出Pop菜单 "Alt"
begin
GetCurrentMousePoint;
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;
77 : //背景音乐 "M"
ItemMP3.Click;
86 : //查看剪贴板 "V"
ItemReadClip.Click;
83 : //设置 "S"
ItemSetup.Click;
78 : //显示 / 隐藏书本 "N"
ItemShow.Click;
73 : //最大化显示 "I"
ItemMax.Click;
90 : //自动翻页测试 "Z"
ItemRecordTime.Click;
88 : //退出 "X"
ItemQuit.Click;
67 : //清除最新文件 "C"
ItemClearNewItem.Click;
48..57, 96..105 : //打开最新文件 "1..9"
begin
if TimeKeyDelay.Enabled then
begin //转换键码的第二位
if (Key >= 48) and (Key <= 57) then
FnKeyOpenFile := FnKeyOpenFile * 10 + Key - 48
else
FnKeyOpenFile := FnKeyOpenFile * 10 + Key - 96;
//关闭键盘延时
TimeKeyDelay.Enabled := False;
end
else
begin //转换键码的第一位
if (Key >= 48) and (Key <= 57) then
FnKeyOpenFile := Key - 48
else
FnKeyOpenFile := Key - 96;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -