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

📄 main.pas

📁 源代码竟供大家参考
💻 PAS
📖 第 1 页 / 共 5 页
字号:
  //调整下划线位置
  if pop_HangD.Checked then  //行距加倍,则下划线多移一行
     UnderLine.Top:=Page_Top_v-(2*UnderLine_Number-1)*PageFont.Font.Height+UnderLine_Offset
  else
     UnderLine.Top:=Page_Top_v-UnderLine_Number*PageFont.Font.Height+UnderLine_Offset;
end;

procedure Tf_main.FormResize(Sender: TObject);
begin
  //判断是否允许改变窗口大小
  if Book_Resize_Flag then exit;

  //判断窗口不能过小
  if f_main.Width<2*Book_Button_Width_v+100 then
     f_main.Width:=2*Book_Button_Width_v+100;
  if f_main.Height<3*Book_Button_Width_v+50 then
     f_main.Height:=3*Book_Button_Width_v+50;

  //调整窗口位置、大小变量
  Book_Left_v:=f_main.Left;
  Book_Top_v:=f_main.Top;
  Book_Width_v:=f_main.Width;
  Book_Height_v:=f_main.Height;

  if xtsub then exit;  //若为系统调用,则退出
  Init_Window;         //初始化窗口
  Init_Page;           //初始化页面
  Init_Page_String;    //初始化页面内容
  Init_ye;             //初始化页码
end;

procedure Tf_main.pop_openClick(Sender: TObject);
var OpenFileIndex : integer;     //打开文件索引
    OpenFileCount : Longint;     //打开文件总数
begin
  f_main.Enabled:=False;

  //打开对话框,错误则退出
  if not OpenTextFile.Execute then
  begin
       f_main.Enabled:=True;
       Exit;
  end;

  f_main.Enabled:=True;

  //打开参数文件
  Openfile_Flag:=False;  //写标志:没有正确打开文件
  OpenFileCount:=OpenTextFile.Files.Count;  //获得总文件数
  if OpenFileCount>Reg_Filename_Count then
     OpenFileCount:=Reg_Filename_Count;

  Open_File_Count:=0;    //文件计数写0
  Open_blf_File:=False;  //写标志:不是打开书库文件

  for OpenFileIndex:=OpenFileCount-1 downto 0 do
  begin
       pFileName:=OpenTextFile.Files.Strings[OpenFileIndex];  //菜单文件名
       Open_Param_file(pFileName);                            //打开参数文件
  end;

  //判断是否打开了书库文件,并且删除原最新菜单
  if (Open_blf_File) and (f_setup.Check_ClearNew.Checked) then
     for OpenFileIndex:=Open_File_Count to pop_new.Count-1-2 do
         Delete_NewItem(Open_File_Count);

  if Openfile_Flag then
  begin  //正确打开文件,则打开参数文件中第一个文件
       OpenNew_Flag:=True;                   //写标志:打开最新文件标志
       pOpenNew_Index:=0;                    //参数文件索引写0
       pFilename:=pop_new.Items[0].Caption;  //参数文件名
       OpenFile;                             //打开文件
  end;
end;

procedure Tf_main.OpenFile();
var NewFile_Index : integer;  //写入新文件的索引
begin
  //格式化菜单文件名
  pFilename:=LowerCase(pFileName);

  //以只读形式打开文件
  if FileExists(pFileName) then
  begin  //文件存在,则打开文件
       AssignFile(fp,pFilename);
       FileMode:=0;
       Reset(fp,1);
  end
  else
  begin  //文件不存在,显示打开文件错误
       f_main.Enabled:=False;
       Application.MessageBox(PChar('打开文件 '+pFileName+' 失败!'+#13+#10+'请检查文件是否存在。'), '错误', Mb_OK);
       f_main.Enabled:=True;
       OpenNew_Flag:=False;  //写标志:不是打开最新文件
       OpenNew_parm:=False;  //写标志:不是打开参数文件
       OpenNew_Item:=False;  //写标志:不是仅假如菜单
       Exit;
  end;

  //获得文件长度
  FileLength:=FileSize(fp);
  if FileLength>(MaxTextRead-1)*BufSize then
  begin  //文件太大,显示文件太大错误
       f_main.Enabled:=False;
       Application.MessageBox(PChar('文件 '+pFileName+' 太大,无法打开!'), '错误', Mb_OK);
       CloseFile(fp);  //关闭文件
       f_main.Enabled:=True;
       OpenNew_Flag:=False;  //写标志:不是打开最新文件
       OpenNew_parm:=False;  //写标志:不是打开参数文件
       OpenNew_Item:=False;  //写标志:不是仅假如菜单
       Exit;
  end;

  //调整参数
  filename:=pfilename;            //调整文件名
  OpenNew_Index:=pOpenNew_Index;  //调整打开的文件索引
  Openfile_Flag:=True;            //写标志:正确打开文件
  inc(Open_File_Count);           //文件计数+1

  //调整参数文件索引
  if OpenNew_parm then
     OpenNew_Index:=Reg_Filename_Count-1;

  //获得写入新文件的索引
  //打开注册表
  Reg_ini:=TRegIniFile.Create(Reg_Path);
  Reg_ini.RootKey:=HKEY_LOCAL_MACHINE;

  //获得索引
  NewFile_Index:=Reg_ini.ReadInteger(Reg_File_Path,Reg_Filename_Sort+IntToStr(OpenNew_Index),0);

  //关闭注册表
  Reg_ini.Free;

  //清除书签信息
  for j:= 0 to Reg_Label_Count-1 do
  begin
       Label_Indexv[j]:=0;    //书签索引写0
       Label_Stringv[j]:='';  //书签标志写''
  end;

  //写入最新文件菜单,调整书签
  //打开注册表
  Reg_ini:=TRegIniFile.Create(Reg_Path);
  Reg_ini.RootKey:=HKEY_LOCAL_MACHINE;

  if (OpenNew_Flag) and (not OpenNew_parm) then
  begin
       //获得最新文件索引
       k:=Reg_ini.ReadInteger(Reg_File_Path,Reg_Filename_Sort+IntToStr(OpenNew_Index),-1);

       //获得当前参数文件的书签信息
       for j:= 0 to Reg_Label_Count-1 do
       begin
            Label_Indexv[j]:=Reg_ini.ReadInteger(Reg_Label_Path,IntToStr(k)+Reg_Label+IntToStr(j),0);
            Label_Stringv[j]:=Reg_ini.ReadString(Reg_Label_Path,IntToStr(k)+Reg_Label_String+IntToStr(j),'');
       end;

       if f_setup.Check_Item_Change.Checked then
          pop_new.Delete(OpenNew_Index);  //若改变最新菜单顺序,则删除原菜单
  end
  else
  begin
       //判断参数文件是否和最新文件相同
       j:=0;
       while (j<=pop_new.Count-1-2) do
       begin
            //判断是否存在相同的最新文件
            if Lowercase(pfilename)=LowerCase(pop_new.Items[j].Caption) then
            begin  //已经存在相同文件
                 OpenNew_Index:=j;  //参数文件索引写j

                 //获得最新文件索引
                 NewFile_Index:=Reg_ini.ReadInteger(Reg_File_Path,Reg_Filename_Sort+IntToStr(OpenNew_Index),-1);

                 //判断是否保留书签信息
                 if not f_setup.Check_ClearLab.Checked then
                 begin  //保留书签信息
                     //获得当前参数文件的书签信息
                     for j:= 0 to Reg_Label_Count-1 do
                     begin
                          Label_Indexv[j]:=Reg_ini.ReadInteger(Reg_Label_Path,IntToStr(NewFile_Index)+Reg_Label+IntToStr(j),0);
                          Label_Stringv[j]:=Reg_ini.ReadString(Reg_Label_Path,IntToStr(NewFile_Index)+Reg_Label_String+IntToStr(j),'');
                     end;
                 end;
                 
                 pop_new.Delete(OpenNew_Index);  //删除原菜单
                 break;
            end;
            inc(j);  //下一个最新文件
       end;
  end;

  //关闭注册表
  Reg_ini.Free;

  //调整最新文件菜单
  if not ((OpenNew_Flag) and (not f_setup.Check_Item_Change.Checked)) then
  begin  //改变最新文件菜单顺序
       //加入最新文件菜单
       if pop_new.Count-2>=Reg_Filename_Count then
          pop_new.Delete(Reg_Filename_Count-1);  //若最新文件菜单中文件过多,则删除最后一个

       //建立最新文件子菜单
       AddNew:=TMenuItem.Create(Self);
       AddNew.Caption:=pfilename;
       AddNew.OnClick:=OpenNewClick;

       //更改最新文件菜单设置
       pop_new.Insert(0,AddNew);    //插入子菜单
       pop_new.Enabled:=True;       //允许使用下一级子菜单
       pop_clearnew.Enabled:=True;  //允许删除最新记录

       //将最新文件写入注册表
       //打开注册表
       Reg_ini := TRegIniFile.Create(Reg_Path);
       Reg_ini.RootKey:=HKEY_LOCAL_MACHINE;

       //将其余最新文件下移一个
       For i:= OpenNew_Index-1 Downto 0 do
       begin
            k:=Reg_ini.ReadInteger(Reg_File_Path,Reg_Filename_Sort+IntToStr(i),0);
            Reg_ini.WriteInteger(Reg_File_Path,Reg_Filename_Sort+IntToStr(i+1),k);
       end;

       //写入注册表最新文件
       Reg_ini.WriteInteger(Reg_File_Path,Reg_Filename_Sort+'0',NewFile_Index);
       Reg_ini.WriteString(Reg_File_Path,Reg_Filename+IntToStr(NewFile_Index),pfilename);

       //写入注册表最新文件的书签
       for j:=0 to Reg_Label_Count-1 do
       begin
            Reg_ini.WriteInteger(Reg_Label_Path,IntToStr(NewFile_Index)+Reg_Label+IntToStr(j),Label_Indexv[j]);
            Reg_ini.WriteString(Reg_Label_Path,IntToStr(NewFile_Index)+Reg_Label_String+IntToStr(j),Label_Stringv[j]);
       end;

       //关闭注册表
       Reg_ini.Free;

       //写最新文件索引为0
       OpenNew_Index:=0;
  end;

  //将打开文件标志归位
  OpenNew_Flag:=False;  //写标志:不是打开最新文件
  OpenNew_parm:=False;  //写标志:不是打开参数文件

  //仅加入菜单
  if OpenNew_Item then
  begin  //若仅加入菜单,则退出
       OpenNew_Item:=False;  //写标志:不是仅假如菜单
       CloseFile(fp);        //关闭文件
       exit;
  end;

  //读文件
  //计算剩余文件长
  LeftLength:=FileLength-trunc(FileLength/BufSize)*BufSize;

  //清除缓冲内容
  for i:=1 to BufSize do
      DataBuf[i]:=#0;

  //计算总文本框数
  CountTextRead:=trunc(FileLength/BufSize);

  //显示信息
  f_mess.ShowMess.Caption:='打开文件';
  f_mess.compper.Min:=0;
  f_mess.compper.Position:=f_mess.compper.Min;
  if LeftLength<>0 then
     f_mess.compper.Max:=CountTextRead+1
  else
     f_mess.compper.Max:=CountTextRead;
  f_mess.show;
  Application.ProcessMessages;

  for i:= 1 to CountTextRead do
  begin
       //显示完成度信息
       f_mess.compper.Position:=i;
       Application.ProcessMessages;

       //读入文件
       BlockRead(fp,DataBuf,SizeOf(DataBuf),Readnum);
       TextRead_Bak[i]:=DataBuf;
  end;

  //清除缓冲内容
  for i:=1 to BufSize do
      DataBuf[i]:=#0;

  //读剩余文件内容
  if LeftLength<>0 then
  begin
       inc(CountTextRead);
       //显示完成度信息
       f_mess.compper.Position:=CountTextRead;
       Application.ProcessMessages;

       //读入剩余文件
       BlockRead(fp,DataBuf,SizeOf(DataBuf),Readnum);
       TextRead_Bak[CountTextRead]:=DataBuf;

       //删除多余内容
       Delete(TextRead_Bak[CountTextRead],LeftLength+1,SizeOf(DataBuf)-LeftLength);
  end;

  //关闭文件
  CloseFile(fp);

  //关闭显示信息
  f_mess.Close;
  Application.ProcessMessages;

  //处理原始文本框
  //显示信息
  f_mess.ShowMess.Caption:='处理文件';
  f_mess.compper.Position:=f_mess.compper.Min;
  f_mess.show;
  Application.ProcessMessages;

  //处理原始文本框
  for i:=1 to CountTextRead do
  begin
       //显示完成度信息
       f_mess.compper.Position:=i;
       Application.ProcessMessages;

       EndChange:=False;  //写标志:没有处理完成
       ChangeIndex:=1;    //从第1位开始搜索
       while not EndChange do
       begin
            //搜索错误的换行
            L:=Length(TextRead_Bak[i]);
            j:=pos(#10,copy(TextRead_Bak[i],ChangeIndex,l-ChangeIndex+1));
            k:=pos(#13,copy(TextRead_Bak[i],ChangeIndex,l-ChangeIndex+1));
            if ((j=0) and (k=0)) or (ChangeIndex>l) then
               EndChange:=True  //结束搜索
            else
            begin
                 if ((j<k)

⌨️ 快捷键说明

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