Delphi中怎么調(diào)用驅(qū)動打印,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供港南網(wǎng)站建設(shè)、港南做網(wǎng)站、港南網(wǎng)站設(shè)計、港南網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、港南企業(yè)網(wǎng)站模板建站服務(wù),10多年港南做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
TPrinter類介紹
TPrinter類中封裝了Windows打印機(jī)的接口。
類關(guān)系 TObject
使用TPrinter對象可以執(zhí)行應(yīng)用程序中的任何打印操作。可以在Printers單元中通過調(diào)用Printer函數(shù)來獲得一個TPrinter 對象。為了決定如何顯示窗體的打印圖像,可以使用Tform組件的PrintScale屬性。
在一個文本變量或一個打印機(jī)畫布準(zhǔn)備好后就可以進(jìn)行打印工作了。打印工作一直進(jìn)行到調(diào)用EndDoe過程。顯示在PrintManager(或網(wǎng)絡(luò)頭頁)上的題目由Title 屬性決定。如果想開始打印工作可以調(diào)用BeginDoc方法。結(jié)束一個成功打印的工作需要調(diào)用EndDoc過程。如果出現(xiàn)問題需要中斷打印可以調(diào)用Abort方法。
屬性列表
Aborted 中斷打印
指示當(dāng)前是否用戶中斷了打印,從而調(diào)用方法
__property bool Aborted ={read = FAborted,nodefalt} ;
如果屬性Aborted為真,則表示打印工作已經(jīng)中斷。如果為假值,則表示用戶并沒有中斷打印進(jìn)程。
Canvas 當(dāng)前打印頁的表面
表示當(dāng)前打印頁的表面。
__property Graphics : : TCanvas * Canvas = { read = GetCanvas } ;
屬性Canvas表示一頁的打印表面。使用Canvas對象的Brush,F(xiàn)ont 和Pen 屬性可以決定如何繪制和顯示頁。一些打印機(jī)不支持圖像,因此,對這些打印機(jī)調(diào)用Draw,StretchDraw或CopyRect方法將會失敗。
Capabilities 指示一個打印設(shè)備驅(qū)動器的當(dāng)前設(shè)置
指示一個打印設(shè)備驅(qū)動器的當(dāng)前設(shè)置。
__property TPrinterCajpabilities Caoabukutues ={read = FCapabities , nodefault} ;
屬性Capabilities 包含了打印機(jī)有兼容性,它指定了打印的方向,頁數(shù)和是否校對。
Copies 指定打印的份數(shù)
指定打印的份數(shù)。
__property int Copies = {read = GetNumCopies, write =SetNumCopies, nodefault } ;
屬性Copies中指定打印的份數(shù)。
Fonts 列出當(dāng)前打印機(jī)支持的字體
列出當(dāng)前打印機(jī)支持的字體。
__property Classes ;;TStrings * Fonts = { read =GetFonts } ;
使用Fonts屬性可以獲得當(dāng)前打印機(jī)支持的字體列表。列表中總是包含有TrueType字體,即使打印機(jī)中不包含這種字體,因為Windows Graphies Device Interface(GDI)在打印機(jī)使用時可以準(zhǔn)確地繪制這種字體。
Handle 提供訪問打印機(jī)對象句柄的能力
提供訪問打印機(jī)對象句柄的能力。
__property HdC Handle = { read =GetHandle , node fault };
使用Handle 屬性可以獲得對打印機(jī)對象句柄有訪問。
Orientation 決定打印工作在頁上的方向
決定打印工作在頁上的方向,垂直或水平。
__property TpinterOrientation Orientation = { read = GetPrientatiion, write = SetOrienatiion ,nodefault }
使用Orientation 屬性可以決定打印機(jī)打印的方向。Onienation屬性值只能是TPrinterOrientation 類型。下表中列出了屬性可能值:
TPrinter::PageHeight
指示當(dāng)前打印頁的像素高度。
__property int PageHeight = {read = GetPageHeight ,nodefault } ;
在屬性PageHeight中可以找到當(dāng)前打印頁的像素高度。
PageHeight 指示當(dāng)前打印頁的像素高度
指示當(dāng)前打印頁的像素高度。
pateNurnber 指示當(dāng)前打印頁
指示當(dāng)前打印頁。
__property int PageNumber = { read = FPageNumber , nodefault } ;
在屬性PageNumber中可以獲得當(dāng)前打印的頁碼。在調(diào)用NewPage方法后屬性PageNumber將加1。當(dāng)頁結(jié)束處輸入回車并寫入文本變量時,屬性PageNumber也將加1 。
PageWidth 指示當(dāng)前打印頁的像素寬度
指示當(dāng)前打印頁的像素寬度。
__property int PageWidth = {read = GetPageWidth , modefault } ; 在屬性PsheWifyh中可以找到當(dāng)前打印頁的像素寬度。
Printerlndex 在Printers屬性中列出的是當(dāng)前打印機(jī)
指定在Printers屬性中列出的打印機(jī)是當(dāng)前打印機(jī)。
__property int Printerlndex = { read =GetPrinterlndex , write = SetPrinterlndex ,nodefault } ;
屬性Printerlndex指定當(dāng)前打印機(jī)。如果改變了本屬性值將自動調(diào)用EndDoc方法。如果想選擇缺省的打印機(jī),可以將屬性Printerlndex 設(shè)置為 — 1 。在 Printers 屬性中列出了安裝的打印機(jī)。當(dāng)前打印機(jī)支持的字體列表在Fonts屬性中。
Printers 列出所有在Windows中安裝的打印機(jī)
列出所有在Windows中安裝的打印機(jī)。
__property Classes : : TStrings * Printers = {read =GePrinters } ; 在Printers屬性中列出了所有在Windows 中安裝的打印機(jī)。屬性Printerlndex 指定了當(dāng)前選擇的打印機(jī)。當(dāng)前打印機(jī)支持的字體列表在Fonts屬性中。
Printing 指示打印工作正在進(jìn)行
指示打印工作正在進(jìn)行。
__property bool Printing = {read = FPrinting , nodefault } ;
使用Printing屬性可以決定是否正在進(jìn)行一項打印工作。如果應(yīng)用程序中調(diào)用了BeginDoc方法并在調(diào)用EndDoc方法(或Abort方法)之前將把Printing屬性設(shè)置為真值。
Title 顯示在Ptint Manager中主網(wǎng)絡(luò)頭頁中的文本
決定顯示在Print Manager中和網(wǎng)絡(luò)頭頁中的文本。
__property Systen : : AndiString Title = { read = FTitle , wrete = FTitle } ;
屬性Title在Print Manager由Windows使用,也作為網(wǎng)絡(luò)的頭頁。
方法列表
~TPrinter 刪除一個打印機(jī)實例
__fastcall virtual ~TPrinter ( void ) ;
一般不直接調(diào)用~TPrinter方法。打印機(jī)對象將自動創(chuàng)建和刪除。當(dāng)調(diào)用~TPrinter方法時,它將檢查是否打印工作都已經(jīng)結(jié)束。如果都結(jié)束了就釋放資源。例如句柄、字體和畫布等,最后關(guān)閉打印機(jī)并調(diào)用繼承的析構(gòu)函數(shù)。
Abort 中斷打印
void __fastcall Abort(void);
中斷打印,放棄未打印數(shù)據(jù)。
使用Abort方法可以在打印工作完成前中斷打印,否則將使用EndDoc方法。調(diào)用Abort方法后設(shè)備將設(shè)置為下一個打印工作。
BeginDoc 送一個打印工作到打印機(jī)中
_void __fastcall BeginDoc(void);
送一個打印工作到打印機(jī)中。
調(diào)用BeginDoc可以初始化一個打印工作。如果打印工作被成功送入,應(yīng)用程序?qū)⒄{(diào)用EndDoc方法結(jié)束打印。打印工作只有在調(diào)用EndDoc方法后才實際開始。
EndDoc 結(jié)束當(dāng)前打印工作并關(guān)閉文本文件變量
void __fastcall EndDoc(void);
結(jié)束當(dāng)前打印工作并關(guān)閉文件變量。
調(diào)用EndDoc方法將結(jié)束打印工作(并關(guān)閉當(dāng)前打開的文體)。打印工作將在EndDoc方法調(diào)用結(jié)束后開始。在應(yīng)用程序中調(diào)用EndDoc方法后,打印機(jī)開始打印。將一個打印工作成功送入打印機(jī)后調(diào)用EndDoc方法。如果打印工作沒成功,則調(diào)用Abort方法。
GrtPrinter 取回當(dāng)前打印機(jī)
void __fastcall GetPrinter(char* ADevice,char* ADriver,char* APort,int& ADeviceMode);
取回當(dāng)前打印機(jī)。
不需要直接調(diào)用GetPrinter方法。可以通過訪問Printers屬性數(shù)組中的打印機(jī)來獲得。如果想了解更多的信息,可以參見Win32Developer 's Reference(WIN32::HLP)中的CreateDC函數(shù)。
NewPage 開始一個新頁
void __fastcall NewPage(void);
開始一個新頁,并將PageNumber屬性值加1。
使用NewPage方法將強(qiáng)制在打印機(jī)的新頁上繼續(xù)打印工作。
NewPage方法將把PageNumber屬性值加1。同時將把Canvas對象的Pen屬性設(shè)置成(0,0)。
SetPrinter 指定一個打印機(jī)作為當(dāng)前打印機(jī)
void __fastcall SetPrinter(char* ADevice,char* ADriver,char* APort,int ADeviceMode);
指定一個打印機(jī)作為當(dāng)前打印機(jī)。
不直接調(diào)用SetPrinter方法。可以通過訪問Printers屬性數(shù)組中的打印機(jī)來設(shè)置。如果想了解更多的信息,可以參見Win32Developer 's Reference(WIN32.HLP)中的CreateDC函數(shù)。
TPrinter 創(chuàng)建一個打印機(jī)
__fastcall TPrinter(void);
創(chuàng)建一個打印機(jī)。
不能直接調(diào)用TPrinter方法。TPrinter方法將由Printer函數(shù)自動調(diào)用。方法為打印機(jī)分配內(nèi)存,并調(diào)用繼承的構(gòu)造方法。然后設(shè)置正確的驅(qū)動器、設(shè)備和端口.
TPrinter:
代碼演示
//你必須先得到打印機(jī)的實際尺寸:
var
pointx,pointy:integer;
pointx:=getdevicecaps(printer.handle,logpixelsx);
pointy:=getdevicecaps(printer.handle,logpixelsy);
printer.canvas.TextOut(X*pointx,Y*pointy,Text);
//注意Printer要添加Printers引用
if printdialog1.Execute then
begin
Printer.BeginDoc;
Printer.Title := 'memo內(nèi)容';
Printer.Canvas.TextOut(100,100,'打印內(nèi)容');
Printer.EndDoc;
end;
//打印字符串函數(shù)
Procedure PosPrintStr(SizeType,ColorType:integer; str:string);
var ls:TStrings;
begin
//打印測試參數(shù) 小票輸出到文件 XSysPrint.Log
if PosCfg.blPrnText then
begin
WritePrintTxt(str);
{ls := TStringList.Create;
ls.Clear;
try
ls.Add(str);
TEXT_PrintString(PosCfg.sPrinterPort,0,0,ls);
finally
ls.Free;
end;
DelayMSec(PosCfg.nPrnDelay);}
exit;
end;
if PosCfg.sPrinterType='TM300K' then
begin
TM300K_PrintStr(sPrinterPortID,SizeType,ColorType,str);
DelayMSec(PosCfg.nPrnDelay); //打印延時
end
else if PosCfg.sPrinterType='TM200D' then
begin
TM200D_PrintStr(sPrinterPortID,SizeType,ColorType,str);
DelayMSec(PosCfg.nPrnDelay); //打印延時
end
else if PosCfg.sPrinterType='TEC200D' then
begin
LPTDOT_PrintStr(sPrinterPortID,1,str); //并口打印
DelayMSec(PosCfg.nPrnDelay); //打印延時
end
else if PosCfg.sPrinterType='TM210D' then
begin
TM210D_PrintString(sPrinterPortID,SizeType,ColorType,str);//通用并口打印
DelayMSec(PosCfg.nPrnDelay); //打印延時
end
else if PosCfg.sPrinterType='TEXTFILE' then //通用文本打印
begin
TEXT_PrintString(PosCfg.sPrinterPort,SizeType,ColorType,str);
DelayMSec(PosCfg.nPrnDelay); //打印延時
end
else if PosCfg.sPrinterType='OTHER' then
begin
Other_PrintString(sPrinterPortID,SizeType,ColorType,str);
DelayMSec(PosCfg.nPrnDelay); //打印延時
end
else begin
TM200D_PrintStr(sPrinterPortID,SizeType,ColorType,str);
DelayMSec(PosCfg.nPrnDelay); //打印延時
end;
end;
//模擬打印測試文本
procedure WritePrintTxt(sMessage: String);
const PRINT_FILE='XSysPrint.Log';
var
fname, fname0: String;
fp: TextFile;
begin
// 創(chuàng)建日志文件
fname:=DirConcat(UGetAppPath,PRINT_FILE);
if not FileExists(fname) then
begin
AssignFile(fp,fname);
Rewrite(fp);
Writeln(fp,'模擬打印');
Flush(fp);
CloseFile(fp);
end;
// 記錄日志信息
AssignFile(fp,fname);
try
Append(fp);
Writeln(fp,sMessage);
Flush(fp);
finally
CloseFile(fp);
end;
end;
看完上述內(nèi)容,你們掌握Delphi中怎么調(diào)用驅(qū)動打印的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享名稱:Delphi中怎么調(diào)用驅(qū)動打印
標(biāo)題路徑:http://www.chinadenli.net/article4/gshioe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、ChatGPT、網(wǎng)站收錄、品牌網(wǎng)站制作、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)