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

📄 main.pas

📁 一个电子小说阅读器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
		if not isFileExist(strZipSubFilename, strZipFilename) then
			Exit;

		//判断是否改变最新文件菜单顺序
		if g_boolChangeItem then
		begin
			if not OpenItemFile(strFilename) then Exit;
			Sender := ItemNew.Items[0];
		end;

		//打开文件
		if OpenFile(strZipSubFilename) then
			InitOpenFile;

        //退出
		Exit;
	end;

	//判断文件是否存在
	if not isFileExist(strFilename, '') then Exit;

	//判断是否改变最新文件菜单顺序
	if g_boolChangeItem then
	begin
		if not OpenItemFile(strFilename) then Exit;
		Sender := ItemNew.Items[0];
	end;

	//判断是否是ZIP文件
	if LowerCase(ExtractFileExt(strFilename)) = '.zip' then
	begin  //打开ZIP文件,选择需要解压的文件
		//建立用于传送解压文件的文件列表
		strZipFileList := TStringList.Create;
		strZipFileList.Clear;

		//浏览需要解压的文件
		if ShowSelZipFile(strFilename, strZipFileList) then
		begin
			//刷新主窗口
			UpdateMainForm;

			//设置参数
			FboolOpenFileFlag := False;  //写标志:没有正确打开文件
			i := 0;

            //打开文件
			while (i <= strZipFileList.Count - 1) do
			begin
				OpenItemFile(strZipFileList.Strings[i]);
				inc(i);
			end;

			//若成功解压文件,则打开第一个文件(解压出来的文件)
			if FboolOpenFileFlag then
				OnItemNewFileClick(ItemNew.Items[0]);
		end;

		//释放用于传送解压文件的文件列表
		strZipFileList.Free;

		//退出
		Exit;
	end;

	//打开一般文件
	if OpenFile(strFilename) then
		InitOpenFile;
end;

//---保存书库文件菜单---
procedure TFormMain.ItemLibClick(Sender: TObject);
var i : integer;
	s : string;
begin
    //显示主窗口
	ShowMainForm;

    //没有最新文件则退出
	if ItemNew.Count <= 2 then Exit;

	//打开对话框,错误则退出
	with FDlgSaveLibFile do
	begin
		if pos('|', g_strFilename) > 0 then
			InitialDir := ExtractFilePath(Copy(g_strFilename, 1, pos('|', g_strFilename) - 1))
		else
			InitialDir := ExtractFilePath(g_strFilename);

		if not Execute then
			Exit;
	end;

	//获得文件名
	s := FDlgSaveLibFile.Filename;

	//保存书库文件
	try
		AssignFile(FpLibFile, s);
		Rewrite(FpLibFile);

		//初始化显示信息
		InitShowMess(0, ItemNew.Count - 2, '生成书库文件');

		for i := ItemNew.Count - 3 downto 0 do
		begin
			//显示完成度信息
			ShowMessPos(ItemNew.Count - 2 - i);

			//写文件
			Writeln(FpLibFile, GetIndexFilename(i));  //保存菜单文件名
		end;
	except
		Alert('生成书库文件 ' + s + ' 失败!' + c_strReturn + '请检查磁盘是否错误。');
	end;

	//关闭文件
	CloseFile(FpLibFile);

	//关闭显示信息
	CloseShowMess;
end;

//---文件处理菜单---
procedure TFormMain.ItemBIG5Click(Sender: TObject);
var s : string;
begin
	s := TMenuItem(Sender).Name;

	if s = 'ItemBIG5'      then g_boolBIG5 := not g_boolBIG5;
	if s = 'ItemGB'        then g_boolGB := not g_boolGB;
	if s = 'ItemHtml'      then g_boolHtml := not g_boolHtml;
	if s = 'ItemChap'      then g_boolChap := not g_boolChap;
	if s = 'ItemHangD'     then g_boolHangD := not g_boolHangD;
	if s = 'ItemUnderLine' then g_boolUnderLine := not g_boolUnderLine;

	ImageUnderLine.Visible := g_boolUnderLine;

	if s = 'ItemUnderLine' then
		Exit;

	if s <> 'ItemHangD' then
		Init_Page_Do;        //处理页面

	//初始化
	Init_Page;               //初始化页面
	ChangeYe(g_nYeCurrent);  //翻到指定页
end;

//---编辑菜单---
procedure TFormMain.ItemEditClick(Sender: TObject);
begin
	//显示主窗口
	ShowMainForm;

	FboolEdit := True;  //写标志:处于编辑状态

	//屏蔽原系统的部分功能
	FormMain.PopupMenu := MenuEdit;
	FormMain.KeyPreview := False;

	ImagePagePrev.Enabled := False;
	ImagePageNext.Enabled := False;

    ImageUnderLine.Visible := False;
	TimeAutoPageMove.Enabled := False;
	TimeAutoUnderLine.Enabled := False;

	//调整编辑框1
	with FMemoPageEdit[1] do
	begin
		Left := FnPage1Left;
		Top := FnPageTop - 3;
		Width := FnPageWidth;
		Height := FnPageHeight + 3;
		Font := g_PageFont;
		Visible := True;
	end;

	//调整编辑框2
	with FMemoPageEdit[2] do
	begin
		Left := FnPage2Left - 5;
		Top := FnPageTop - 3;
		Width := FnPageWidth;
		Height := FnPageHeight + 3;
		Font := g_PageFont;
		Visible := True;
	end;

	//复制文字到编辑框
	Init_Page_String;
	FMemoPageEdit[1].SetFocus;
end;

//---刷新显示菜单---
procedure TFormMain.ItemRefreshClick(Sender: TObject);
begin
	//刷新文件
	if (g_strFilename = '') or (g_strFilename = '剪贴板') then
	begin  //刷新说明文件
		Init_Page;
	end
	else if FnOpenNewIndex >= 0 then
	begin  //刷新小说文件
		OnItemNewFileClick(ItemNew.Items[FnOpenNewIndex])
	end
	else
	begin  //重新打开文件
		FboolOpenFileFlag := False;   //写标志:没有正确打开文件
		OpenItemFile(g_strFilename);  //打开菜单文件(仅把文件写入菜单)

		//若正确打开文件,则打开参数文件中第一个文件
		if FboolOpenFileFlag then
		begin
			OnItemNewFileClick(ItemNew.Items[0]);
		end;
	end;

	//翻到当前页码
	ChangeYe(g_nYeCurrent);
end;

//---查找菜单---
procedure TFormMain.ItemSearchClick(Sender: TObject);
begin
    //显示主窗口
	ShowMainForm;

	if (FormSearch.ShowModal = mrOk) and (FormSearch.EditFindText.Text <> '') then
		DoSearch(FormSearch.EditFindText.Text, FormSearch.CheckBoxCaps.Checked);
end;

//---再查找菜单---
procedure TFormMain.ItemSearchNextClick(Sender: TObject);
begin
    //显示主窗口
	ShowMainForm;

	if FormSearch.EditFindText.Text = '' then
		ItemSearch.Click
	else
		DoSearch(FormSearch.EditFindText.Text, FormSearch.CheckBoxCaps.Checked);
end;

//---添加书签菜单---
procedure TFormMain.ItemAddLabelClick(Sender: TObject);
var i, j : integer;
begin
    //显示主窗口
	ShowMainForm;

	//当前是说明文件或有书签的话,就退出
	if (g_strFilename = '') or (g_strFilename = '剪贴板') or (FboolCurrentLabel) then Exit;

	//检测剩余书签数量
	j := ItemLabelInput.Count;
	if j >= c_nRegLabelCount then
	begin
		Prompt('没有空余书签可供添加,请删除部分书签。');
		Exit;
	end;

	with TFormLabelInput.Create(Self) do
	begin
		Caption := '添加书签';
		EditLabelInput.Text := '第' + IntToStr(g_nYeCurrent) + '页';

		if ShowModal = mrOk then
		begin
			//初始化书签信息
			FnLabelIndex[j] := g_nYeCurrent;
			FstrLabelString[j] := EditLabelInput.Text;

			//建立书签子菜单
			FItemAddLabel := TMenuItem.Create(Self);
			FItemAddLabel.Caption := FstrLabelString[j];
			FItemAddLabel.OnClick := OnLabelInputClick;

			//调整书签菜单
			ItemLabelInput.Add(FItemAddLabel);  //添加书签菜单

			//将书签信息添加入注册表
			//获得最新文件索引
			i := RegReadInt(c_strRegFilePath, c_strRegFilenameSort + IntToStr(FnOpenNewIndex), -1);

			//写入书签信息
			RegWriteInt(c_strRegLabelPath, IntToStr(i) + c_strRegLabel + IntToStr(j), FnLabelIndex[j]);
			RegWriteStr(c_strRegLabelPath, IntToStr(i) + c_strRegLabelString + IntToStr(j), FstrLabelString[j]);

			//调整书签设置
			PanelLabel.Hint := FstrLabelString[j];
			ImageLabel.Hint := FstrLabelString[j];
			FboolCurrentLabel := True;
			PanelLabel.Visible := FboolCurrentLabel;
		end;

		Free;
	end;
end;

//---修改书签菜单---
procedure TFormMain.ItemEditLabelClick(Sender: TObject);
var i : integer;
begin
    //显示主窗口
	ShowMainForm;

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

	//检测书签
	for i :=  0 to ItemLabelInput.Count - 1 do
	begin
		if (g_nYeCurrent = FnLabelIndex[i]) or (g_nYeCurrent + 1 = FnLabelIndex[i]) then
		begin  //修改书签
			with TFormLabelInput.Create(Self) do
			begin
				Caption := '修改书签';
				EditLabelInput.Text := FstrLabelString[i];

				if ShowModal = mrOk then
				begin
					//调整书签信息
					FstrLabelString[i] := EditLabelInput.Text;
					ItemLabelInput.Items[i].Caption := FstrLabelString[i];

					//将书签信息添加入注册表
					RegWriteStr(c_strRegLabelPath,
								IntToStr(FnOpenNewIndex) + c_strRegLabelString + IntToStr(i),
								FstrLabelString[i]);

					//调整书签按钮设置
					PanelLabel.Hint := FstrLabelString[i];
					ImageLabel.Hint := FstrLabelString[i];
				end;

				Free;
			end;
		end;
	end;
end;

//---删除书签菜单---
procedure TFormMain.ItemDeleteLabelClick(Sender: TObject);
var i, j, k : integer;
begin
    //显示主窗口
	ShowMainForm;

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

	//检测书签
	for j :=  0 to ItemLabelInput.Count - 1 do
	begin
		if (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;

⌨️ 快捷键说明

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