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

📄 main.pas

📁 编写
💻 PAS
📖 第 1 页 / 共 5 页
字号:
       Height:=1;

       f_main.Update;

       Canvas.Pen.Color:=UnderLine_Color;
       Canvas.Pen.Width:=UnderLine_Thick;
       Canvas.MoveTo(0,0);
       Canvas.LineTo(Page_Width_v,0);
       Visible:=Pop_UnderLine.Checked;
  end;
  Init_UnderLine;

  //调整自动下划线状态
  Auto_UnderLine.Enabled:=Auto_Page_Move.Enabled and Pop_UnderLine.Checked;
  if Auto_Page_Move.Interval=0 then
     Auto_UnderLine.Interval:=0
  else
     Auto_UnderLine.Interval:=trunc(Auto_Page_Move.Interval/(Page_Number+2)/2);

  //调整自动卷行
  Auto_Scroll_Count:=0;

  //关闭显示信息
  f_mess.Close;
end;

procedure Tf_main.Init_Page_String();
var TextRead_Page_Count_1 : string;  //写入页面1的内容
    TextRead_Page_Count_2 : string;  //写入页面2的内容
begin
  //清除写入页面内容
  TextRead_Page_Count_1:='';
  TextRead_Page_Count_2:='';

  //计算页面起始行数
  Page_Line_Number:=(ye_Current_v-1)*Page_Number;
  Page_Line_Number:=Page_Line_Number+Auto_Scroll_Count;  //调整自动卷行后的行数

  //读文本框,写入页面变量
  //写入页面1变量
  for i:=1 to Page_Number do
  begin
       while (Page_Line_Number+i>Count_Line_Number) and (CurrentTextRead<CountTextRead) do
       begin  //所读的行数超过目前文本框总行数,则调整文本框状态
            inc(CurrentTextRead);  //当前文本框数+1
            Count_Line_Number:=Count_Line_Number+TextRead[CurrentTextRead].Lines.Count;  //调整目前文本框总行数
       end;

       while (Page_Line_Number+i<=Count_Line_Number-TextRead[CurrentTextRead].Lines.Count) and (CurrentTextRead>1) do
       begin  //所读的行数少于目前文本框总行数,则调整文本框状态
            Count_Line_Number:=Count_Line_Number-TextRead[CurrentTextRead].Lines.Count;  //调整目前文本框总行数
            dec(CurrentTextRead);  //当前文本框数-1
       end;

       //换算文本框行数
       j:=Page_Line_Number+i-1-(Count_Line_Number-TextRead[CurrentTextRead].Lines.Count);
       TextRead_Page_Count_1:=TextRead_Page_Count_1+TextRead[CurrentTextRead].Lines[j]+#13+#10;
       if (Pop_HangD.Checked) and (f_main.PopupMenu<>nil) then
          TextRead_Page_Count_1:=TextRead_Page_Count_1+#13+#10;
  end;

  //写入页面2变量
  for i:=Page_Number+1 to 2*Page_Number do
  begin
       while (Page_Line_Number+i>Count_Line_Number) and (CurrentTextRead<CountTextRead) do
       begin  //所读的行数超过目前文本框总行数,则调整文本框状态
            inc(CurrentTextRead);  //当前文本框数+1
            Count_Line_Number:=Count_Line_Number+TextRead[CurrentTextRead].Lines.Count;  //调整目前文本框总行数
         end;

       while (Page_Line_Number+i<=Count_Line_Number-TextRead[CurrentTextRead].Lines.Count) and (CurrentTextRead>1) do
       begin  //所读的行数少于目前文本框总行数,则调整文本框状态
            Count_Line_Number:=Count_Line_Number-TextRead[CurrentTextRead].Lines.Count;  //调整目前文本框总行数
            dec(CurrentTextRead);  //当前文本框数-1
       end;

       //换算文本框行数
       j:=Page_Line_Number+i-1-(Count_Line_Number-TextRead[CurrentTextRead].Lines.Count);
       TextRead_Page_Count_2:=TextRead_Page_Count_2+TextRead[CurrentTextRead].Lines[j]+#13+#10;
       if (Pop_HangD.Checked) and (f_main.PopupMenu<>nil) then
          TextRead_Page_Count_2:=TextRead_Page_Count_2+#13+#10;
  end;

  if Auto_Scroll_Count>0 then
  begin  //向后卷行,处理页面
  end;

  if Auto_Scroll_Count<0 then
  begin  //向前卷行,处理页面
  end;

  if Auto_Scroll_Count=0 then
  begin  //不卷行,处理页面
  end;

  if f_main.PopupMenu<>nil then
  begin
       Page_1.Caption:=TextRead_Page_Count_1;
       Page_2.Caption:=TextRead_Page_Count_2;
  end
  else
  begin
       Page_Edit[1].Text:=TextRead_Page_Count_1;
       Page_Edit[2].Text:=TextRead_Page_Count_2;
  end;       

  //调整书签菜单
  Pop_Label_Add.Enabled:=False;
  Pop_Label_Edit.Enabled:=False;
  Pop_Label_Delete.Enabled:=False;
  label_image.Visible:=False;

  if (filename<>'') and (filename<>'说明文件') and (filename<>'剪贴板') then
  begin  //不是说明文件、剪贴板,则调整书签菜单
       //初始化书签菜单
       j:=0;
       Pop_Label_Add.Enabled:=True;
       Pop_Label_Edit.Enabled:=False;
       Pop_Label_Delete.Enabled:=False;
       label_image.Visible:=False;

       //取消默认书签
       if Pop_Label_Input.Enabled then
       begin
            Pop_Label_Input.Items[0].Default:=True;
            Pop_Label_Input.Items[0].Default:=False;
       end;

       //检测书签
       for j:=0 to Pop_Label_Input.Count-1 do
       begin
            if (ye_Current_v=Label_Indexv[j]) or (ye_Current_v+1=Label_Indexv[j]) then
            begin  //当前页有书签,更新书签菜单
                 Pop_Label_Add.Enabled:=False;
                 Pop_Label_Edit.Enabled:=True;
                 Pop_Label_Delete.Enabled:=True;
                 Pop_Label_Input.Items[j].Default:=True;

                 label_image.Hint:=Label_Stringv[j];
                 label_image_Pic.Hint:=Label_Stringv[j];
                 label_image.Visible:=True;
                 break;
            end;
       end;
  end;
end;

procedure Tf_main.Init_ye();
var x,y : integer;  //页码位置
begin
  //调整字体
  ye_1_be.Font:=yeFont.Font;
  ye_1.Font:=yeFont.Font;
  ye_1_af.Font:=yeFont.Font;
  ye_1_test.Font:=yeFont.Font;

  ye_2_be.Font:=yeFont.Font;
  ye_2.Font:=yeFont.Font;
  ye_2_af.Font:=yeFont.Font;
  ye_2_test.Font:=yeFont.Font;

  //调整页码位置参数
  ye_1_loc:=f_setup.ye_1_loc.Caption;
  ye_2_loc:=f_setup.ye_2_loc.Caption;

  //计算页码位置变量
  ye_loc_Left_v:=trunc(Width_av*ye_loc_Left);
  ye_loc_Top_v:=trunc(Width_av*ye_loc_Top);

  //调整页码1
  ye_1.Caption:=IntToStr(ye_Current_v);
  ye_1_test.Caption:=ye_1_be.Caption+ye_1.Caption+ye_1_af.Caption;

  //计算页码1位置1变量
  case ye_1_loc[1] of
    '1' : //靠左
          x:=Page_Move_Width+ye_loc_Left_v;
    '2' : //中间
          x:=trunc((Book_Width_v/2-Page_Move_Width)/2-ye_1_test.Width/2+Page_Move_Width);
    '3' : //靠右
          x:=trunc(Book_Width_v/2-ye_Loc_Left_v-ye_1_test.Width);
  end;

  //计算页码1位置2变量
  case ye_1_loc[2] of
    '1' : //靠上
          y:=ye_loc_Top_v;
    '2' : //靠下
          y:=trunc(Book_Height_v-ye_Loc_Top_v-ye_1_test.Height);
  end;

  //调整页码1位置
  ye_1_be.Left:=x;
  ye_1.Left:=ye_1_be.Left+ye_1_be.Width;
  ye_1_af.Left:=ye_1.Left+ye_1.Width;

  ye_1_be.Top:=y;
  ye_1.Top:=y;
  ye_1_af.Top:=y;

  if f_setup.Check_ye_View.Checked then
  begin  //显示页码1
       ye_1_be.Visible:=True;
       ye_1_af.Visible:=True;
       ye_1.Visible:=True;
  end
  else
  begin  //隐藏页码1
       ye_1_be.Visible:=False;
       ye_1_af.Visible:=False;
       ye_1.Visible:=False;
  end;       

  //隐藏页码2
  ye_2_be.Visible:=False;
  ye_2_af.Visible:=False;
  ye_2.Visible:=False;

  //调整页码2
  if ye_Current_v+1<=ye_Count_v then
  begin  //存在页码2,则调整页码2
       ye_2.Caption:=IntToStr(ye_Current_v+1);
       ye_2_test.Caption:=ye_2_be.Caption+ye_2.Caption+ye_2_af.Caption;

       //计算页码2位置1变量
       case ye_2_loc[1] of
         '1' : //靠左
               x:=trunc(Book_Width_v/2+ye_Loc_Left_v);
         '2' : //中间
               x:=trunc((Book_Width_v/2-Page_Move_Width)/2-ye_2_test.Width/2+Book_Width_v/2);
         '3' : //靠右
               x:=trunc(Book_Width_v-Page_Move_Width-ye_Loc_Left_v-ye_2_test.Width);
       end;

       //计算页码2位置2变量
       case ye_2_loc[2] of
         '1' : //靠上
               y:=ye_loc_Top_v;
         '2' : //靠下
               y:=trunc(Book_Height_v-ye_Loc_Top_v-ye_2_test.Height);
       end;

       //调整页码2位置
       ye_2_be.Left:=x;
       ye_2.Left:=ye_2_be.Left+ye_2_be.Width;
       ye_2_af.Left:=ye_2.Left+ye_2.Width;

       ye_2_be.Top:=y;
       ye_2.Top:=y;
       ye_2_af.Top:=y;

       if f_setup.Check_ye_View.Checked then
       begin  //显示页码2
            ye_2_be.Visible:=True;
            ye_2_af.Visible:=True;
            ye_2.Visible:=True;
       end;
  end;
end;

procedure Tf_main.Init_UnderLine();
begin
  //调整下划线位置
  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+40 then
     f_main.Height:=3*Book_Button_Width_v+40;

  //调整窗口位置、大小变量
  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
  //打开对话框,错误则退出
  if not OpenTextFile.Execute then Exit;

  f_main.Update;

  //打开参数文件
  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  //正确打开文件,则打开参数文件中第一个文件
       OpenFirstFile;
  end;
end;

procedure Tf_main.OpenFile();
var zipFileName : string;
	subFileName : string;
	cFileIndex : integer;
    OpenZipIndex : integer;
begin
  pZipFileName:='';

  cFileIndex:=pos('|',pFileName);
  if cFileIndex>0 then
  begin  //打开zip文件中的子文件
	   //复制zip文件名
	   pZipFileName:=pFileName;
	   
	   //分割zip文件和子文件
	   zipFileN

⌨️ 快捷键说明

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