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

📄 main.pas

📁 电子小说阅读器v2.68可用于阅读pdf.html等各种形式的文档
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{
模块名称:电子小说阅读器

使用方法:1、Create
		  2、Show

返回值:  无
}

unit Main;

interface

uses
	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
	StdCtrls, ExtCtrls, Menus, ShellAPI, Buttons, ComCtrls, ImgList, Jpeg,
	Clipbrd, FileCtrl, Registry, DlgText;

const
	c_nTaskIcoMsg = WM_USER + 78;  //托盘图标返回消息
	c_nRegLabelCount = 20;         //最多保存书签数
	c_nBufSize = 25000;            //文件读入缓存大小

	c_strVer = '版本 2.68';        //当前版本号

type
  TFormMain = class(TForm)
	MenuMain: TPopupMenu;
		ItemOpen: TMenuItem;
		ItemSave: TMenuItem;
		ItemNew: TMenuItem;
			N8: TMenuItem;
			ItemLib: TMenuItem;
		N3: TMenuItem;
		ItemDeal: TMenuItem;
			ItemBIG5: TMenuItem;
			ItemGB: TMenuItem;
			ItemHtml: TMenuItem;
			ItemChap: TMenuItem;
			ItemHangD: TMenuItem;
			ItemUnderLine: TMenuItem;
			ItemEdit: TMenuItem;
			ItemRefresh: TMenuItem;
			N14: TMenuItem;
			ItemSearch: TMenuItem;
			ItemSearchNext: TMenuItem;
		ItemDecode: TMenuItem;
			ItemUnMimeCode: TMenuItem;
			ItemUnQPCode: TMenuItem;
			ItemUnHZCode: TMenuItem;
		ItemLabel: TMenuItem;
			ItemAddLabel: TMenuItem;
			ItemEditLabel: TMenuItem;
			ItemDeleteLabel: TMenuItem;
		N9: TMenuItem;
		ItemLabelInput: TMenuItem;
		ItemInputYe: TMenuItem;
		N12: TMenuItem;
		ItemAutoPageMove: TMenuItem;
		ItemMP3: TMenuItem;
		ItemReadClip: TMenuItem;
		N2: TMenuItem;
		ItemSetup: TMenuItem;
		N5: TMenuItem;
		ItemShow: TMenuItem;
		ItemMax: TMenuItem;
		ItemRecordTime: TMenuItem;
		ItemClearNewItem: TMenuItem;
		N1: TMenuItem;
		ItemAbout: TMenuItem;
		N7: TMenuItem;
		ItemQuit: TMenuItem;

	MenuPageMove: TPopupMenu;
		ItemPagePrev: TMenuItem;
		ItemPageNext: TMenuItem;
		N6: TMenuItem;
		ItemPageFirst: TMenuItem;
		ItemPageLast: TMenuItem;
		N4: TMenuItem;
		ItemInputYe1: TMenuItem;
		N10: TMenuItem;
		ItemFilePrev: TMenuItem;
		ItemFileNext: TMenuItem;

	MenuTime: TPopupMenu;
		ItemShowTime: TMenuItem;
		N11: TMenuItem;
		ItemShowAlarm: TMenuItem;

	MenuEdit: TPopupMenu;
		ItemSaveEdit: TMenuItem;
		ItemExitEdit: TMenuItem;

	ImageBook: TImage;
	ImageBookPic: TImage;
    ImageBook1Pic: TImage;
	ImageLabel: TImage;
	ImageLabelPic: TImage;
	ImageUnderLine: TImage;
	ImagePagePrev: TImage;
	ImagePageNext: TImage;
	ImageMinSize: TImage;
	ImageMove: TImage;
	ImageResize: TImage;
	ImageMinSizePic: TImage;
	ImageMovePic: TImage;
	ImageResizePic: TImage;
	ImageListMenuMain: TImageList;

	LabelPage1: TLabel;
	LabelPage2: TLabel;
	LabelPageTest: TLabel;
	LabelYe1Be: TLabel;
	LabelYe1: TLabel;
	LabelYe1Af: TLabel;
	LabelYe1Test: TLabel;
	LabelYe2Be: TLabel;
	LabelYe2: TLabel;
	LabelYe2Af: TLabel;
	LabelYe2Test: TLabel;

	TimeAutoUnderLine: TTimer;
	TimeShowTime: TTimer;
	TimeKeyDelay: TTimer;
	TimeRecord: TTimer;
	TimeAutoPageMove: TTimer;

	MemoReadme: TMemo;
	MemoRTFRead: TRichEdit;

	ListChap1: TListBox;
	ListChap2: TListBox;

	PanelLabel: TPanel;
	PanelShowTime: TPanel;

	//---窗体事件---
	procedure FormCreate(Sender: TObject);
	procedure FormDestroy(Sender: TObject);
	procedure OnMinimize(Sender: TObject);
	procedure FormShow(Sender: TObject);
	procedure FormResize(Sender: TObject);
	procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
	procedure FormHide(Sender: TObject);
	procedure FormClose(Sender: TObject; var Action: TCloseAction);

	//---菜单事件---
	procedure MenuMainPopup(Sender: TObject);
	procedure ItemOpenClick(Sender: TObject);
	procedure OnItemNewFileClick(Sender: TObject);
	procedure ItemSaveClick(Sender: TObject);
	procedure ItemLibClick(Sender: TObject);
	procedure ItemBIG5Click(Sender: TObject);
	procedure ItemEditClick(Sender: TObject);
	procedure ItemRefreshClick(Sender: TObject);
	procedure ItemSearchClick(Sender: TObject);
	procedure ItemSearchNextClick(Sender: TObject);
	procedure ItemAddLabelClick(Sender: TObject);
	procedure ItemEditLabelClick(Sender: TObject);
	procedure ItemDeleteLabelClick(Sender: TObject);
	procedure OnLabelInputClick(Sender: TObject);
	procedure ItemInputYeClick(Sender: TObject);
	procedure ItemAutoPageMoveClick(Sender: TObject);
	procedure ItemMP3Click(Sender: TObject);
	procedure ItemReadClipClick(Sender: TObject);
	procedure ItemSetupClick(Sender: TObject);
	procedure ItemShowClick(Sender: TObject);
	procedure ItemMaxClick(Sender: TObject);
	procedure ItemRecordTimeClick(Sender: TObject);
	procedure ItemClearNewItemClick(Sender: TObject);
	procedure ItemAboutClick(Sender: TObject);
	procedure ItemQuitClick(Sender: TObject);

	procedure MenuPageMovePopup(Sender: TObject);
	procedure ItemPagePrevClick(Sender: TObject);
	procedure ItemPageNextClick(Sender: TObject);
	procedure ItemPageFirstClick(Sender: TObject);
	procedure ItemPageLastClick(Sender: TObject);
	procedure ItemFilePrevClick(Sender: TObject);
	procedure ItemFileNextClick(Sender: TObject);

	procedure ItemShowAlarmClick(Sender: TObject);
	procedure ItemShowTimeClick(Sender: TObject);

    procedure ItemSaveEditClick(Sender: TObject);
    procedure ItemExitEditClick(Sender: TObject);

	//---图片事件---
	procedure ImageBookMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
	procedure ImageBookMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
	procedure ImageBookMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
	procedure LabelPage1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

	procedure ImageMinSizeClick(Sender: TObject);
	procedure ImageMoveMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
	procedure ImageResizeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

	//---时钟事件---
	procedure TimeAutoPageMoveTimer(Sender: TObject);
    procedure TimeShowTimeTimer(Sender: TObject);
	procedure TimeAutoUnderLineTimer(Sender: TObject);
	procedure TimeKeyDelayTimer(Sender: TObject);
	procedure TimeRecordTimer(Sender: TObject);
	procedure ShowTime(Show : Boolean);

	//---初始化事件---
	procedure Init;              //初始化所有东西
	procedure Init_Var;          //初始化变量和注册表
	procedure Init_Setup;        //初始化各种设置
	procedure Init_Max;          //初始化窗口的最大化显示
	procedure Init_Window;       //初始化窗口的位置和大小
	procedure Init_Page;         //初始化页面、下划线
	procedure Init_Page_String;  //初始化页面的显示内容
	procedure Init_Ye;           //初始化页码
	procedure Init_Ye_View;      //初始化页码显示
	procedure Init_UnderLine;    //初始化下划线
	procedure Init_Text;         //初始化文本
	procedure Init_UnMimeCode;   //初始化UnMimeCode
	procedure Init_UnQPCode;     //初始化UnQPCode
	procedure Init_UnHZCode;     //初始化UnHZCode
	procedure Init_BIG5;         //初始化BIG5toGB
	procedure Init_GB;           //初始化GBtoBIG5
	procedure Init_AutoGB;       //初始化AutoGB
	procedure Init_Html;         //初始化Html
	procedure Init_Chap;         //初始化智能分段
	procedure Init_Page_Do;      //初始化页面处理
	procedure Init_BackImage;    //初始化背景图片
	procedure Init_LabelImage;   //初始化书签图片
	procedure Init_ViewCtrl;     //初始化界面控制按钮

	//---打开文件事件---
	function  OpenParamFile(Filename : string) : Boolean;
	function  OpenItemFile(Filename : string) : Boolean;
	function  OpenFile(Filename : string) : Boolean;
	procedure OpenDiskFile(Incr : integer);

	function  GetNextFilename(Filename : string; Incr : integer) : string;
	function  isFileExist(Filename : string; isShowMessage : Boolean) : Boolean;
  	function  isZipSubFile(Filename : string) : Boolean;

	//---其他事件---
	procedure ShowMainForm;
	procedure UpdateMainForm;

	procedure ChangeYe(YeNumber : integer);
	procedure DeleteNewItem(index : integer);

	procedure InitShowMess(PosMin, PosMax : integer; Msg : string);
	procedure ShowMessPos(Pos : integer);
	procedure CloseShowMess;

	procedure MoveUnderLine(Kind : integer);
	procedure DoSearch(SearchString : string; Caps : Boolean);

	function  GetIndexFilename(index : integer) : string;
	function  GetItemFilename(index : integer; Filename : string) : string;
	procedure GetZipFilename(Filename : string; var strZipFilename, strZipSubFilename : string);

	procedure OnMemoPageEditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
	procedure ImageLabelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
	procedure PanelShowTimeMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
	
  private
	{ Private declarations }
	//---系统变量---
	FpNotify : PNotifyIconDataA;      //定义托盘图标结构
	FboolIsMP3Show : Boolean;         //MP3窗口是否显示
	FboolEdit : Boolean;              //编辑状态
	FboolSaveEdit : Boolean;          //保存编辑状态
	FnKeyOpenFile : integer;          //使用键盘打开文件的索引(将键码转换为最新文件的序号)

	//---对话框变量---
	FDlgOpenTextFile : TOpenTextDialog;  //定义打开文件对话框
	FDlgSaveTextFile : TOpenTextDialog;  //定义保存文件对话框
	FDlgSaveLibFile : TOpenTextDialog;   //定义保存书库文件对话框

	//---窗口变量---
	FnBookLeftBeMax : integer;        //最大化前的窗口左位置
	FnBookTopBeMax : integer;         //最大化前的窗口上位置
	FnBookWidthBeMax : integer;       //最大化前的窗口宽度
	FnBookHeightBeMax : integer;      //最大化前的窗口高度

	FboolBookResizeFlag : Boolean;    //窗口改变大小标志(屏蔽Form.Resize)
	FnWidthAvg : Real;                //窗口宽度平均值
	FnHeightAvg : Real;               //窗口高度平均值

	//---页面变量---
	FnPage1Left : integer;            //左页面左位置
	FnPage2Left : integer;            //右页面左位置
	FnPageTop : integer;              //页面上位置
	FnPageWidth : integer;            //页面宽度
	FnPageHeight : integer;           //页面高度

	FnPageNumber : integer;           //页面可存放行数
	FnPageTestHeight : integer;       //测试页面的高度

	FnPageMouseDown : integer;        //页面上是否有鼠标按下

	//---下划线变量---
	FnUnderLineLocate : integer;      //下划线位置
	FnUnderLineNumber : integer;      //下划线的行数

	//---文本框变量---
	FMemoTextRead : array of TMemo;           //最终用于显示的文本框
	FMemoPageEdit : array [1 .. 2] of TMemo;  //原稿编辑窗口
	FstrTextReadReady : array of string;      //处理后的文本框
	FstrTextReadBak : array of string;        //原始的文本框

	FnCountLines : integer;           //总行数
	FnCountTextRead : integer;        //实际总文本框数
	FnCurrentTextRead : integer;      //当前文本框数

	FnPageLineNumber : integer;       //页起始行数
	FnCountLineNumber : integer;      //总文本框行数

	//---最新文件变量---
	FstrNewFileList : TStringList;    //最新文件列表

	//---书签变量---
	FnLabelLeft : integer;            //书签左位置
	FnLabelTop : integer;             //书签上位置
	FnLabelWidth : integer;           //书签宽度
	FnLabelHeight : integer;          //书签高度

	FboolCurrentLabel : boolean;      //当前有没有书签显示
	FItemAddLabel : TMenuItem;        //书签添加菜单
	FnLabelIndex : array [0 .. c_nRegLabelCount - 1] of integer;     //书签索引
	FstrLabelString : array [0 .. c_nRegLabelCount - 1] of  string;  //书签说明

	//---翻页变量---
	FnPageNextLeft : integer;         //右翻页左位置
	FnPageMoveWidth : integer;        //翻页宽度
	FnPageMoveHeight : integer;       //翻页高度

	//---自动翻页变量---
	FboolTestAutoPage : Boolean;      //测试自动翻页
	FnPageRecordTime : integer;       //测试翻页时间

	//---按钮变量---
	FnBookButtonWidth : integer;      //系统按钮的宽度

	//---页码变量---
	FnYeLocLeft : integer;            //页码左位置
	FnYeLocTop : integer;             //页码上位置
	FnYeOffset : integer;             //页码偏移量

	//---文件变量---
	FpFile : File;                    //一般文件指针
	FpLibFile : TextFile;             //书库文件指针

	ItemAddNew : TMenuItem;           //添加最新文件的菜单
	FnCloseFileIndex : integer;       //上次关闭时候的文件名索引
	FstrCloseFilename : string;       //上次关闭时候的文件名
	FnCloseFileYe : integer;          //上次关闭时候的文件页码

	FboolOpenLibFile : Boolean;       //打开书库文件标志
	FboolOpenFileFlag : Boolean;      //正确打开文件标志
	FnOpenFileCount : integer;        //打开的文件总数
	FnOpenNewIndex : Integer;         //打开最新文件索引

	FnReadnum : integer;              //实际读取文件长度大小
	FstrDataBuf : array [1 .. c_nBufSize + 5000] of Char;  //读文件的缓冲(加5000是因为转换的时候会多出一些字节)

  public
	{ Public declarations }
	procedure TaskIcoMsgDo(var Msg : TMessage); Message c_nTaskIcoMsg;  //托盘图标的返回消息
	procedure DropFiles(var Msg : TMessage); Message WM_DROPFILES;      //拖动文件消息
	function  DeleteDirectory(DirName : string) : boolean;              //删除目录

  end;

//---定义基本常量---
const
	//---系统常量---
	c_nDragMove = $F017;                //移动控件消息
	c_strLibFile = 'blf';               //书库文件扩展名
	c_strZipPassTempDir = '\~TaleZip';  //ZIP文件临时解压目录
	c_strPopNewIndex = ') ';            //最新文件菜单索引序号分隔符

	//---窗口常量---
	c_nBookLeft = 100;        //窗口左位置
	c_nBookTop = 50;          //窗口上位置
	c_nBookWidth = 556;       //窗口宽度
	c_nBookHeight = 380;      //窗口高度

	//---页面常量---
	c_nPage1Left = 33;        //左页面左位置
	c_nPage2Left = 306;       //右页面左位置
	c_nPageTop = 28;          //页面上位置
	c_nPageWidth = 230;       //页面宽度
	c_nPageHeight = 330;      //页面高度

	//---书签常量---
	c_nLabelLeft = 300;       //书签左位置
	c_nLabelTop = 5;          //书签上位置
	c_nLabelWidth = 40;       //书签宽度
	c_nLabelHeight = 90;      //书签高度

	//---翻页常量---
	c_nPageNextLeft = 543;    //右翻页的左位置
	c_nPageMoveWidth = 13;    //翻页宽度
	c_nPageMoveHeight = 380;  //翻页宽度

	//---页码常量---
	c_nYeLocLeft = 11;        //页码左位置
	c_nYeLocTop = 8;          //页码上位置

	//---注册表常量---
	//---系统注册目录---
	c_strRegPath = 'Software\Tale\ReadBook';             //系统目录
	c_strRegBookPath = 'Book Files';                     //右键菜单注册路径
	c_strRegFilePath = 'Software\Tale\ReadBook\File';    //最新文件目录
	c_strRegFontPath = 'Software\Tale\ReadBook\Font';    //字体目录
	c_strRegLabelPath = 'Software\Tale\ReadBook\Label';  //书签目录
	c_strRegAlarmPath = 'Software\Tale\ReadBook\Alarm';  //定时提醒目录

	//---注册标志---
	c_strRegRegFlag = '注册';
	c_strRegRegVer = '版本';

	//---注册书本设置---
	c_strRegBookLeft = '窗口左位置';
	c_strRegBookTop = '窗口上位置';
	c_strRegBookWidth = '窗口宽度';
	c_strRegBookHeight = '窗口高度';

⌨️ 快捷键说明

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