讀書軟體做自己的 (轉)
讀書做自己的
不知各位對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 re "*.dfm"
TMainFo*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(T *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
//拖動視窗,這個技巧比較有用
if(Button == mbLeft)
{ int SC_DragMove = 61458;
ReleaseCapture();
MainForm->Perform(WM-SYMMAND,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->Tenate();
}
//
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);
// 主執行
void Inin(void);
// 初始化開啟的檔案
void Inin_face(void);
// 初始化介面
對於初學者,需要指出的是,除了上面三個函式之外,其它的都在各自的Events(事件)頁雙擊生成,然後寫入函式主體。
注意:由於TMemo類只能支援小於大約30k的檔案,所以開啟較大的檔案也會報錯,但用TRichedit類來代替TMemo即可。因為TRichedit類涉及到很多不確定因素(比如如果裝vc,把某些dll換成舊版則可能會嚴重出錯),這裡還是用TMemo 做個例子。該程式碼在k6-2-350,,c++builder4中編譯透過
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1001211/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 《做自己的生命設計師》讀書筆記(未完待續)筆記
- IPTV軟體如何做自己的廣告系統?
- 「修改軟體的藝術」 讀書筆記筆記
- 讀Google是如何做軟體測試的Go
- Python學習,給自己的程式碼做個合集,定製自己的桌面軟體!Python
- 軟體需求說明書 (轉)
- [讀書筆記]軟體估算-估算的含義筆記
- 你做不做? 做什麼啊——軟體工程 (轉)軟體工程
- 《軟體工程思想》讀書摘抄 Part 1軟體工程
- "軟體隨想錄" 讀書筆記筆記
- 製作一個自己的軟體包CD(轉)
- 做一個自己的工作列 (轉)
- 自己做二級域名的DNS (轉)DNS
- 動手製做自己的一張軟盤大小的Linux(1) (轉)Linux
- 軟體框架設計的藝術----讀書總結框架
- 優質的mac電子書轉換軟體,讓你在任何地方閱讀書籍!Mac
- 《軟體架構設計》讀書筆記架構筆記
- [讀書筆記]軟體估算-估算方法(一)筆記
- [讀書筆記]軟體估算-估算方法(二)筆記
- 使用ABS和gensync建立自己的軟體包庫(轉)
- 軟體企業也需要做好自己的定位 (轉)
- 讀書如何做筆記筆記
- 自己用VC來做自己的專業安裝程式 (轉)
- 做一個成功的軟體專案經理(轉)
- 周朝陽新書《愛生活,做自己》背後的故事新書
- 《軟體開發本質論》讀書筆記筆記
- 軟體測試讀書列表 (2013.8)
- 讀書筆記——《軟體工程》第10~12章筆記軟體工程
- 軟體測試書籍-學軟體測試最好的書
- 周朝陽新書《愛生活,做自己》 後記新書
- 軟體需求說明書應包括的內容 (轉)
- Epubor Ultimate for mac電子書轉換軟體Mac
- 軟體安全開發生命週期讀書筆記筆記
- 做軟體的這些年
- 我最近覺得自己的收藏夾很亂,因為沒有事情做,就想閒著給自己做個網址導航的軟體【一】
- Linux的文書處理軟體-vi《圖解》(轉)Linux圖解
- 軟體開發相關的讀書筆記 問題與方法筆記
- 巧用軟體之讓你轉到linux下做PCB(轉)Linux