📄 unit11.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "Unit11.h"
#include "Unit1.h"
#include "Fram.h"
#include "IsNumber.h"
//#include "ApparaTj270.h"
#include "Unit2.h"
//#include "FormXSF.h"
#include "Unit7.h"
#include "Unit16.h"
//#include "FNGraph270.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFormPrntSetting *FormPrntSetting;
//---------------------------------------------------------------------------
__fastcall TFormPrntSetting::TFormPrntSetting(TComponent* Owner)
: TForm(Owner)
{
m_bPrnFJ = false;
m_bPrnFG = false;
m_bPrnData = false;
m_PrnDataBuff = NULL;
m_PrnDataBuffLen = 0;
m_DataNum = 0;
}
//---------------------------------------------------------------------------
__fastcall TFormPrntSetting::~TFormPrntSetting()
{
if(m_PrnDataBuff != NULL)
{
delete []m_PrnDataBuff;
m_PrnDataBuff = NULL;
}
}
//---------------------------------------------------------------------------
void __fastcall TFormPrntSetting::BTPrintClick(TObject *Sender)
{
Print();
Close();
}
//---------------------------------------------------------------------------
void __fastcall TFormPrntSetting::FormCreate(TObject *Sender)
{
pPrinter1=Printer(); // 获得指向打印机的指针
IMView=IMPre; // 指向预览图象的指针
Image1=Form1->Image1; // 指向Form1图象的指针
//纸张为A4 宽20.3cm 高27.2cm
fPageWidth=19.5; // A4 纸的宽度
fPageHeight=28; // A4 纸的高度
}
//---------------------------------------------------------------------------
void __fastcall TFormPrntSetting::FormShow(TObject *Sender)
{
ReFreshPreview();// 调用预览函数
}
//---------------------------------------------------------------------------
void __fastcall TFormPrntSetting::SettingChang(TObject *Sender, WORD &Key,
TShiftState Shift)
{// 设置改变时(边距等)刷新预览图象
if(Sender==EditPutuHeight) PreView(1);
else ReFreshPreview();
//ReFreshPreview();
GetSetting(); // 获得当前设置
// Sender 指向当前Edit控件指针
// EditPutuHeight 谱图高度控件
}
//---------------------------------------------------------------------------
void __fastcall TFormPrntSetting::ChooseChang(TObject *Sender)
{
ReFreshPreview();
}
//---------------------------------------------------------------------------
void TFormPrntSetting::GetSetting(void)
{// 获得当前打印设置
char s[50];
if(!EditLeft->Text.IsEmpty())
{// Text.IsEmpty() 判断是否为空,是返回true 1;不是返回 0
if(StrToFloat(EditLeft->Text)<0)
EditLeft->Text="0";
if(StrToFloat(EditLeft->Text)>fPageWidth)
{
sprintf(s,"%4.1f",fPageWidth);
EditLeft->Text=s;
}
fLeft=StrToFloat(EditLeft->Text);
}
else
{
fLeft=0.1;
EditLeft->Text="0.1";
}
if(!EditRight->Text.IsEmpty())
{
if(StrToFloat(EditRight->Text)<0)
EditRight->Text="0";
if(StrToFloat(EditRight->Text)>fPageWidth)
{
sprintf(s,"%4.1f",fPageWidth);
EditRight->Text=s;
}
fRight=StrToFloat(EditRight->Text);
}
else
{
fRight=0.1;
EditRight->Text="0.1";
}
if(!EditTop->Text.IsEmpty())
{
if(StrToFloat(EditTop->Text)<0)
EditTop->Text="0";
if(StrToFloat(EditTop->Text)>fPageHeight)
{
sprintf(s,"%4.1f",fPageHeight);
EditTop->Text=s;
}
fTop=StrToFloat(EditTop->Text);
}
else
{
fTop=0.0;
EditTop->Text="0.0";
}
if(!EditPutuHeight->Text.IsEmpty())
{
if(StrToFloat(EditPutuHeight->Text)<0)
EditPutuHeight->Text="0";
if(StrToFloat(EditPutuHeight->Text)>fPageHeight)
{
sprintf(s,"%4.1f",fPageHeight);
EditPutuHeight->Text=s;
}
fPutuHeight=StrToFloat(EditPutuHeight->Text);
}
else
{
fPutuHeight=0.0;
EditPutuHeight->Text="0.0";
}
if(!EditPutuWidth->Text.IsEmpty())
{
if(StrToFloat(EditPutuWidth->Text)<0)
EditPutuWidth->Text="0";
if(StrToFloat(EditPutuWidth->Text)>fPageWidth)
{
sprintf(s,"%4.1f",fPageWidth);
EditPutuWidth->Text=s;
}
fPutuWidth=StrToFloat(EditPutuWidth->Text);
}
else
{
fPutuWidth=0.0;
EditPutuWidth->Text="0.0";
}
}
//---------------------------------------------------------------------------
void TFormPrntSetting::PreView(int iMod)
{//iMod=0 Print iMod=1 Preview
// 预览图象
TRect DRect,SRect; // TRect 结构体,DRect目标,SRect源
String s; // 字符串类
int iWidth,iHeight; // iWidth显示宽度,iHeight显示高度,单位:象素
int iCurTopPos=0; // iCurTopPos 当前需显示的纵坐标位置
TCanvas *tCanvas; // 画布指针
switch(iMod)
{
/*case 0: iWidth=pPrinter1->PageWidth;
iHeight=pPrinter1->PageHeight;
tCanvas=pPrinter1->Canvas;
break;*/
case 1: iWidth=IMView->Width;
iHeight=IMView->Height;
tCanvas=IMView->Canvas;
break;
}
GetSetting();
// GetPutuWidth();
DRect.Left=0;DRect.Top=0;
DRect.Right=iWidth;
DRect.Bottom=iHeight;
tCanvas->FillRect(DRect);//清屏
if(CBBegin->Checked==true)
{//显示标题栏
//显示题首
tCanvas->Pen->Style=psSolid; // 画笔类型为实线
tCanvas->Rectangle(iWidth*5/12,iCurTopPos,iWidth*7/12,2);
//显示当前日期
tCanvas->Rectangle(iWidth*10/12,iCurTopPos,
iWidth-4,iCurTopPos+2);
iCurTopPos+=3;
//显示一虚线
tCanvas->Pen->Style=psDash;
tCanvas->MoveTo(0,iCurTopPos);
tCanvas->LineTo(iWidth,iCurTopPos);
tCanvas->Pen->Style=psSolid;
iCurTopPos+=2;
// iCurTopPos+=4;
}
//显示谱图
iCurTopPos+=(int)(iHeight*fTop/fPageHeight);
tCanvas->Rectangle((iWidth*fLeft/fPageWidth),iCurTopPos
,iWidth-(int)(iWidth*fRight/fPageWidth)
,iCurTopPos+(iHeight*fPutuHeight/fPageHeight));
iCurTopPos+=(int)(iHeight*fPutuHeight/fPageHeight)+3;
if(CBPara->Checked==true)
{//显示测量参数
iCurTopPos+=3;
tCanvas->Rectangle(15,iCurTopPos,35,iCurTopPos+16);
iCurTopPos+=18;
}
//显示峰值
if(m_bPrnFJ || m_bPrnFG)
{
iCurTopPos += 10;
if(m_bPrnFJ)
{//显示峰尖数值
tCanvas->Rectangle(5,iCurTopPos,35,iCurTopPos+16);
}
if(m_bPrnFG)
{//显示峰谷数值
tCanvas->Rectangle(50,iCurTopPos,80,iCurTopPos+16);
}
iCurTopPos += 20;
}
if(m_bPrnData)
{//显示数据
iCurTopPos += 2;
tCanvas->Rectangle(5,iCurTopPos,35,iCurTopPos+20);
iCurTopPos += 22;
}
if(CBChangInfo->Checked==true)
{//显示厂商信息
iCurTopPos+=10;
tCanvas->Rectangle(5,iCurTopPos,iWidth / 2,iCurTopPos+5);
//tCanvas->Rectangle(5,iCurTopPos,iWidth-5,iCurTopPos+2);
iCurTopPos+=3;
}
}
//---------------------------------------------------------------------------
void TFormPrntSetting::ReFreshPreview(void)
{
GetPutuWidth();// 获得谱图高度
PreView(1); //
}
//---------------------------------------------------------------------------
void TFormPrntSetting::GetPutuWidth(void)
{// 获得谱图宽度 根据左,右计算
char s[20];
GetSetting();
fPutuWidth=fPageWidth-fRight-fLeft-0.1;
sprintf(s,"%4.1f",fPutuWidth);
EditPutuWidth->Text=s;
fPutuHeight=fPutuWidth*2/3.0;
sprintf(s,"%4.1f",fPutuHeight);
EditPutuHeight->Text=s;
}
//---------------------------------------------------------------------------
void TFormPrntSetting::Print(void)
{// 打印所有内容
TRect DRect,SRect;
String sDate;
char gs[80];
pPrinter=Printer();
pPrinter->BeginDoc();// 开始传送数据
//获取打印机的参数
//注释掉原来的==============
// PixelsPerInchX 打印机X方向每英寸点数
// PixelsPerInchY 打印机Y方向每英寸点数
PixelsPerInchX=GetDeviceCaps(pPrinter->Canvas->Handle,LOGPIXELSX);
PixelsPerInchY=GetDeviceCaps(pPrinter->Canvas->Handle,LOGPIXELSY);
//============================
//增加的部分===========================
//PixelsPerInchX=600;
//PixelsPerInchY=600;
//=====================================
PixelsPerCmX=PixelsPerInchX/2.54; // 每厘米点数
PixelsPerCmY=PixelsPerInchY/2.54;
//增加的部分===========================
int pw,ph;
pw=pPrinter->PageWidth; // 获得打印机的最大打印宽度的点数
ph=pPrinter->PageHeight; // 获得打印机的最大打印高度的点数
//=====================================
fPageWidth=(float)(pw/PixelsPerCmX); // 计算出最大打印宽度的厘米值
fPageHeight=(float)(ph/PixelsPerCmY);
//pPrinter->EndDoc();
GetSetting();//获取设置参数
int iCurTopPos=0;
int iLeftBase=(int)(3.0*PixelsPerCmX);//测量参数的左边距为3.0厘米
int iMaohao=(int)(2.0*PixelsPerCmX);//冒号距测量参数的左边距为2.0厘米
String Str;
//获取时间
SYSTEMTIME datetime;
GetLocalTime(&datetime);
sDate=IntToStr(datetime.wYear);
sDate+="-";
sDate+=IntToStr(datetime.wMonth);
sDate+="-";
sDate+=IntToStr(datetime.wDay);
sDate+=" ";
sDate+=IntToStr(datetime.wHour);
sDate+=":";
sDate+=IntToStr(datetime.wMinute);
sDate+=":";
sDate+=IntToStr(datetime.wSecond);
//把设置的厘米换算成像素
iLeft=PixelsPerCmX*fLeft;
iRight=PixelsPerCmX*fRight;
iTop=PixelsPerCmY*fTop;
iPutuHeight=PixelsPerCmY*fPutuHeight;
iPutuWidth=PixelsPerCmX*fPutuWidth;
//pPrinter->BeginDoc();
//开始打印
pPrinter->Canvas->Font->Size=12; // 字体大小
pPrinter->Canvas->Font->Name = "宋体";
int iFontHeight=pPrinter->Canvas->Font->Height; // 字体高度
if(iFontHeight<0) iFontHeight=0-iFontHeight; // 取绝对值
if(CBBegin->Checked==true)//打印标题栏
{
//打印题首
pPrinter->Canvas->TextOut(pw*8/24,0,
"WFZ-26A型紫外可见分光光度计");
//打印当前日期
pPrinter->Canvas->Font->Size=12;
pPrinter->Canvas->TextOut(pw*17/24
,iCurTopPos,sDate);
iCurTopPos+=iFontHeight;
//打印一虚线
pPrinter->Canvas->Pen->Style=psDash;
pPrinter->Canvas->MoveTo(0,iCurTopPos);
pPrinter->Canvas->LineTo(pw,iCurTopPos);
//iCurTopPos+=iFontHeight;
}
//打印谱图
iCurTopPos+=iTop;
DRect.Top=iCurTopPos;
DRect.Left=iLeft;
DRect.Right=DRect.Left+iPutuWidth;
DRect.Bottom=DRect.Top+iPutuHeight;
SRect.Top=KUAN+1; SRect.Left=KUAN+1;
SRect.Right=Image1->Width-KUAN-20;
SRect.Bottom=Image1->Height-KUAN-1;
//增加的部分===========================
if(DRect.Right>pw)
DRect.Right=pw;
if(DRect.Bottom>ph)
DRect.Bottom=ph;
//======================================
pPrinter->Canvas->CopyRect(DRect,Image1->Canvas,SRect); // 复制
iCurTopPos+=DRect.Bottom;
//打印测量参数
if(CBPara->Checked==true)
{
//iCurTopPos+=(int)(1.0*PixelsPerCmY);//往下走一厘米
//样品名称
//pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"样品名称");
//pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
//pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight
// ,iCurTopPos,Form1->samp);
//iCurTopPos+=iFontHeight;
//操作者
//pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"操作者");
//pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
//pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight
// ,iCurTopPos,Form1->oper);
//iCurTopPos+=iFontHeight;
//测量模式
pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"操作者");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight,iCurTopPos,Form1->ptc.oper);
iCurTopPos+=iFontHeight;
pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"样品名称");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight,iCurTopPos,Form1->ptc.samp);
iCurTopPos+=iFontHeight;
pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"测量模式");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
switch(Form1->ptc.m1)
{
case 1:Str="透过率";break;
case 2:Str="吸光度";break;
case 3:Str="能量";break;
}
pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight
,iCurTopPos,Str);
iCurTopPos+=iFontHeight;
//扫描速度
pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"扫描速度");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
switch(Form1->ptc.interval)
{
case 1:sprintf(gs, "%s", "快速(1.0 nm)");break;
case 2:sprintf(gs, "%s", "中速(0.5 nm)");break;
case 3:sprintf(gs, "%s", "慢速(0.1 nm)");break;
case 4:sprintf(gs, "%s", "最慢(0.025 nm)");break;
}
Str = gs;
pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight
,iCurTopPos, Str);
iCurTopPos+=iFontHeight;
//工作光源
pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"工作光源");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
switch(Form1->ptc.lamp)
{
case 0:Str="手动";break;
case 1:Str="氘灯";break;
case 2:Str="钨灯";break;
case 3:Str="自动";break;
case 4:Str="";break;
}
pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight
,iCurTopPos,Str);
iCurTopPos+=iFontHeight;
//狭缝宽度
pPrinter->Canvas->TextOut(iLeftBase,iCurTopPos,"狭缝宽度");
pPrinter->Canvas->TextOut(iLeftBase+iMaohao,iCurTopPos,":");
switch(Form1->ptc.slit)
{
case 0:Str="手动";break;
case 1:Str="0.15 nm";break;
case 2:Str="0.3 nm";break;
case 3:Str="0.5 nm";break;
case 4:Str="1.0 nm";break;
case 5:Str="2.0 nm";break;
}
pPrinter->Canvas->TextOut(iLeftBase+iMaohao+iFontHeight
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -