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

📄 printadounit.pas

📁 商品房合同套打程序
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit PrintAdoUnit;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, ComCtrls, DB, ADODB, LbSpeedButton, StdCtrls,StrUtils ,
    Mask, DBCtrls, OleCtnrs, DBCtrlsEh, Gauges,IniFiles,Printers   ;

    procedure PrintPage2;
    procedure printpage3;
    procedure printpage4;
    procedure printpage5;
    procedure PrintPage6;
    procedure PrintPage7;
    procedure PrintPage8;
    procedure Printpage9;
    procedure PrintPage10;
    procedure PrintPage11;
    procedure PrintPage12;
    procedure PrintPage15;
    procedure printpage14;
    procedure printpage13;
    procedure PrintpageF3;
    function PrinterPos(iMM:double;XorY:String):integer;
    function GetPX(X:Double):Integer ;
    function GetPY(Y:Double):Integer ;
    procedure splitPrint(s:String;len,len2,x,y,x2:Integer ) ;
    procedure SetDefPrinter(lPrinterIndex:Integer);
    function GetDefPrinter:string ;
implementation
 uses UnitPreview ;


function GetDefPrinter:string ;
var
 pDevice , pDriver ,pPort   :  pChar;
 hDMode : THandle;
begin

   GetMem(pDevice,cchDeviceName);
   GetMem(pDriver,MAX_PATH);
   GetMem(pPort,MAX_PATH);
   Printer.GetPrinter(pDevice,pDriver,pPort,hDMode);
   if lStrLen(pDriver) = 0 then begin
             GetProfileString('Devices',pDevice,'',pDriver,MAX_PATH);
       pDriver[pos(',',pDriver) - 1] := #0;
   end;
   if lStrLen(pPort) = 0 then begin
       GetProfileString('Devices',pDevice,'',pPort,MAX_PATH);
       lStrCpy(pPort,@pPort[lStrLen(pPort) + 2]);
   end;
   result:=string(pdevice);
   FreeMem(pDevice,cchDeviceName);
   FreeMem(pDriver,MAX_PATH);
   FreeMem(pPort,MAX_PATH);


end;

procedure SetDefPrinter(lPrinterIndex:Integer);
 var
  MyHandle  : THandle; 
  MyDevice, 
  MyDriver, 
  MyPort: array [0..255] of Char; 
begin 
  { set printer to the selected according to the
    combobox itemendex } 
  Printer.PrinterIndex := lPrinterIndex;

  { get our printer properties } 
  Printer.GetPrinter(MyDevice, 
                     MyDriver, 
                     MyPort, 
                     MyHandle); 

  { create string of exactly what WriteProfileString() 
    wants to see by concat each of the above received 
    character arrays } 
  StrCat( MyDevice, ',');
  StrCat( MyDevice, MyDriver ); 
  StrCat( MyDevice, ','); 
  StrCat( MyDevice, MyPort ); 

  { copy our new default printer into our windows ini file 
    to the [WINDOWS] section under DEVICE= } 
  WriteProfileString('WINDOWS', 
                     'DEVICE', 
                     MyDevice ); 

  { tell all applications that the windows ini file has 
    changed, this will cause them all to recheck default 
    printer } 
  SendMessage(HWND_BROADCAST, 
              WM_WININICHANGE, 
              0, 
              LongInt(pChar('windows')));

 end;
 procedure splitPrint(s:String;len,len2,x,y,x2:Integer ) ;
 var
   str:string;
   slen,slen2,slen3, i,rows,vlen,vx:integer;
 begin
      str:=s;
      slen:=length(str);
      slen2:=length(LeftStr(str,len)); //第一行长度;
      slen3:=Length(LeftStr(str,len2));  //第二行长度
      if slen>slen2 then begin
         rows:= (slen-slen2) div slen3+1;
         if (slen-slen2) mod slen3>0 then rows:=rows+1;
         with Printer.Canvas do begin
           for i :=0 to rows-1 do begin
             if i=0 then begin
               vx:=x;vlen:=len;
             end else begin
               vx:=x2;vlen:=len2;
             end;
             TextOut(GetPX(vx),GetPy(y)+TextHeight(str)*i+1,LeftStr(str,vlen));
             str:= AnsiReplaceStr(str,LeftStr(Str,vlen),'');
           end;
         end;
       end else
           Printer.Canvas.TextOut(GetPX(x),GetPy(y),str);
  end;

  function GetPX(X:Double):Integer ;
  begin
   RESULT:= PrinterPos(X,'X');
  END;
  function GetPY(Y:Double):Integer ;
  begin
   RESULT:= PrinterPos(Y,'Y');
  END;

function PrinterPos(iMM:double;XorY:String):integer;
var
    OffestX,OffestY:Double;
    PointX,POINTY:Integer;
begin
    PointX:=GetDeviceCaps(Printer.Handle,LOGPIXELSX);
    PointY:=GetDeviceCaps(Printer.Handle,LOGPIXELSY);
    //得到左端不可打印区域
    OffestX:=GetDeviceCaps(printer.Handle,PHYSICALOFFSETX)/PointX*25.4;
    //得到上端不可打印区域
    OffestY:=GetDeviceCaps(printer.Handle,PHYSICALOFFSETY)/PointY*25.4;
    //将打印的位置转换为以像数为单位的宽度,可考虑将Round函数去除
    if XorY='X' then Result:=round( (iMM-OffestX)/25.4*PointX);  //X
    //将打印的位置转换为以像数为单位的高度
    if XorY='Y' then Result:=round((iMM-OffestY)/25.4*PointY);  //Y
end;
/////////////////////

procedure PrintpageF3;
begin
 with Printer.Canvas,previewform.adoquery17 do BEGIN
      splitPrint(fieldbyname('外墙').asstring,30,30,55,40,55);
      splitPrint(fieldbyname('内墙').asstring,30,30,55,58,55);
      splitPrint(fieldbyname('顶棚').asstring,30,30,55,74,55);
      splitPrint(fieldbyname('地面').asstring,30,30,55,90,55);
      splitPrint(fieldbyname('门窗').asstring,30,30,55,108,55);

      splitPrint(fieldbyname('厨房').asstring,30,30,55,125,55);
      splitPrint(fieldbyname('卫生间').asstring,30,30,60,142,60);
      splitPrint(fieldbyname('阳台').asstring,30,30,55,160,55);
      splitPrint(fieldbyname('电梯').asstring,30,30,55,175,55);
      splitPrint(fieldbyname('其他').asstring,30,30,55,193,55);
 end;
END;

procedure printpage5;
var
  y:integer;
begin

    with Printer.Canvas,previewform.adoquery5 do BEGIN
      y:=32;
      TextOut(GETPX(30),GETPY(y),fieldbyname('1单价').asstring );
      TextOut(GETPX(80),GETPY(y),fieldbyname('1总价币种').asstring );
      TextOut(GETPX(110),GETPY(y),fieldbyname('1千万').asstring );
      TextOut(GETPX(128),GETPY(y),fieldbyname('1百万').asstring );
      TextOut(GETPX(143),GETPY(y),fieldbyname('1十万').asstring );
      TextOut(GETPX(160),GETPY(y),fieldbyname('1万').asstring );
      y:=40;
      TextOut(GETPX(33),GETPY(y),fieldbyname('1千').asstring );
      TextOut(GETPX(48),GETPY(y),fieldbyname('1百').asstring );
      TextOut(GETPX(63),GETPY(y),fieldbyname('1十').asstring );
      TextOut(GETPX(78),GETPY(y),fieldbyname('1元').asstring );

      TextOut(GETPX(139),GETPY(50),fieldbyname('2单价币种').asstring );
      y:=58;
      TextOut(GETPX(43),GETPY(y),fieldbyname('2单价').asstring );
      TextOut(GETPX(90),GETPY(y),fieldbyname('2总价币种').asstring );
      TextOut(GETPX(120),GETPY(y),fieldbyname('2千万').asstring );
      TextOut(GETPX(137),GETPY(y),fieldbyname('2百万').asstring );
      TextOut(GETPX(153),GETPY(y),fieldbyname('2十万').asstring );
      y:=67;
      TextOut(GETPX(25),GETPY(y),fieldbyname('2万').asstring );
      TextOut(GETPX(43),GETPY(y),fieldbyname('2千').asstring );
      TextOut(GETPX(58),GETPY(y),fieldbyname('2百').asstring );
      TextOut(GETPX(73),GETPY(y),fieldbyname('2十').asstring );
      TextOut(GETPX(88),GETPY(y),fieldbyname('2元').asstring );

      TextOut(GETPX(145),GETPY(75),fieldbyname('3总价币种').asstring );
      y:=85;
      TextOut(GETPX(25),GETPY(y),fieldbyname('3千万').asstring );
      TextOut(GETPX(43),GETPY(y),fieldbyname('3百万').asstring );
      TextOut(GETPX(58),GETPY(y),fieldbyname('3十万').asstring );
      TextOut(GETPX(73),GETPY(y),fieldbyname('3万').asstring );
      TextOut(GETPX(88),GETPY(y),fieldbyname('3千').asstring );
      TextOut(GETPX(104),GETPY(y),fieldbyname('3百').asstring );
      TextOut(GETPX(118),GETPY(y),fieldbyname('3十').asstring );
      TextOut(GETPX(133),GETPY(y),fieldbyname('3元').asstring );

      splitPrint(fieldbyname('备注').asstring,30,34,50,94,25);
    end;

     with Printer.Canvas,previewform.adoquery6 do BEGIN
      TextOut(GETPX(54),GETPY(190),fieldbyname('处理方式').asstring );
      splitPrint(fieldbyname('1双方自行约定').asstring,30,34,50,207,25);
      splitPrint(fieldbyname('2双方自行约定').asstring,30,34,50,225,25);
    end;

end;

procedure PrintPage6;
begin
   with Printer.Canvas,previewform.adoquery6 do BEGIN
      splitPrint(fieldbyname('3双方自行约定').asstring,30,34,50,40,25);
      splitPrint(fieldbyname('4双方自行约定').asstring,30,34,50,58,25);
     TextOut(GETPX(100),GETPY(120),fieldbyname('利息利率').asstring );
   end;
   with Printer.Canvas,previewform.adoquery7 do BEGIN
     TextOut(GETPX(73),GETPY(225),fieldbyname('付款方式种类').asstring );

   end;
end;

procedure PrintPage12;
begin
   with Printer.Canvas,previewform.adoquery12 do BEGIN
      splitPrint(fieldbyname('133处理方式').asstring,30,34,45,41,25);

   end;
   with Printer.Canvas,previewform.adoquery13 do BEGIN
      splitPrint(fieldbyname('1使用条件').asstring,32,32,45,93,45);
      splitPrint(fieldbyname('2使用条件').asstring,32,32,45,102,45);
      splitPrint(fieldbyname('3使用条件').asstring,32,32,45,110,45);
      splitPrint(fieldbyname('4使用条件').asstring,32,32,45,119,45);
      splitPrint(fieldbyname('5使用条件').asstring,32,32,45,127,45);

      splitPrint(fieldbyname('1处理方式').asstring,32,32,45,155,45);
      splitPrint(fieldbyname('2处理方式').asstring,32,32,45,165,45);
      splitPrint(fieldbyname('3处理方式').asstring,32,32,45,173,45);

⌨️ 快捷键说明

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