读书软件做自己的[1]

[入库:2005年8月19日] [更新:2007年3月25日]

本文简介:选择自 gnuljf 的 blog

 

读书软件做自己的


   不知各位对e_book的读书效果是否感兴趣,它是用vb做的,其实在c++builder中也可以很轻松的实现类似效果。现在让我们step by step 吧!
  1)新建工程。单元存盘为"read.cpp"
  加入一个popupmenu; 窗体属性设置如下
  name: mainform;
  autoscroll:false;
  borderstyle:bsnone;
  font:宋体,fontsize:9;
  position:poscreencenter;
  popupmenu:popupmenu1;
   2)添加一panel,设置为:
  bevelouter:bvnone;
  borderstyle:bssingle;
  ctl3d:false;
  name:panel_1;
  caption(置空);
  color:0x00ce9600; (淡蓝色)可自定
  3)a:把panel_1拉大(任意),在里面添加两个panel,命名为le_pan,ri_pan;
  le_pan:
  color:clblack
  align:alleft;
  width:20;
  其余同panel_1;
  ri_pan:
  align:alright;
  其余同le_pan;
  b:
  在panel_1内添加1个label,设置属性为
  transparent:true;
  visible:false;
  选取label1,敲ctrl+c一次,再敲ctrl+v 69次,(选70个label)
  c:
  在panel_1内添加两个image控件,命名back_image,face_image;
  back_image的stretch 属性为true;
  back_image可以载入你想要的背景图片;
  4)添加一个memo控件,属性为
  name:buf_memo;
  width:310;
  visible:false;
  enabled:false;
  ctl3d:false;
  5)添加opendialog,openpicturedialog各一个;
  popmenu1中建立3个按纽。
  1) caption:打开 name:openn
  2) caption:背景 name:backn
  3) caption:退出 name:closen;
  opendialog1的filter属性为:文本文件|*.txt|所有文件|*.*
  原理:先将文本文件内容装入memo中,再通过遍历label控件的办法把它显示出来。
  以下是单元文件:
  //
  #include
  #pragma hdrstop
  #include "read.h"
  //
  #pragma package(smart_init)
  #pragma resource "*.dfm"
  tmainform *mainform;
  const int page_nums = 34; // 每页的行数
  int now_line; // 当前行
  bool end; //文章是否结束
  //
  __fastcall tmainform::tmainform(tcomponent* owner)
   : tform(owner)
  {
   inin_face();
  }
  //
  void __fastcall tmainform::face_imagemousedown(tobject *sender,
  tmousebutton button, tshiftstate shift, int x, int y)
  {
  //拖动窗口,这个技巧比较有用
   if(button == mbleft)
  { int sc_dragmove = 61458;
  releasecapture();
  mainform->perform(wm-syscommand,sc-dragmove, 0);
  }
  }
  //
  void __fastcall tmainform::opennclick(tobject *sender)
  {
  if(opendialog1->execute())
  { buf_memo->lines->loadfromfile(opendialog1->filename);
  inin();
  }
  }
  //
  void__fastcall tmainform::backnclick(tobject *sender)
  {
  if(openpicturedialog1->execute())
  back_image->picture->loadfromfile(openpicturedialog1->filename);
  }
  //
  void __fastcalltmainform::closenclick(tobject *sender)
  {
  application->terminate();
  }
  //
  void tmain form::print page(int line_cou)
  //执行print书本内容
  {
  const int l-top = label1->height;
  //该参数用来设置行距
  const int titlelinecount = buf-memo->lines->count; //memo总行数
  int labelleft = 40;
  int labeltop = 38;
  if(line_cou < 0)
   //line_cou是标记现在的行位置
  line_cou = 0;
  int lineinx=0;
  //当前行数指针
  int i=0;
  bool vis=1;
  int c=panel_1->controlcount;
   // 得到panel_1上的控件数
  tlabel *pla;
   //定义tlabel类的指针
  while(i   {
  //遍历panel_1上的所有控件,这个方法很有用,
  if(panel-1->controls[i]->classnameis("tlabel"))
  //判断控件类名
  { pla=dynamic_cast< tlabel* >(panel_1->controls[i]); //强行转换指针类型
  pla->visible= vis;
  if(!vis) {i ++; continue;}
  //设置多余label为不可视
  pla->top= labeltop;
  pla->left= labelleft;
  pla->caption=buf_memo->lines->strings[lineinx+line_cou];
   //用 label 显示行内容
  labeltop+=l_top;
  }
  else
  //若不是想要的(label)类,继续判断下一个控件
  {i++; continue;}
  i++;
  lineinx++;
  if(labelleft < 300)
  if(lineinx+1 == page_nums)
  { labeltop = 38;
  labelleft = 410;
  }
  if(lineinx+1 == 2*page_nums) //如果已经显示一页
  vis = 0;
  if(lineinx + line_cou == titlelinecount-1) //如果全文结束
  vis = 0;
  }
  if(lineinx + line_cou < titlelinecount-1)
  {
  now_line = line_cou + lineinx; //记录当前行数
  end = 0;
  }
  else
  end = 1;
  }
  //
  void tmainform::inin()
  {
  end = 0;
  printpage(0);
  }
  //
  void tmainform::inin_face()
  //初始化界面
  {
  width = 740;
  //这里设置窗体大小
  height = 495;
  back_image->sendtoback();
  face_image->bringtofront();
  panel_1->align = alclient;
  ack_image->align = alclient;
  face_image->align = alclient;
  //这些初始化设置,虽然有违“所见即所得”的本意,但却使得在编辑时更方便
  }
  //
  void __fastcall tmainform::ri_panclick(tobject *sender)
  {
  //向前翻页
  if(!end)
  printpage(now_line);
  }
  //
  void __fastcall tmainform::le_panclick(tobject *sender)
  {
  //向后翻页
   if(end)
  printpage(now_line - 2*page_nums + 1);
  else
  printpage(now_line - 4*page_nums + 2);
  }
  //
  在最顶部加上
  头文件
  #include
  生成的文件就可以导入jpg图片文件作为背景颜色
  另外在头文件的public中,加上:
  public: // user declarations
  void printpage(int line_cou);
  // 主执行函数

本文关键:读书软件做自己的
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top