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

📄 unit1.~pas

📁 邮政电信等系统票据的精确定位打印
💻 ~PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, Grids, DBGrids, DBTables, Excel2000, OleServer,Printers,
  Excel97;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ExcelWorkbook1: TExcelWorkbook;
    Button2: TButton;
    StringGrid1: TStringGrid;
    Button3: TButton;
    Button4: TButton;
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    OpenDialog1: TOpenDialog;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Edit10: TEdit;
    Button5: TButton;
    Button6: TButton;
    GroupBox2: TGroupBox;
    Edit11: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit12: TEdit;
    GroupBox3: TGroupBox;
    Edit13: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Edit14: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Edit11KeyPress(Sender: TObject; var Key: Char);
    procedure Edit12KeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  // global variants
  postno,offsets_post,startx_post,starty_post:integer;
  startx_addr,starty_addr:integer;
  startx_name,starty_name:integer;
  startx_name2,starty_name2:integer;
  x_securityno,y_securityno:integer;
  x_securitycontractno,y_securitycontractno:integer;
  x_securitytype,y_securitytype:integer;
  x_moneydate,y_moneydate:integer;
  x_moneyvalue,y_moneyvalue:integer;
  x_moneystyle,y_moneystyle:integer;
  x_printdate,y_printdate:integer;


implementation
uses ComObj,unit2;
{$R *.dfm}

//根据字符串,拆分字符串,相当于vb中的split函数
function SplitString(const Source,ch:string):TStringList;
var
  temp:String;
  i:Integer;
begin
  Result:=TStringList.Create;
  //如果是空自符串则返回空列表
  if Source=''
  then exit;
  temp:=Source;
  i:=pos(ch,Source);
  while i<>0 do
  begin
     Result.add(copy(temp,0,i-1));
     Delete(temp,1,i);
     i:=pos(ch,temp);
  end;
  Result.add(temp);
end;



procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
opendialog1.InitialDir:=ExtractFileDir(paramstr(0));//文件的打存放初始路径
opendialog1.Execute;
Try
ExcelApplication1.Connect;//EXCEL应用程序
Except
MessageDlg('Excel may not be installed',mtError, [mbOk], 0);
Abort;
End;
ExcelApplication1.Visible[0]:=True;
ExcelApplication1.Caption:='Excel Application';
try
excelapplication1.Workbooks.Open(opendialog1.FileName,
null,null,null,null,null,null,null,null,null,null,null,null,0);//打开指定的EXCEL 文件
except
begin
ExcelApplication1.Disconnect;//出现异常情况时关闭
ExcelApplication1.Quit;showmessage('请选择EXCEL电子表格!');
exit;
end;
end;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接

ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1与Excelworkbook1建立连接
//开始从EXCEL中取数,放到stringgrid1中,取完数后关闭EXCEL
        for i:=1 to 1000000 do//最大取值1000
        for j:=1 to 11 do
        begin
        if trim(excelworksheet1.cells.item[i+1,1])<>'' then
        begin
        stringgrid1.rowCount:=i+1;
        stringgrid1.Cells[j,i]:=ExcelWorksheet1.Cells.Item[i+1,j];
        end
else
begin
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
exit;
end;
//将第一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,2];
edit1.text:=stringgrid1.Cells[2,2];
edit3.text:=stringgrid1.Cells[3,2];
edit4.text:=stringgrid1.Cells[4,2];
edit5.text:=stringgrid1.Cells[5,2];
edit6.text:=stringgrid1.Cells[6,2];
edit7.text:=stringgrid1.Cells[7,2];
edit8.text:=stringgrid1.Cells[8,2];
edit9.text:=stringgrid1.Cells[9,2];
edit10.text:=stringgrid1.Cells[10,2];

button5.Enabled:=true;
end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var x:integer;

begin
x:=stringgrid1.row+1;
if x<> stringgrid1.RowCount then
begin
stringgrid1.row:=stringgrid1.row+1;

//将下一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,x];
edit1.text:=stringgrid1.Cells[2,x];
edit3.text:=stringgrid1.Cells[3,x];
edit4.text:=stringgrid1.Cells[4,x];
edit5.text:=stringgrid1.Cells[5,x];
edit6.text:=stringgrid1.Cells[6,x];
edit7.text:=stringgrid1.Cells[7,x];
edit8.text:=stringgrid1.Cells[8,x];
edit9.text:=stringgrid1.Cells[9,x];
edit10.text:=stringgrid1.Cells[10,x];
exit;
end
else
showmessage('已到最后一条记录!');
end;


procedure TForm1.Button3Click(Sender: TObject);
var x:integer;
begin
x:=stringgrid1.row-1;
if x<>0 then
begin
stringgrid1.row:=stringgrid1.row-1;

//将上一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,x];
edit1.text:=stringgrid1.Cells[2,x];
edit3.text:=stringgrid1.Cells[3,x];
edit4.text:=stringgrid1.Cells[4,x];
edit5.text:=stringgrid1.Cells[5,x];
edit6.text:=stringgrid1.Cells[6,x];
edit7.text:=stringgrid1.Cells[7,x];
edit8.text:=stringgrid1.Cells[8,x];
edit9.text:=stringgrid1.Cells[9,x];
edit10.text:=stringgrid1.Cells[10,x];
exit;
end
else
showmessage('已到第一条记录!');
end;


procedure TForm1.Button4Click(Sender: TObject);
var
 stringlist:TStringList;
 s1,s2,s3,s4,s5,s6,leftspace:string;
 i:integer;

begin
        Printer.BeginDoc;
        // 打印邮编
        postno:=strtoint(edit2.Text);
        Printer.Canvas.Font.Name := '宋体';
        Printer.Canvas.Font.Size := strtoint(edit13.Text);

        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_post;

        s1:= s1+inttostr((postno div 100000) mod 10)+ '  '+
                inttostr((postno div 10000) mod 10)+ '  '+
                inttostr((postno div 1000) mod 10)+ '  '+
                inttostr((postno div 100) mod 10)+ '  '+
                inttostr((postno div 10) mod 10) + '  '+
                inttostr(postno mod 10);
        Printer.Canvas.TextOut(0,starty_post,s1);


        // 打印地址,姓名 1
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_addr;
        s1:=s1+edit1.Text ;
        Printer.Canvas.TextOut(0,starty_addr,s1);

        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_name;
        s1:=s1+edit3.Text ;
        Printer.Canvas.TextOut(0,starty_name,s1);
        s1:=s1+' '+ '(先生/女士 亲启)';
        Printer.Canvas.TextOut(0,starty_name,s1);

        // 正义区域字体大小
        Printer.Canvas.Font.Size := strtoint(edit14.Text);

        // 姓名 2
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_name2;
        s1:=s1+ edit3.Text;
        Printer.Canvas.TextOut(0,starty_name2,s1);

        // 保险号
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_securityno;
        s1:=s1+edit6.Text ;
        Printer.Canvas.TextOut(0,y_securityno,s1);

        // 保险合同号
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_securitycontractno;
        s1:=s1+edit5.Text ;
        Printer.Canvas.TextOut(0,y_securitycontractno,s1);

        // 保险种类
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_securitytype;
        s1:=s1+edit7.Text ;
        Printer.Canvas.TextOut(0,y_securitytype,s1);

        // 缴费日期
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_moneydate;
        s1:=s1+edit9.Text ;
        Printer.Canvas.TextOut(0,y_moneydate,s1);

        // 交费方式
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_moneystyle;
        s1:=s1+edit8.Text ;
        Printer.Canvas.TextOut(0,y_moneystyle,s1);

        // 应交费用
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_moneyvalue;
        s1:=s1+edit10.Text ;
        Printer.Canvas.TextOut(0,y_moneyvalue,s1);

        // 打印日期
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_printdate;

        stringlist:=SplitString(edit4.Text ,'/');
        s4:=stringlist[0];
        s5:=stringlist[1];
        s6:=stringlist[2];
        s1:=s1+s6+'  ';
        s1:=s1+s4+'  ';
        s1:=s1+s5;
        Printer.Canvas.TextOut(0,y_printdate,s1);
        Printer.EndDoc;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
  form2.Top:=0;
  form2.Left:=(screen.Width-form2.Width) div 2;
  Form2.show;
  Button4.Enabled:=true;
  Button6.Enabled :=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Left:=(screen.Width -form1.Width) div 2;
form1.Top:= (screen.Height -form1.Height ) div 2;
end;

procedure TForm1.Button6Click(Sender: TObject);
var
  i,j:integer;
 stringlist:TStringList;
 s1,s2,s3,s4,s5,s6,leftspace:string;

begin
   if (strtoint(edit12.Text)<strtoint(edit11.Text)) then
   begin
        ShowMessage('起始页和终止页设置有问题!');
        exit;
   end;

   if (strtoint(edit11.Text)<1) then
   begin
        ShowMessage('起始页至少从第一行开始!');
        exit;
   end;

   if(application.MessageBox('确认要按设置连续打印,请按确认','提示',MB_OKCANCEL)=2) then
        exit;

   j:=  strtoint(edit11.Text)+1;
   // 开打
   Printer.BeginDoc;
   Printer.Canvas.Font.Name := '宋体';
   Printer.Canvas.Font.Size := 18;

   repeat
        stringgrid1.row:=j;
        //将下一条数据赋给编辑框
        edit2.text:=stringgrid1.Cells[1,j];
        edit1.text:=stringgrid1.Cells[2,j];
        edit3.text:=stringgrid1.Cells[3,j];
        edit4.text:=stringgrid1.Cells[4,j];
        edit5.text:=stringgrid1.Cells[5,j];
        edit6.text:=stringgrid1.Cells[6,j];
        edit7.text:=stringgrid1.Cells[7,j];
        edit8.text:=stringgrid1.Cells[8,j];
        edit9.text:=stringgrid1.Cells[9,j];
        edit10.text:=stringgrid1.Cells[10,j];
        j:=j+1;
        // 封面区域
        Printer.Canvas.Font.Size :=strtoint(edit13.Text );
        // 打印邮编
        postno:=strtoint(edit2.Text);

        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_post;

        s1:= s1+inttostr((postno div 100000) mod 10)+ '  '+
                inttostr((postno div 10000) mod 10)+ '  '+
                inttostr((postno div 1000) mod 10)+ '  '+
                inttostr((postno div 100) mod 10)+ '  '+
                inttostr((postno div 10) mod 10) + '  '+
                inttostr(postno mod 10);
                Printer.Canvas.TextOut(0,starty_post,s1);


        // 打印地址,姓名 1
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_addr;
        s1:=s1+edit1.Text ;
        Printer.Canvas.TextOut(0,starty_addr,s1);

        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_name;
        s1:=s1+edit3.Text ;
        Printer.Canvas.TextOut(0,starty_name,s1);
        s1:=s1+' '+ '(先生/女士 亲启)';
        Printer.Canvas.TextOut(0,starty_name,s1);


        // 正文区域
        Printer.Canvas.Font.Size :=strtoint(edit14.Text );
        // 姓名 2
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>startx_name2;
        s1:=s1+ edit3.Text;
        Printer.Canvas.TextOut(0,starty_name2,s1);

        // 缴费日期
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_moneydate;
        s1:=s1+edit9.Text ;
        Printer.Canvas.TextOut(0,y_moneydate,s1);

        // 保险号
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_securityno;
        s1:=s1+edit6.Text ;
        Printer.Canvas.TextOut(0,y_securityno,s1);

        // 保险合同号
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_securitycontractno;
        s1:=s1+edit5.Text ;
        Printer.Canvas.TextOut(0,y_securitycontractno,s1);

        // 保险种类
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_securitytype;
        s1:=s1+edit7.Text ;
        Printer.Canvas.TextOut(0,y_securitytype,s1);

        // 交费方式
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_moneystyle;
        s1:=s1+edit8.Text ;
        Printer.Canvas.TextOut(0,y_moneystyle,s1);

        // 应交费用
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_moneyvalue;
        s1:=s1+edit10.Text ;
        Printer.Canvas.TextOut(0,y_moneyvalue,s1);

        // 打印日期
        s1:='';
        i:=0;
        repeat
               s1:=s1+' ';
               i:=i+1;
        until i>x_printdate;

        stringlist:=SplitString(edit4.Text ,'/');
        s4:=stringlist[0];
        s5:=stringlist[1];
        s6:=stringlist[2];
        s1:=s1+s6+'  ';
        s1:=s1+s4+'  ';
        s1:=s1+s5;
        Printer.Canvas.TextOut(0,y_printdate,s1);

        if j<=strtoint(edit12.Text)+1 then
            Printer.NewPage;

        sleep(100);
   until j>strtoint(edit12.Text)+1;
   Printer.EndDoc;


end;

procedure TForm1.Edit11KeyPress(Sender: TObject; var Key: Char);
begin
  if ((Key>'9') or (key<'0')) and (Key<>#13) then
  begin
        ShowMessage('请不要输入非数字量');
  end;
end;

procedure TForm1.Edit12KeyPress(Sender: TObject; var Key: Char);
begin
  if ((Key>'9') or (key<'0')) and (Key<>#13) then
        ShowMessage('请不要输入非数字量');
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -