1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
|
Quellcode_drucken proc
LOCAL pd:PRINTDLG
LOCAL DocInfo:DOCINFO
LOCAL LFont: TEXTMETRIC
LOCAL hFont:HANDLE
LOCAL buffer[129]:BYTE
.data
druckname db "ALI-Emulator ",169," by Eugen.R",0
FontName db "MS Sans Serif",0
X DWORD X_MAX
Y DWORD Y_MAX
Numlines dd 0
.code
INVOKE PrintSetup, ADDR pd, hWin ;printerdialoginitialisierung (ausgelagert in der anderen prozedur)
invoke PrintDlg,addr pd ;der dialog
.if eax==0
ret
.endif
INVOKE CreateFont,80,0,0,0,FW_LIGHT,FALSE,FALSE,FALSE,ANSI_CHARSET,0,0,DEFAULT_QUALITY,0,addr FontName ;man sollte die Fontart angeben
mov hFont,eax
mov eax, sizeof DOCINFO
mov DocInfo.cbSize, eax
mov DocInfo.lpszDocName,offset druckname
mov eax, offset druckname
mov DocInfo.lpszDocName, eax
mov DocInfo.lpszOutput, NULL
mov DocInfo.lpszDatatype, NULL
mov DocInfo.fwType, 0
INVOKE GetTextMetrics, pd.hDC, ADDR LFont
;druckstarten:
invoke StartDoc,pd.hDC,addr DocInfo
mov ecx,0 ;anzahl der Kopien
PRINT_LOOP:
push ecx
invoke StartPage,pd.hDC; Inhalt ausgeben
invoke SelectObject,pd.hDC,hFont
invoke SendDlgItemMessage,hWin,ID_PROGRAM_INPUT,EM_GETLINECOUNT,0,0
mov Numlines,eax
xor ecx,ecx
push ecx
mov X,X_MAX;abstand
mov Y,Y_MAX ;abstand
invoke TextOut,pd.hDC,X,Y,addr druckname,25 ;copyright von mir ;)
mov eax, Y
add eax, LFont.tmHeight
add eax, LFont.tmExternalLeading
add eax, LFont.tmHeight
mov Y, eax
lea esi,buffer
mov WORD PTR [buffer],128
TEXT_LOOP:
pop ecx
push ecx
lea esi,buffer
invoke SendDlgItemMessage,hWin,ID_PROGRAM_INPUT,EM_GETLINE,ecx,esi
mov edx,eax
lea esi,buffer
add esi,2 ;da wir ein Word für Größe des Textes haben
invoke TextOut,pd.hDC,X,Y,addr buffer,edx
mov eax, Y
add eax, LFont.tmHeight
add eax, LFont.tmExternalLeading
mov Y, eax
pop ecx
inc ecx
push ecx
cmp ecx,Numlines
jng TEXT_LOOP
pop ecx
;enden
invoke EndPage,pd.hDC;
pop ecx
inc ecx
cmp cx, pd.nCopies
jg PRINT_LOOP
invoke EndDoc,pd.hDC;
invoke DeleteDC,pd.hDC
.if pd.hDevMode != NULL
invoke GlobalFree,pd.hDevMode
.endif
.if (pd.hDevNames != NULL)
invoke GlobalFree,pd.hDevNames;
.endif
ret
Quellcode_drucken endp
|