如何制作翻页的效果????(100分)

  • 主题发起人 主题发起人 laohe
  • 开始时间 开始时间
L

laohe

Unregistered / Unconfirmed
GUEST, unregistred user!
我看过电子名片后,我觉得他的翻页效果不错,不知道怎么制作
下面是下载地址,给源码的加100分,谢谢;

下载地址:
http://www.skycn.com/download.php?id=6569&url=http://ln.skycn.net/down/e-C11.zip
http://bright9.top263.net/e-C11.zip

 
这个效果难道没有人会吗,大侠出手吧
 

读书软件做自己的


   不知各位对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->ClassNameIs("TLabel"))

  //判断控件类名

  { pLa=dynamic_cast< TLabel* >(Panel_1->Controls); //强行转换指针类型

  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);

  // 主执行函数

  void Inin(void);

  // 初始化打开的文件

  void Inin_face(void);

  // 初始化界面

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

  注意:由于TMemo类只能支持小于大约30k的文件,所以打开较大的文件也会报错,但用TRichedit类来代替TMemo即可。因为TRichedit类涉及到很多不确定因素(比如如果装vc,把某些dll换成旧版则可能会严重出错),这里还是用TMemo 做个例子。该代码在k6-2-350,win98,c++builder4中编译通过。
 
Bahl :
delphi能不能实现那种效果
 
那个效果能不能实现跟是不是Delphi没有关系。。要看他是怎样实现的。。
我看了一下那个电子名片的软件..
他的翻页用的是图片的x轴变化实现的。。
即翻页的按钮onclick时先将当前页面内容照成一个图片
然后改变内容 再使图片放到其上面 然后用一个for循环使图片的width随时间变小。
然后消失 再重复类似过程在另一边再来一遍。。。

以上是我看到后的猜测 ,不足之处还望大家指教。。。
就是照成图片的时候怎么照
不会是用全屏照下来在用当前程序位置rect出图片吧??。。。好麻烦!
怎样照像才能只照一个控件??
希望各位给于指教
 
delphi能实现那种效果
 
怎么实现呢
 
这里是Delphibbs呀!虽然可以说别的,可是也应该以DELPHI为主嘛!VC中能实现的,我想
DELPHI也能实现,有哪位大侠能说说?
 
laohe:这个网站是教你怎么样自己做这个书本翻页效果
http://rednet.eschool.com.cn/document/20001207/2000120710210101.shtml
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
930
DelphiTeacher的专栏
D
D
回复
0
查看
945
DelphiTeacher的专栏
D
D
回复
0
查看
871
DelphiTeacher的专栏
D
D
回复
0
查看
777
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部