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

📄 unit11.cpp

📁 光学仪器的控制系统 用于教学和科研的仪器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------
#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 + -