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

📄 main.pas

📁 电子书阅读器的delphi设计
💻 PAS
📖 第 1 页 / 共 5 页
字号:
	//---注册页码设置---
	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 + -