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

📄 main.pas

📁 电子小说阅读器v2.68可用于阅读pdf.html等各种形式的文档
💻 PAS
📖 第 1 页 / 共 5 页
字号:
var i, j, k : integer;
begin
    //显示主窗口
	ShowMainForm;

	//当前没有书签的话,就退出
	if not FboolCurrentLabel then Exit;

	//检测书签
	for j :=  0 to ItemLabelInput.Count - 1 do
	begin
		if ((g_boolSinglePage and (g_nYeCurrent + FnYeOffset = FnLabelIndex[j])) or
		   ((not g_boolSinglePage) and ((g_nYeCurrent = FnLabelIndex[j]) or (g_nYeCurrent + 1 = FnLabelIndex[j])))) then
		begin  //删除书签
			if Confirm('删除书签《' + FstrLabelString[j] + '》吗?') then
			begin
				//获得最新文件索引
				i := RegReadInt(c_strRegFilePath, c_strRegFilenameSort + IntToStr(FnOpenNewIndex), - 1);

				//调整书签设置
				for k := j + 1 to ItemLabelInput.Count - 1 do
				begin
					FnLabelIndex[k - 1] := FnLabelIndex[k];
					FstrLabelString[k - 1] := FstrLabelString[k];

					//调整注册表中书签的顺序
					RegWriteInt(c_strRegLabelPath, IntToStr(i) + c_strRegLabel + IntToStr(k - 1), FnLabelIndex[k - 1]);
					RegWriteStr(c_strRegLabelPath, IntToStr(i) + c_strRegLabelString + IntToStr(k - 1), FstrLabelString[k - 1]);
				end;

				//写空记录到注册表
				k := ItemLabelInput.Count;
				FnLabelIndex[k - 1] := 0;
				FstrLabelString[k - 1] := '';

				RegWriteInt(c_strRegLabelPath, IntToStr(i) + c_strRegLabel + IntToStr(k - 1), FnLabelIndex[k - 1]);
				RegWriteStr(c_strRegLabelPath, IntToStr(i) + c_strRegLabelString + IntToStr(k - 1), FstrLabelString[k - 1]);

				//删除菜单
				ItemLabelInput.Delete(j);
				if ItemLabelInput.Count <= 0 then ItemLabelInput.Enabled := False;

				//调整书签菜单
				FboolCurrentLabel := False;
				PanelLabel.Visible := FboolCurrentLabel;
			end;
		end;
	end;
end;

//---指定书签菜单---
procedure TFormMain.OnLabelInputClick(Sender: TObject);
var i, j : integer;
begin
	if ItemLabelInput.Count <=0 then Exit;
	
	j := TMenuItem(Sender).MenuIndex;
	if FnLabelIndex[j] > g_nYeCount then
	begin  //标签指向的页数过大
		if Confirm('此书签指向一个无效页码,是否删除此书签?') then
		begin
			//调整书签设置
			for i := j + 1 to ItemLabelInput.Count - 1 do
			begin
				FnLabelIndex[i - 1] := FnLabelIndex[i];
				FstrLabelString[i - 1] := FstrLabelString[i];

				//调整注册表中书签顺序
				RegWriteInt(c_strRegLabelPath, IntToStr(FnOpenNewIndex) + c_strRegLabel + IntToStr(i - 1), FnLabelIndex[i - 1]);
				RegWriteStr(c_strRegLabelPath, IntToStr(FnOpenNewIndex) + c_strRegLabelString + IntToStr(i - 1), FstrLabelString[i - 1]);
			end;

			//写空记录到注册表
			i := ItemLabelInput.Count;
			FnLabelIndex[i - 1] := 0;
			FstrLabelString[i - 1] := '';

			RegWriteInt(c_strRegLabelPath, IntToStr(FnOpenNewIndex) + c_strRegLabel + IntToStr(i - 1), FnLabelIndex[i - 1]);
			RegWriteStr(c_strRegLabelPath, IntToStr(FnOpenNewIndex) + c_strRegLabelString + IntToStr(i - 1), FstrLabelString[i - 1]);

			//删除菜单
			ItemLabelInput.Delete(j);
		end;
	end
	else
	begin  //书签合法,转到书签的指定页
		ChangeYe(FnLabelIndex[j]);
	end;
end;

//---指定页码菜单---
procedure TFormMain.ItemInputYeClick(Sender: TObject);
begin
    //显示主窗口
	ShowMainForm;

	if g_nYeCount <= 2 then Exit;

	with TFormInputYe.Create(Self) do
	begin
		if ShowModal = mrOk then
			ChangeYe(m_nPos);  //转到指定页数
		Free;
	end;
end;

//---自动翻页菜单---
procedure TFormMain.ItemAutoPageMoveClick(Sender: TObject);
begin
	TimeAutoPageMove.Enabled := False;   //关闭自动翻页
	TimeAutoUnderLine.Enabled := False;  //关闭自动移动下划线

	g_boolAutoPageMove := not g_boolAutoPageMove;

	TimeAutoPageMove.Enabled := g_boolAutoPageMove;
	TimeAutoUnderLine.Enabled := g_boolAutoPageMove and g_boolUnderLine;

	if g_boolAutoPageMove and g_boolUnderLine then
	begin  //调整自动下划线状态
		ImageUnderLine.Left := FnPage1Left;  //下划线左位置
		FnUnderLineLocate := 1;              //下划线位置写1
		FnUnderLineNumber := 1;              //下划线行数写1
		Init_UnderLine;                      //初始化下划线
  	end;
end;

//---背景音乐菜单---
procedure TFormMain.ItemMP3Click(Sender: TObject);
begin
	if g_boolExistMP3 then
		FormMP3Play.Show;
end;

//---查看剪贴板菜单---
procedure TFormMain.ItemReadClipClick(Sender: TObject);
begin
	g_strFilename := '剪贴板';

	Init_Page;    //初始化页面
	ChangeYe(1);  //翻到第1页
end;

//---设置菜单---
procedure TFormMain.ItemSetupClick(Sender: TObject);
var nModalResult : integer;
begin
    //显示主窗口
	ShowMainForm;

	g_nBookLeft := FormMain.Left;      //窗口左位置
	g_nBookTop := FormMain.Top;        //窗口上位置
	g_nBookWidth := FormMain.Width;    //窗口宽度
	g_nBookHeight := FormMain.Height;  //窗口高度
	g_boolMax := (FormMain.WindowState = wsMaximized);  //最大化显示标志

	with TFormSetup.Create(Application) do
	begin
		nModalResult := ShowModal;
		Free;
	end;

	case nModalResult of
		mrOk :     //更改系统设置
		begin
			Init_Setup;
		end;

		mrRetry :  //恢复默认设置
		begin
			//清除注册标志
			RegWriteStr(c_strRegPath, c_strRegRegFlag, '');
			Prompt('重新启动《电子小说阅读器》即可恢复为默认设置。');
		end;
	end;
end;

//---显示书本菜单---
procedure TFormMain.ItemShowClick(Sender: TObject);
begin
	FormMain.Visible := not FormMain.Visible;
end;

//---最大化显示菜单---
procedure TFormMain.ItemMaxClick(Sender: TObject);
begin
	g_boolMax := not (FormMain.WindowState = wsMaximized);

	//显示主窗口
	ShowMainForm;

	Init_Max;
end;

//---测试自动翻页菜单---
procedure TFormMain.ItemRecordTimeClick(Sender: TObject);
begin
	if FboolTestAutoPage then
	begin  //结束翻页测试,询问测试结果是否正确
		FboolTestAutoPage := False;
		TimeRecord.Enabled := False;

		if FnPageRecordTime < 0 then FnPageRecordTime := 0;
		if FnPageRecordTime > 1000 then FnPageRecordTime := 1000;

		if not Confirm('自动翻页时间为' + IntToStr(FnPageRecordTime) + '秒?') then
		begin  //放弃
			TimeAutoPageMove.Enabled := g_boolAutoPageMove;  //恢复自动翻页
			TimeAutoUnderLine.Enabled := g_boolAutoPageMove and g_boolUnderLine;  //恢复自动下划线移动
			Exit;
		end;

		g_boolAutoPageMove := True;
		g_nAutoVal := FnPageRecordTime;

		TimeAutoPageMove.Enabled := g_boolAutoPageMove;  //自动翻页标志
		TimeAutoPageMove.Interval := g_nAutoVal * 1000;  //自动翻页时间
		TimeAutoUnderLine.Enabled := g_boolAutoPageMove and g_boolUnderLine;              //自动下划线移动标志
		TimeAutoUnderLine.Interval := Trunc(g_nAutoVal * 1000 / (FnPageNumber + 2) / 2);  //自动下划线移动时间

		//测试完成后,应先翻一页
		if (g_boolAutoPageMove) and (g_nAutoVal > 0) then
			TimeAutoPageMoveTimer(Self);
	end
	else
	begin  //开始翻页测试,保存原始设置
		FboolTestAutoPage := True;
		TimeAutoPageMove.Enabled := False;
		TimeAutoUnderLine.Enabled := False;

		FnPageRecordTime := 0;
		TimeRecord.Enabled := True;
	end;
end;

//---清除最新文件菜单---
procedure TFormMain.ItemClearNewItemClick(Sender: TObject);
var i, j, k : integer;
begin
    //显示主窗口
	ShowMainForm;

	with TFormClearNew.Create(Self) do
	begin
		m_nMax := FstrNewFileList.Count;
		if ShowModal = mrOk then
		begin
			if RadioBtnClearAll.Checked then
			begin  //全部清除
				RegEraseSection(c_strRegFilePath);   //删除文件记录
				RegEraseSection(c_strRegLabelPath);  //删除书签记录

				//更新最新文件索引、建立默认索引
				for i := 0 to c_nRegFilenameCount - 1 do
					RegWriteInt(c_strRegFilePath, c_strRegFilenameSort + IntToStr(i), i);

				//删除菜单中最新文件
				for i := 0 to FstrNewFileList.Count - 1 do
				begin
					FstrNewFileList.Delete(0);
					ItemNew.Delete(0);
				end;

                //最新文件索引写 -1
				FnOpenNewIndex := -1;
			end
			else
			begin  //部分清除
				//设置循环
				j := StrToInt(EditFromIndex.Text) - 1;
				k := StrToInt(EditToIndex.Text) - 1;

				if k < j then
				begin
					j := StrToInt(EditToIndex.Text) - 1;
					k := StrToInt(EditFromIndex.Text) - 1;
				end;

				//删除指定序号最新文件
				for i := j to k do
					DeleteNewItem(j);

				//改变最新文件索引
				if (FnOpenNewIndex >= j) and (FnOpenNewIndex <= k) then
					FnOpenNewIndex := -1;  //最新文件索引写 -1

				if FnOpenNewIndex > k then
					dec(FnOpenNewIndex, (k - j + 1));
			end;
		end;

		Free;
	end;
end;

//---关于菜单---
procedure TFormMain.ItemAboutClick(Sender: TObject);
begin
    //显示主窗口
	ShowMainForm;

	with TFormAbout.Create(Self) do
	begin
		if ShowModal = mrRetry then
		begin
			with TFormMoreName.Create(Self) do
			begin
				ShowModal;
				Free;
			end;
		end;

		Free;
	end;
end;

//---退出菜单---
procedure TFormMain.ItemQuitClick(Sender: TObject);
begin
	FormMain.Close;
end;

//---翻页菜单弹出事件---
procedure TFormMain.MenuPageMovePopup(Sender: TObject);
begin
	ItemPagePrev.Enabled := (g_nYeCurrent > 1);
	ItemPageFirst.Enabled := (g_nYeCurrent > 1);

	if g_boolSinglePage then
	begin
		ItemPageNext.Enabled := (g_nYeCurrent + FnYeOffset < g_nYeCount);
		ItemPageLast.Enabled := (g_nYeCurrent + FnYeOffset < g_nYeCount);
	end
	else
	begin
		ItemPageNext.Enabled := (g_nYeCurrent + 1 < g_nYeCount);
		ItemPageLast.Enabled := (g_nYeCurrent + 1 < g_nYeCount);
	end;

	ItemInputYe1.Enabled := (g_nYeCount > 2);

	ItemFilePrev.Enabled := (FnOpenNewIndex > 0);
	ItemFileNext.Enabled := (FnOpenNewIndex > 0) and (FnOpenNewIndex < FstrNewFileList.Count - 1);
end;

//---向前翻页菜单---
procedure TFormMain.ItemPagePrevClick(Sender: TObject);
begin
	if FboolEdit then Exit;

	if g_boolSinglePage then
	begin
		if (g_nYeCurrent + FnYeOffset >= 2) then
			ChangeYe(g_nYeCurrent + FnYeOffset - 1);
	end
	else
	begin
		if (g_nYeCurrent >= 3) then
			ChangeYe(g_nYeCurrent - 2);
	end;
end;

//---向后翻页菜单---
procedure TFormMain.ItemPageNextClick(Sender: TObject);
begin
	if FboolEdit then Exit;

	if g_boolSinglePage then
	begin
		if (g_nYeCurrent + FnYeOffset + 1 <= g_nYeCount) then
			ChangeYe(g_nYeCurrent + FnYeOffset + 1);
	end
	else
	begin
		if (g_nYeCurrent + 2 <= g_nYeCount) then
			ChangeYe(g_nYeCurrent + 2);
	end;
end;

//---翻到第一页菜单---
procedure TFormMain.ItemPageFirstClick(Sender: TObject);
begin
	if FboolEdit then Exit;
	ChangeYe(1);
end;

//---翻到最后一页---
procedure TFormMain.ItemPageLastClick(Sender: TObject);
begin
	if FboolEdit then Exit;
	ChangeYe(g_nYeCount);
end;

//---上一篇小说菜单---
procedure TFormMain.ItemFilePrevClick(Sender: TObject);
begin
	if FnOpenNewIndex > 0 then
		OnItemNewFileClick(ItemNew.Items[FnOpenNewIndex - 1]);
end;

//---下一篇小说菜单---
procedure TFormMain.ItemFileNextClick(Sender: TObject);
begin
	if (FnOpenNewIndex >= 0) and (FnOpenNewIndex < FstrNewFileList.Count - 1) then
		OnItemNewFileClick(ItemNew.Items[FnOpenNewIndex + 1]);
end;

//---定时提醒菜单---
procedure TFormMain.ItemShowAlarmClick(Sender: TObject);
begin
	with TFormAlarm.Create(Self) do
	begin
		ShowModal;
		Free;
	end;
end;

//---不显示时间菜单---
procedure TFormMain.ItemShowTimeClick(Sender: TObject);
begin
	ShowTime(False);
end;

//---保存修改---
procedure TFormMain.ItemSaveEditClick(Sender: TObject);

⌨️ 快捷键说明

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