RT 最好有高人 來段詳細點的 代碼,讓小弟 研究研究、 初學.
uj5u.com熱心網友回復:
TPrinteruj5u.com熱心網友回復:
斑馬條碼列印機?要用zpl II語言(工業型)或EPL語言(桌面型),其實就是向列印機埠或列印驅動發送字串指令,有專門的手冊,你可以看看uj5u.com熱心網友回復:
以前有玩過類似的熱轉印的列印機用于打標簽,但那時的代碼是用VB,如果需要可以找我要[email protected]uj5u.com熱心網友回復:
經常用Borland C++ Builder5編程,操作資料庫時,報表列印是必不可少的。但BCB5自身所帶的報表控制元件又顯得缺少靈活性。所以,我想到了用TPrinter來列印報表。使用TPrinter必須要在程式頭部加入#include <vcl\\Printers.hpp>由于對于不是鏈頁列印紙來說,斷頁很困難,所以,我所需要設定每頁列印的記錄數。下面就是我自己編制的一個每頁列印30條符合條件記錄的代碼,寫給大家,以供參考。
try{
//定位列印頭
int x,y;
x=170;
y=150;
Printer()->BeginDoc();//開始一個列印作業
//列印標頭
Printer()->Canvas->Font->Size=24;
Printer()->Canvas->Font->Name=\"黑體\";
Printer()->Canvas->TextOut(x,y,\" -----服裝請領記錄-----\");
Printer()->Canvas->Font->Size=10;
Printer()->Canvas->Font->Name=\"宋體\";
x=190;
y=y+300;
//列印表格標題行
Printer()->Canvas->TextOut(x,y,\" ◇\"+Trim(Label12->Caption));
y=y+80;
Printer()->Canvas->TextOut(x,y,\"┏━━━━━━━━━┳━━━━━━━━━━┳━━┳━━━━━┳━━━━━━━━━━━┳━━━━━━━┓\");
y=y+80;
Printer()->Canvas->TextOut(x,y,\" 日 期 品 名 姓 名 部 門 職 務\");
Printer()->Canvas->TextOut(x+1820,y,\"數量\");
Printer()->Canvas->TextOut(x,y,\"┃\");
Printer()->Canvas->TextOut(x+830,y,\"┃\");
Printer()->Canvas->TextOut(x+1742.1,y,\"┃\");
Printer()->Canvas->TextOut(x+1991.2,y,\"┃\");
Printer()->Canvas->TextOut(x+2491.73,y,\"┃\");
Printer()->Canvas->TextOut(x+3487.61,y,\"┃\");
Printer()->Canvas->TextOut(x+4151,y,\"┃\");
ADOQuery1->First();
//換頁記錄計數器初始化
int i=0;
//建立回圈,如果不是最后一條記錄則進行回圈
while(!ADOQuery1->Eof)
{
//計數器加1
i=i+1;
y=y+80;
//列印第一條記錄
Printer()->Canvas->TextOut(x,y,\"┣━━━━━━━━━╋━━━━━━━━━━╋━━╋━━━━━╋━━━━━━━━━━━╋━━━━━━━┫\");
y=y+80;
Printer()->Canvas->TextOut(x,y,\"┃\"+ADOQuery1->FieldByName(\"請領日期\")->AsString);
Printer()->Canvas->TextOut(x+830,y,\"┃\"+ADOQuery1->FieldByName(\"品名\")->AsString);
Printer()->Canvas->TextOut(x+1742.1,y,\"┃\"+ADOQuery1->FieldByName(\"數量\")->AsString);
Printer()->Canvas->TextOut(x+1991.2,y,\"┃\"+ADOQuery1->FieldByName(\"請領人\")->AsString);
Printer()->Canvas->TextOut(x+2491.73,y,\"┃\"+ADOQuery1->FieldByName(\"部門\")->AsString);
Printer()->Canvas->TextOut(x+3487.61,y,\"┃\"+ADOQuery1->FieldByName(\"職務\")->AsString);
Printer()->Canvas->TextOut(x+4151,y,\"┃\");
ADOQuery1->Next();
//測驗是否該換頁,每30條記錄換一次頁
if(i%30==0)
{
//如果已經是最后一條記錄,則退出回圈
uj5u.com熱心網友回復:
if(ADOQuery1->Eof){
break;
}
//如果不是最后一條記錄
else
{
//如果該換頁,則列印頁尾和頁碼
int p=Printer()->PageNumber;
y=y+80;
Printer()->Canvas->TextOut(x,y,\"┗━━━━━━━━━┻━━━━━━━━━━┻━━┻━━━━━┻━━━━━━━━━━━┻━━━━━━━┛\");
Printer()->Canvas->TextOut(3800,y+200,\"頁碼:\"+IntToStr(p));
Printer()->NewPage();
Application->MessageBox(\"請更換紙張后按確定!\",\"提示\",MB_OK);
x=170;
y=150;
Printer()->Canvas->Font->Size=24;
Printer()->Canvas->Font->Name=\"黑體\";
Printer()->Canvas->TextOut(x,y,\" -----服裝請領記錄-----\");
Printer()->Canvas->Font->Size=10;
Printer()->Canvas->Font->Name=\"宋體\";
x=190;
y=y+300;
Printer()->Canvas->TextOut(x,y,\" ◇\"+Trim(Label12->Caption));
y=y+80;
Printer()->Canvas->TextOut(x,y,\"┏━━━━━━━━━┳━━━━━━━━━━┳━━┳━━━━━┳━━━━━━━━━━━┳━━━━━━━┓\");
y=y+80;
Printer()->Canvas->TextOut(x,y,\" 日 期 品 名 姓 名 部 門 職 務\");
Printer()->Canvas->TextOut(x+1820,y,\"數量\");
Printer()->Canvas->TextOut(x,y,\"┃\");
Printer()->Canvas->TextOut(x+830,y,\"┃\");
Printer()->Canvas->TextOut(x+1742.1,y,\"┃\");
Printer()->Canvas->TextOut(x+1991.2,y,\"┃\");
Printer()->Canvas->TextOut(x+2491.73,y,\"┃\");
Printer()->Canvas->TextOut(x+3487.61,y,\"┃\");
Printer()->Canvas->TextOut(x+4151,y,\"┃\");
}
}
//換頁結束
}
//列印完全部記錄后,列印表格尾部
y=y+80;
Printer()->Canvas->TextOut(x,y,\"┗━━━━━━━━━┻━━━━━━━━━━┻━━┻━━━━━┻━━━━━━━━━━━┻━━━━━━━┛\");
//取得總頁數
int pp=Printer()->PageNumber;
//在表格尾部列印頁碼
Printer()->Canvas->TextOut(3800,y+200,\"頁碼:\"+IntToStr(pp));
Printer()->EndDoc();//結束一個列印作業
ShowMessage(\"列印完成!謝謝使用!\");
}
//例外處理
catch(...)
{
ShowMessage(\"列印出錯!請檢查列印機是否連接好或者電源是否打開及其設定!\");
}
uj5u.com熱心網友回復:
mark!不錯,實用!
uj5u.com熱心網友回復:
很好轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/156773.html
標籤:基礎類
