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

📄 20001121001.htm

📁 C++Builder教学大全
💻 HTM
字号:
<HTML>

<HEAD>

 

<TITLE>读书软件做自己的</TITLE>



<META content="MSHTML 5.00.2314.1000" name=GENERATOR>

</HEAD>

<BODY aLink=#FF0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0 

vLink=#990099>



<div align="center">

  <table width="744" border="0" cellspacing="0" cellpadding="0" height="76">

    <tr> 

      <td> 

        <p align=center><strong><font size="3"><br>

          读书软件做自己的<br>

          </font></strong></p>

           不知各位对E_book的读书效果是否感兴趣,它是用vb做的,其实在c++builder中也可以很轻松的实现类似效果。现在让我们step 

        by step 吧!<br>

        <br>

          1)新建工程。单元存盘为"read.cpp"<br>

        <br>

          加入一个popupmenu; 窗体属性设置如下<br>

        <br>

          Name: MainForm;<br>

        <br>

          AutoScroll:false;<br>

        <br>

          BorderStyle:bsNone;<br>

        <br>

          Font:宋体,Fontsize:9;<br>

        <br>

          Position:poScreenCenter;<br>

        <br>

          PopupMenu:PopupMenu1;<br>

        <br>

           2)添加一panel,设置为:<br>

        <br>

          BevelOuter:bvNone;<br>

        <br>

          BorderStyle:bsSingle;<br>

        <br>

          Ctl3D:false;<br>

        <br>

          Name:Panel_1;<br>

        <br>

          Caption(置空);<br>

        <br>

          color:0x00CE9600; (淡蓝色)可自定<br>

        <br>

          3)a:把panel_1拉大(任意),在里面添加两个Panel,命名为Le_Pan,Ri_Pan;<br>

        <br>

          Le_Pan:<br>

        <br>

          Color:clBlack<br>

        <br>

          Align:alLeft;<br>

        <br>

          Width:20;<br>

        <br>

          其余同Panel_1;<br>

        <br>

          Ri_Pan:<br>

        <br>

          Align:alRight;<br>

        <br>

          其余同Le_Pan;<br>

        <br>

          b:<br>

        <br>

          在Panel_1内添加1个Label,设置属性为 <br>

        <br>

          Transparent:true;<br>

        <br>

          Visible:false;<br>

        <br>

          选取Label1,敲Ctrl+c一次,再敲Ctrl+V 69次,(选70个Label)<br>

        <br>

          c:<br>

        <br>

          在Panel_1内添加两个Image控件,命名Back_Image,Face_Image;<br>

        <br>

          Back_Image的stretch 属性为true;<br>

        <br>

          Back_Image可以载入你想要的背景图片;<br>

        <br>

          4)添加一个Memo控件,属性为<br>

        <br>

          Name:Buf_Memo;<br>

        <br>

          Width:310;<br>

        <br>

          Visible:false;<br>

        <br>

          Enabled:false;<br>

        <br>

          Ctl3D:false;<br>

        <br>

          5)添加OpenDialog,OpenPictureDialog各一个;<br>

        <br>

          PopMenu1中建立3个按纽。<br>

        <br>

          1) caption:打开 Name:OpenN<br>

        <br>

          2) caption:背景 Name:BackN<br>

        <br>

          3) caption:退出 Name:CloseN;<br>

        <br>

          OpenDialog1的filter属性为:文本文件|*.txt|所有文件|*.*<br>

        <br>

          原理:先将文本文件内容装入memo中,再通过遍历label控件的办法把它显示出来。<br>

        <br>

          以下是单元文件:<br>

        <br>

          //<br>

        <br>

          #include <br>

        <br>

          #pragma hdrstop<br>

        <br>

          #include "Read.h"<br>

        <br>

          //<br>

        <br>

          #pragma package(smart_init)<br>

        <br>

          #pragma resource "*.dfm"<br>

        <br>

          TMainForm *MainForm;<br>

        <br>

          const int Page_Nums = 34; // 每页的行数<br>

        <br>

          int Now_Line; // 当前行<br>

        <br>

          bool End; //文章是否结束<br>

        <br>

          //<br>

        <br>

          __fastcall TMainForm::TMainForm(TComponent* Owner)<br>

        <br>

           : TForm(Owner)<br>

        <br>

          {<br>

        <br>

           Inin_face();<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void __fastcall TMainForm::Face_ImageMouseDown(TObject *Sender, <br>

        <br>

          TMouseButton Button, TShiftState Shift, int X, int Y)<br>

        <br>

          {<br>

        <br>

          //拖动窗口,这个技巧比较有用<br>

        <br>

           if(Button == mbLeft)<br>

        <br>

          { int SC_DragMove = 61458; <br>

        <br>

          ReleaseCapture();<br>

        <br>

          MainForm-&gt;Perform(WM-SYSCOMMAND,SC-DragMove, 0);<br>

        <br>

          }<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void __fastcall TMainForm::OpenNClick(TObject *Sender)<br>

        <br>

          {<br>

        <br>

          if(OpenDialog1-&gt;Execute())<br>

        <br>

          { Buf_Memo-&gt;Lines-&gt;LoadFromFile(OpenDialog1-&gt;FileName);<br>

        <br>

          Inin();<br>

        <br>

          }<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void__fastcall TMainForm::BackNClick(TObject *Sender)<br>

        <br>

          {<br>

        <br>

          if(OpenPictureDialog1-&gt;Execute())<br>

        <br>

          Back_Image-&gt;Picture-&gt;LoadFromFile(OpenPictureDialog1-&gt;FileName);<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void __fastcallTMainForm::CloseNClick(TObject *Sender)<br>

        <br>

          {<br>

        <br>

          Application-&gt;Terminate();<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void TMain Form::Print Page(int line_cou) <br>

        <br>

          //执行print书本内容<br>

        <br>

          {<br>

        <br>

          const int L-TOP = Label1-&gt;Height;<br>

        <br>

          //该参数用来设置行距<br>

        <br>

          const int TitleLineCount = Buf-Memo-&gt;Lines-&gt;Count; //memo总行数<br>

        <br>

          int LabelLeft = 40;<br>

        <br>

          int LabelTop = 38;<br>

        <br>

          if(line_cou &lt; 0) <br>

        <br>

           //line_cou是标记现在的行位置<br>

        <br>

          line_cou = 0;<br>

        <br>

          int lineInx=0; <br>

        <br>

          //当前行数指针<br>

        <br>

          int i=0;<br>

        <br>

          bool vis=1;<br>

        <br>

          int c=Panel_1-&gt;ControlCount; <br>

        <br>

           // 得到Panel_1上的控件数<br>

        <br>

          TLabel *pLa; <br>

        <br>

           //定义TLabel类的指针<br>

        <br>

          while(i   {<br>

        <br>

          //遍历panel_1上的所有控件,这个方法很有用,<br>

        <br>

          if(Panel-1-&gt;Controls[i]-&gt;ClassNameIs("TLabel")) <br>

        <br>

          //判断控件类名<br>

        <br>

          { pLa=dynamic_cast&lt; TLabel* &gt;(Panel_1-&gt;Controls[i]); //强行转换指针类型<br>

        <br>

          pLa-&gt;Visible= vis;<br>

        <br>

          if(!vis) {i ++; continue;} <br>

        <br>

          //设置多余label为不可视<br>

        <br>

          pLa-&gt;Top= LabelTop;<br>

        <br>

          pLa-&gt;Left= LabelLeft;<br>

        <br>

          pLa-&gt;Caption=Buf_Memo-&gt;Lines-&gt;Strings[lineInx+line_cou];<br>

        <br>

           //用 label 显示行内容<br>

        <br>

          LabelTop+=L_TOP;<br>

        <br>

          }<br>

        <br>

          else <br>

        <br>

          //若不是想要的(label)类,继续判断下一个控件<br>

        <br>

          {i++; continue;}<br>

        <br>

          i++;<br>

        <br>

          lineInx++;<br>

        <br>

          if(LabelLeft &lt; 300)<br>

        <br>

          if(lineInx+1 == Page_Nums)<br>

        <br>

          { LabelTop = 38;<br>

        <br>

          LabelLeft = 410;<br>

        <br>

          }<br>

        <br>

          if(lineInx+1 == 2*Page_Nums) //如果已经显示一页<br>

        <br>

          vis = 0;<br>

        <br>

          if(lineInx + line_cou == TitleLineCount-1) //如果全文结束<br>

        <br>

          vis = 0;<br>

        <br>

          }<br>

        <br>

          if(lineInx + line_cou &lt; TitleLineCount-1)<br>

        <br>

          {<br>

        <br>

          Now_Line = line_cou + lineInx; //记录当前行数<br>

        <br>

          End = 0;<br>

        <br>

          }<br>

        <br>

          else<br>

        <br>

          End = 1;<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void TMainForm::Inin()<br>

        <br>

          {<br>

        <br>

          End = 0;<br>

        <br>

          PrintPage(0);<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void TMainForm::Inin_face() <br>

        <br>

          //初始化界面<br>

        <br>

          {<br>

        <br>

          Width = 740; <br>

        <br>

          //这里设置窗体大小<br>

        <br>

          Height = 495;<br>

        <br>

          Back_Image-&gt;SendToBack();<br>

        <br>

          Face_Image-&gt;BringToFront();<br>

        <br>

          Panel_1-&gt;Align = alClient;<br>

        <br>

          ack_Image-&gt;Align = alClient;<br>

        <br>

          Face_Image-&gt;Align = alClient;<br>

        <br>

          //这些初始化设置,虽然有违“所见即所得”的本意,但却使得在编辑时更方便<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void __fastcall TMainForm::Ri_PanClick(TObject *Sender)<br>

        <br>

          { <br>

        <br>

          //向前翻页<br>

        <br>

          if(!End)<br>

        <br>

          PrintPage(Now_Line);<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          void __fastcall TMainForm::Le_PanClick(TObject *Sender)<br>

        <br>

          { <br>

        <br>

          //向后翻页<br>

        <br>

           if(End)<br>

        <br>

          PrintPage(Now_Line - 2*Page_Nums + 1);<br>

        <br>

          else<br>

        <br>

          PrintPage(Now_Line - 4*Page_Nums + 2);<br>

        <br>

          }<br>

        <br>

          //<br>

        <br>

          在最顶部加上<br>

        <br>

          头文件 <br>

        <br>

          #include <br>

        <br>

          生成的文件就可以导入jpg图片文件作为背景颜色<br>

        <br>

          另外在头文件的public中,加上:<br>

        <br>

          public: // User declarations<br>

        <br>

          void PrintPage(int line_cou); <br>

        <br>

          // 主执行函数<br>

        <br>

          void Inin(void); <br>

        <br>

          // 初始化打开的文件<br>

        <br>

          void Inin_face(void); <br>

        <br>

          // 初始化界面<br>

        <br>

          对于初学者,需要指出的是,除了上面三个函数之外,其它的都在各自的Events(事件)页双击生成,然后写入函数主体。<br>

        <br>

          注意:由于TMemo类只能支持小于大约30k的文件,所以打开较大的文件也会报错,但用TRichedit类来代替TMemo即可。因为TRichedit类涉及到很多不确定因素(比如如果装vc,把某些dll换成旧版则可能会严重出错),这里还是用TMemo 

        做个例子。该代码在k6-2-350,win98,c++builder4中编译通过。 </td>

    </tr>

  </table>

 

</div>

</BODY></HTML>

⌨️ 快捷键说明

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