Function TSysPrinter_5.PrintMe: Boolean;
Var
PrnDevice, PrnDriver, PrnPort: Array[0..255] Of Char;
PrnHandle: THandle;
PrnMode: PDeviceMode;
i, line, prnline, H: integer;
StrTemp: String;
Begin
Result:= False;
If PrnHandle = 0 Then
Begin
MessageBox(Application.Handle, '无法获取系统打印机信息!', '系统信息',
MB_OK + MB_ICONINFORMATION);
Exit;
End
Else
Begin
PrnMode:= GlobalLock(PrnHandle);
With PrnMode^ Do
Begin
//打印份数
dmFields:= dmFields Or dmCopies;
dmCopies:= 1;
//打印方向
dmFields:= dmFields Or dmOrientation;
dmOrientation:= DMORIENT_PORTRAIT;
//纸张大小
dmFields:= dmFields Or dmPaperSize;
dmPaperSize:= DMPAPER_USER;
dmFields:= dmFields Or dmPaperWidth;
dmPaperWidth:= PaperWid;
dmFields:= dmFields Or dmPaperLength;
dmPaperLength:= PaperLen;
dmFields:= dmFields Or PrnMode^.dmLogPixels;
dmLogPixels:= 300;
Printer.BeginDoc;
h:= Printer.Canvas.TextHeight(str_Bank);
If length(str_Bank) > 24 Then
Begin
prnline:= length(str_Bank) Div 24;
StrTemp:= str_Bank;
For i:= 1 To prnline Do
Begin
If (ByteType(copy(StrTemp, 1, 24), 24) = mbSingleByte) //判断最后一个字节
Or (ByteType(copy(StrTemp, 1, 24), 24) = mbTrailByte) Then
Begin //单字母 //双字节中第二位 //直接打印
Printer.Canvas.TextOut(pstX_Bank, pstY_Bank +
(i - 1) * h + 1, copy(StrTemp, 1, 24));
StrTemp:= copy(StrTemp, 25, Length(StrTemp) - 24);
End
Else
If ByteType(copy(StrTemp, 1, 24), 24) = mbLeadByte Then //双字节中第一位
Begin //留下一行打印
Printer.Canvas.TextOut(pstX_Bank, pstY_Bank +
(i - 1) * h + 1, copy(StrTemp, 1, 23));
StrTemp:= copy(StrTemp, 24, Length(StrTemp) - 23);
End;
End;
i:= length(str_Bank) Div 24;
Printer.Canvas.TextOut(pstX_Bank, pstY_Bank + i * h
+ i, StrTemp);
End
Else
Printer.Canvas.TextOut(pstX_Bank, pstY_Bank, str_Bank);