?? main.pas
字號:
{
模塊名稱:電子小說閱讀器
使用方法: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 + -