?? printadounit.pas
字號:
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 + -