⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 print.cpp

📁 停车场用
💻 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 + -