📄 print.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <mem.h>
#include "print.h"
#include "main.h"
#include "thread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include "global.h"
Tform_print *form_print;
extern TLwThread *lwThread;
struct bb{ // for报表
char dw[50]; //收货单位 or 发货单位
int cnt; //该单位共有多少车
int no[MAX_CE]; //保存每车在data库中的序号
char bh[10]; // 编号
}sen[MAX_CE],rec[MAX_CE],sen_sv[MAX_CE],rec_sv[MAX_CE];
int sen_cnt,rec_cnt,sen_sv_cnt,rec_sv_cnt;
int sort_rec[MAX_CE],sort_sen[MAX_CE];
bool xz_sen[MAX_CE],xz_rec[MAX_CE]; //选择
struct file_per_day{ // 每天的文件序号
char dt[10] ; //year month day
int no; // 序号
}fno;
// for print
char title[200],add[100];
TPrinter *Pt;
int high; // paper's high
int wide; // paper's wide
TIcon *maicon = new TIcon();
int x,y; // TextOut(x,y,str)
int dy; // 每1行的高度
int w1,w2; //TextWidth(title);
int h1; // tital的高度
//---------------------------------------------------------------------------
__fastcall Tform_print::Tform_print(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::FormCreate(TObject *Sender)
{
Caption=bd.name;
strgrid1->Cells[0][0]="发货单位"; strgrid2->Cells[0][0]="收货单位";
strgrid1->Cells[1][0]="编号"; strgrid2->Cells[1][0]="编号";
strgrid1->Cells[2][0]="选择"; strgrid2->Cells[2][0]="选择";
set_printer();
maicon->Handle = LoadIcon(HInstance,"I1");
//maicon->LoadFromFile("c:\\cb4\\wingdh\\ma.ico");
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::set_printer()
{
try{
if((Pt = Printer())==NULL) return;
high=Pt->PageHeight; // paper's high
wide=Pt->PageWidth; // paper's wide
Pt->Canvas->Font->Pitch=fpFixed;
Pt->Canvas->Font->Charset=GB2312_CHARSET;
Pt->Canvas->Font->Size=11;
dy= 28;//2*(-Pt->Canvas->Font->Height); // Height is -, 每1行的高度
// 计算w1,w1,h1
Pt->Canvas->Font->Size=12;
sprintf(title,"%s公正计量站原始记录 ",bd.name);
w1=Pt->Canvas->TextWidth(title);
h1= -Pt->Canvas->Font->Height; // Height is -, tital的高度
Pt->Canvas->Font->Size=10;
if(bd.yh_mode==YH_TJX){
sprintf(add,"(2001)量认(津)字(公009)号");
}else if(bd.yh_mode==YH_BT){
sprintf(add,"(2002)量认(津)字(公013)号");
}else{
sprintf(add,"( )量认( )字(公 )号");
}
w2=Pt->Canvas->TextWidth(add);
/*
if(bd.yh_mode==YH_HD||bd.yh_mode==YH_BT||bd.yh_mode==YH_LC){
bmp = new Graphics::TBitmap();
try{ bmp->LoadFromFile("c:\\cb4\\wingdh\\ma.bmp");
}catch(...){
Application->MessageBox(" 找 不 到 ma.bmp 文 件 ", NULL, MB_OK);
}
} */
}catch(...){
//Application->MessageBox(" 没 有 打 印 机 ", NULL, MB_OK);
}
}
void __fastcall Tform_print::FormShow(TObject *Sender)
{
if(form_main->data->Active==false) return;
int i,j;
bool found;
char senfile[100],recfile[100];
int last_sen_bh,last_rec_bh; // 保存的排序后最后的编号
FILE *fd;
OFSTRUCT ofstruct;
struct bb tmpbb[MAX_CE];
sen_cnt=rec_cnt=0;
for(i=0;i<MAX_CE;i++){
sen[i].cnt=0;
rec[i].cnt=0;
}
for(form_main->data->First();form_main->data->Eof!=TRUE;form_main->data->Next()){
////// sen
for(i=0,found=false;i<sen_cnt;i++){ // 在已有的发货里找
if(strcmp(sen[i].dw,form_main->dataSend->Value.Trim().c_str())==0){ // found
sen[i].no[sen[i].cnt]=form_main->dataNo->Value;
sen[i].cnt++;
found=true;
break;
}
}
if(found==false){ // not found
strcpy(sen[sen_cnt].dw,form_main->dataSend->Value.c_str());
sen[sen_cnt].no[sen[i].cnt]=form_main->dataNo->Value;
sen[sen_cnt].cnt++;
sprintf(sen[sen_cnt].bh,"%s-F%02d",
form_main->dirDirect->Value.c_str(),sen_cnt);
sen_cnt++;
}
/////// rec
for(i=0,found=false;i<rec_cnt;i++){
if(strcmp(rec[i].dw,form_main->dataRec->Value.Trim().c_str())==0){
rec[i].no[rec[i].cnt]=form_main->dataNo->Value;
rec[i].cnt++;
found=true;
break;
}
}
if(found==false){
strcpy(rec[rec_cnt].dw,form_main->dataRec->Value.c_str());
rec[rec_cnt].no[rec[i].cnt]=form_main->dataNo->Value;
rec[rec_cnt].cnt++;
sprintf(rec[rec_cnt].bh,"%s-S%02d",
form_main->dirDirect->Value.c_str(),rec_cnt);
rec_cnt++;
}
}
sprintf(senfile,"%s%s%s",DB_PATH,form_main->data->TableName.c_str(),".s");
sprintf(recfile,"%s%s%s",DB_PATH,form_main->data->TableName.c_str(),".r");
if(OpenFile(senfile,&ofstruct,OF_EXIST)!=HFILE_ERROR && // file exists
OpenFile(recfile,&ofstruct,OF_EXIST)!=HFILE_ERROR ){
if((fd=fopen(senfile,"rb"))!=NULL){
sen_sv_cnt=fread(sen_sv,sizeof(struct bb),MAX_CE,fd);
fclose(fd);
}
if((fd=fopen(recfile,"rb"))!=NULL){
rec_sv_cnt=fread(rec_sv,sizeof(struct bb),MAX_CE,fd);
fclose(fd);
}
last_sen_bh=get_last_bh(sen_sv[sen_sv_cnt-1].bh);
last_rec_bh=get_last_bh(rec_sv[rec_sv_cnt-1].bh);
//// sen refresh
for(i=0;i<sen_cnt;i++){
for(j=0,found=false;j<sen_sv_cnt;j++){
if(strcmp(sen[i].dw,sen_sv[j].dw)==0){
strcpy(sen[i].bh,sen_sv[j].bh);
found=true;
break;
}
}
if(found==false){
sprintf(sen[i].bh,"%s-F%02d",
form_main->dirDirect->Value.c_str(),++last_sen_bh);
}
}
//// rec refresh
for(i=0;i<rec_cnt;i++){
for(j=0,found=false;j<rec_sv_cnt;j++){
if(strcmp(rec[i].dw,rec_sv[j].dw)==0){
strcpy(rec[i].bh,rec_sv[j].bh);
found=true;
break;
}
}
if(found==false){
sprintf(rec[i].bh,"%s-S%02d",
form_main->dirDirect->Value.c_str(),++last_rec_bh);
}
}
}
sort_senrec(); // 按编号排序
for(i=0;i<sen_cnt;i++){ // sen
memcpy((char*)&tmpbb[i],(char*)&sen[i],sizeof(struct bb));
}
for(i=0;i<sen_cnt;i++){
memcpy((char*)&sen[i],(char*)&tmpbb[sort_sen[i]],sizeof(struct bb));
}
for(i=0;i<rec_cnt;i++){ // rec
memcpy((char*)&tmpbb[i],(char*)&rec[i],sizeof(struct bb));
}
for(i=0;i<rec_cnt;i++){
memcpy((char*)&rec[i],(char*)&tmpbb[sort_rec[i]],sizeof(struct bb));
}
///// save
if((fd=fopen(senfile,"wb"))!=NULL){
fwrite(sen,sizeof(struct bb),sen_cnt,fd);
fclose(fd);
}
if((fd=fopen(recfile,"wb"))!=NULL){
fwrite(rec,sizeof(struct bb),rec_cnt,fd);
fclose(fd);
}
// StringGrid
strgrid1->RowCount=sen_cnt+1;
strgrid2->RowCount=rec_cnt+1;
for(i=0;i<sen_cnt;i++){
strgrid1->Cells[0][i+1]=sen[i].dw;
strgrid1->Cells[1][i+1]=sen[i].bh;
}
for(i=0;i<rec_cnt;i++){
strgrid2->Cells[0][i+1]=rec[i].dw;
strgrid2->Cells[1][i+1]=rec[i].bh;
}
}
//---------------------------------------------------------------------------
int __fastcall Tform_print::get_last_bh(char *bh)
{
char tmp[10];
tmp[0]=bh[6];
tmp[1]=bh[7];
tmp[2]='\0';
return atoi(tmp);
}
void __fastcall Tform_print::sort_senrec()
{
int i,j,cnt;
if(sen_cnt==1){ sort_sen[0]=0; }
else{
for(j=0;j<sen_cnt;j++){
for(i=0,cnt=0;i<sen_cnt;i++){
if(strcmp(sen[j].bh,sen[i].bh)>0) cnt++;
}
sort_sen[cnt]=j;
}
}
if(rec_cnt==1){ sort_rec[0]=0; }
else{
for(j=0;j<rec_cnt;j++){
for(i=0,cnt=0;i<rec_cnt;i++){
if(strcmp(rec[j].bh,rec[i].bh)>0) cnt++;
}
sort_rec[cnt]=j;
}
}
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::Button3Click(TObject *Sender)
{
form_main->Show();
Hide();
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::strgrid1Click(TObject *Sender)
{
if(xz_sen[strgrid1->Row-1]==true){
xz_sen[strgrid1->Row-1]=false;
strgrid1->Cells[2][strgrid1->Row]=" ";
}else{
xz_sen[strgrid1->Row-1]=true;
strgrid1->Cells[2][strgrid1->Row]=" √";
}
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::strgrid2Click(TObject *Sender)
{
if(xz_rec[strgrid2->Row-1]==true){
xz_rec[strgrid2->Row-1]=false;
strgrid2->Cells[2][strgrid2->Row]=" ";
}else{
xz_rec[strgrid2->Row-1]=true;
strgrid2->Cells[2][strgrid2->Row]=" √";
}
}
//---------------------------------------------------------------------------
void __fastcall Tform_print::Button1Click(TObject *Sender)
{
if(form_main->data->Active==false || Pt==NULL) return;
Button1->Enabled=false;
Button2->Enabled=false;
Button3->Enabled=false;
Repaint();
print_bb(0);
Button1->Enabled=true;
Button2->Enabled=true;
Button3->Enabled=true;
}
void __fastcall Tform_print::Button2Click(TObject *Sender)
{
if(form_main->data->Active==false) return;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -