📄 print.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <printers.hpp>
#include "print.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//设置打印机
int Menu_SetPrinter(TComponent* Owner)
{
TPrinterSetupDialog *t;
int rc;
rc=FALSE;
t=new TPrinterSetupDialog(Owner);
if(t!=NULL){
rc=t->Execute();
delete t;
}
return(rc);
}
//打印数据
int Menu_PrintData(void)
{
TPrinter *p;
AnsiString t;
int n;
p= Printer();
if(p!=NULL){
n=p->PrinterIndex;
t=p->Printers->Strings[n];
Application->MessageBox(t.c_str(),"打印机",
MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
}
return(n);
}
//打印编辑文本组
int PrintEditText(char *pszTitle,TStrings *pText)
{
#define INITX 0
#define INITY 40
#define LASTY 240
TPrinter *pPrint;
TCanvas *pCanv;
int x,y,nMaxHeight,nPageWidth,nPageHeight,nHeightPerLine;
int i,nMaxCount,nNew;
RECT rt;
pPrint= Printer();
pPrint->Title=pszTitle;
pCanv=pPrint->Canvas;
nMaxCount=pText->Count;
nPageWidth = pPrint->PageWidth;
nPageHeight = pPrint->PageHeight;
nMaxHeight = nPageHeight-LASTY;
pPrint->BeginDoc();
SelectS4PrintTFont(pCanv);//
nHeightPerLine = GetTFontHeight(pCanv)+10;
for(i=0,nNew=0;i<nMaxCount;i++){
if(nNew==0){
x = INITX; y=INITY; nNew=1;
if(i==0){//第一页,打印标题
SetRect(&rt,x,y,nPageWidth,nMaxHeight);
y += PrintHeader(pCanv,pszTitle,&rt);
}
}
TCTextOut(pCanv,x,y,pText->Strings[i].c_str());
y += nHeightPerLine;
if(y>=nMaxHeight){
nNew = 0;
SetRect(&rt,x,nMaxHeight,nPageWidth,nPageHeight);
PrintPageNum(pCanv,pPrint->PageNumber,&rt);
pPrint->NewPage();
}
}
SetRect(&rt,x,nMaxHeight,nPageWidth,nPageHeight);
if(nNew)//最后页的页码
PrintPageNum(pCanv,pPrint->PageNumber,&rt);
pPrint->EndDoc();
return(pPrint->PageNumber);
}
//打印页号
void PrintPageNum(TCanvas *pCanv,int nPage,RECT *rt)
{
static char *pszText= "第 %d 页";
char szBuf[30];
int nHeight;
nHeight = pCanv->Font->Height;
pCanv->Font->Height = -24;
wsprintf(szBuf,pszText,nPage);
TCDrawText(pCanv,szBuf,rt,DT_CENTER);
pCanv->Font->Height=nHeight;
}
//打印标头
int PrintHeader(TCanvas *pCanv,char *pszTitle,RECT *rt,int nDate)
{
SYSTEMTIME t;
char szBuf[50];
RECT rtText;
TFontStyles Style;
int nSize;
TFont *pFont;
int rc;
pFont = pCanv->Font;
Style = pFont->Style;
nSize = SelectPrintTFont(pCanv,TFONT_3);
pFont->Style.Clear();
pFont->Style = pFont->Style<< fsBold;
rc = TCDrawText(pCanv,pszTitle,rt,DT_CENTER);
if(nDate){//打印日期
pFont->Height = 28;
GetLocalTime(&t);//获取现在时间,日期
wsprintf(szBuf,"(%04d.%02d.%02d-%02d:%02d:%02d)",
t.wYear,t.wMonth,t.wDay,
t.wHour,t.wMinute,t.wSecond);
SetRect(&rtText,rt->left,rt->top+rc+10,rt->right,rt->bottom);
rc += TCDrawText(pCanv,szBuf,rt,DT_CENTER);
}
pFont->Style = Style;
SelectPrintTFont(pCanv,nSize);
return(rc+20);
}
//画直线
void TCLine(TCanvas *Canvas,int x1,int y1,int x2,int y2)
{
Canvas->MoveTo(x1,y1);
Canvas->LineTo(x2,y2);
}
//文字在矩形框输出,返回文字高度
int TCDrawText(TCanvas *pCanvas,char *szBuf,RECT *rt,int nMode)
{
int rc;
rc=DrawText(pCanvas->Handle,szBuf,-1,rt,nMode);
return(rc);
}
//文字在<x,y>输出,返回文字是否输出
int TCTextOut(TCanvas *pCanvas,int x,int y,char *szBuf)
{
int rc;
rc=TextOut(pCanvas->Handle,x,y,szBuf,lstrlen(szBuf));
return(rc);
}
//获取文字在<x,y>输出宽度
int TCTextWidth(TCanvas *pCanvas,char *szBuf)
{
int rc;
rc=pCanvas->TextWidth(szBuf);
return(rc);
}
//获取文字在<x,y>输出高度
int TCTextHeight(TCanvas *pCanvas,char *szBuf)
{
int rc;
rc=pCanvas->TextHeight(szBuf);
return(rc);
}
//计算文字输出矩形框
int TCDrawTextRect(TCanvas *pCanvas,char *szBuf,RECT *rt,int nMode)
{
int rc;
ZeroMemory(rt,sizeof(RECT));
rc=DrawText(pCanvas->Handle,szBuf,-1,rt,DT_CALCRECT);
return(rc);
}
//获取字符高度
int GetTFontHeight(TCanvas *pCanv)
{
int rc;
rc = pCanv->Font->Height;
return(abs(rc));
}
//创造打印字体
int SelectTFont(TCanvas *pCanv,int nSize,char *pszName)
{
static char szDef[]="宋体";
TFont *pFont;
int n;
if(nSize<=0)nSize=9;
if(pszName==NULL) pszName=szDef;
pFont = pCanv->Font;
n = pFont->Size;
pFont->Size=-nSize;
pFont->Name=pszName;
return(n);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -