1. 폼디자인 그대로 인쇄하기
간단히 폼이름.PrintForm메서드를 이용한다. 용지에 맞춰 확대, 축소라던가 미리보기라던가 이런 기능은 직접 추가를 해야 한다. 머리가 매우 아플듯...
2. Printer 오브젝트를 이용하기
인쇄할 문서폼을 정밀하게 조정할 수 있는데 미리 한글이나 워드에서 작업해서 출력후에 각각의 위치를 자로 재서 작업하면 작업시간을 아낄 수 있다. 아래는 영수증 출력을 위해 만든 프린트모듈의 소스이다.
Option Explicit
Private Const INITIALX As Integer = 5
Private Const INITIALY As Integer = 5
Private Const PRINTWIDTH As Integer = 45
Private Const LINESPACE As Integer = 3
Private Const ALIGNLEFT As Integer = 0
Private Const ALIGNRIGHT As Integer = 1
Private Const ALIGNCENTER As Integer = 2
'Pinter.CurrentY는 값이 지맘대로 바뀌므로 이 변수를 사용한다
Dim iCurrentY As Integer
'영수증을 인쇄한다
Public Function PrintReceipt() As Boolean
On Error GoTo ERROR_PRINT
'프린트헤더의 위치와 글꼴, 줄간격 등을 세팅한다
SetupBeforePrint
'가게이름, 주소, 전화번호를 출력한다
PrintReceiptHead
'트랜잭션에 관련된 모든 자료를 출력한다
PrintReceiptBody
'감샤함다 메시지와 손님용 영수증이라는 부분을 출력한다(사실 별로 필요는...)
PrintReceiptTail
'이제 실제로 프린터에 출력을 하고 함수를 종료한다
Printer.EndDoc
Exit Function
'에러가 발생하면 메시지박스에 에러코드를 보여준다
ERROR_PRINT:
MsgBox Err.Description, vbCritical, "Print Error!"
Printer.KillDoc
End Function
'프린트커서의 위치와 글꼴, 줄간격 등을 세팅한다
Private Sub SetupBeforePrint()
'프린터커서 위치설정
Printer.CurrentX = INITIALX
iCurrentY = INITIALY
'프린터용지 방향과 프린터커서 단위설정
Printer.Orientation = vbPRORPortrait
Printer.ScaleMode = vbMillimeters
'글꼴과 크기, 모양설정
Printer.Font = "D2Coding"
Printer.FontSize = 9
Printer.FontBold = True
'프린터용지설정용 박스을 그린다 : 나중에는 지우세욤~
Printer.Line (0, 0)-(PRINTWIDTH + 10, iCurrentY + 105), vbBlack, B
' Printer.Line (InitialCursorX - 5, CursorY)-(InitialCursorX - 5, CursorY + 80)
' Printer.Line (InitialCursorX, CursorY)-(InitialCursorX, CursorY + 80)
' Printer.Line (InitialCursorX + 45, CursorY)-(InitialCursorX + 45, CursorY + 80)
' Printer.Line (InitialCursorX + 50, CursorY)-(InitialCursorX + 50, CursorY + 80)
'프린터커서 위치설정
'Call MoveToNextLine
End Sub
'가게이름, 주소, 전화번호를 출력한다
Private Sub PrintReceiptHead()
Call PrintLine(iCurrentY, "* BEER & WINE *", ALIGNCENTER)
Call MoveToNextLine
Call PrintLine(iCurrentY, "(705)706-5098", ALIGNCENTER)
Call MoveToNextLine
Call PrintLine(iCurrentY, "1204 MEMORIALAVE", ALIGNCENTER)
Call MoveToNextLine
Call PrintLine(iCurrentY, "BRACEBRIDGE ON T1R4N4", ALIGNCENTER)
Call EndOfParagraph
End Sub
'트랜잭션에 관련된 모든 자료를 출력한다
Private Sub PrintReceiptBody()
'이부분은 지금으로서는 일단 테스트용, 원래는 DB에서 불러온 실제 데이터를 사용해야 한다
Call PrintLine(iCurrentY, "TRANSACTION #1", ALIGNLEFT)
Call MoveToNextLine
Call PrintLine(iCurrentY, CStr(TDate & " " & VBA.Format(Now, "hh:mm:ss")), ALIGNLEFT)
Call EndOfParagraph
Call PrintLine(iCurrentY, "CIGARETTE", ALIGNLEFT)
Call PrintLine(iCurrentY, "2 @ $10.00 H", ALIGNRIGHT)
Call MoveToNextLine
Call PrintLine(iCurrentY, "HST ITEM", ALIGNLEFT)
Call PrintLine(iCurrentY, "$49.99 H", ALIGNRIGHT)
Call MoveToNextLine
Call PrintLine(iCurrentY, "NO-TAX ITEM", ALIGNLEFT)
Call PrintLine(iCurrentY, "10 @ $2.75 N", ALIGNRIGHT)
Call EndOfParagraph
End Sub
'감샤함다 메시지와 손님용 영수증이라는 부분을 출력한다(사실 별로 필요는...)
Private Sub PrintReceiptTail()
Call PrintLine(iCurrentY, "*** CUSTOMER COPY ***", ALIGNCENTER)
Call MoveToNextLine
Call PrintLine(iCurrentY, "THANK YOU", ALIGNCENTER)
Call EndOfParagraph
End Sub
'정렬방법에 맞춰서 프린터커서를 움직인 후에 문자열을 출력한다
Private Sub PrintLine(iy As Integer, sstr As String, ialign As Integer)
'왼쪽 정렬로 출력
If ialign = ALIGNLEFT Then
Printer.CurrentX = INITIALX
Printer.CurrentY = iy
Printer.Print sstr
'오른쪽 정렬로 출력
ElseIf ialign = ALIGNRIGHT Then
Printer.CurrentX = INITIALX + PRINTWIDTH - Printer.TextWidth(sstr)
Printer.CurrentY = iy
Printer.Print sstr
'가운데 정렬로 출력
Else
Printer.CurrentX = INITIALX + (PRINTWIDTH - Printer.TextWidth(sstr)) / 2
Printer.CurrentY = iy
Printer.Print sstr
End If
End Sub
'다음 라인을 인쇄하기 위해 프린터커서를 이동한다
Private Sub MoveToNextLine()
Printer.CurrentX = INITIALX
iCurrentY = iCurrentY + LINESPACE
End Sub
'문단이 끝나면 2줄을 띄우는게 맞지않냐?
Private Sub EndOfParagraph()
Printer.CurrentX = INITIALX
iCurrentY = iCurrentY + LINESPACE * 2
End Sub'ProjectMyPOS' 카테고리의 다른 글
| VB6 - 텍스트파일 입출력(사용자정의버튼용) (0) | 2024.06.12 |
|---|---|
| VB6 - VB코드편집창에서 마우스휠 사용(윈10 64비트) (0) | 2024.06.12 |
| VB6 - 폼의 종료버튼 동작하지 않게 하기 (0) | 2024.06.12 |
| VB6 - KeyDown Event (0) | 2024.06.12 |
| VB6 - ListView (0) | 2024.06.12 |