Hi BKC,
zu 1)
Über die Funktion GetDeviceCaps kannst Du alles mögliche ermitteln - also nicht nur die physikalischen Druckerränder. Damit die Funktion aber weiß, was Du ermitteln möchtest, also z.B. den linken nicht bedruckbaren Rand des Druckers, muss Du ihr das über den Parameter nIndex mitteilen. Um z.B. den linken nicht bedruckbaren Rand zu ermitteln, muss nIndex = 110 sein. Demnach kannst Du die Funktion wie folgt aufrufen:
pLeftPixels = GetDeviceCaps(Printer.HDC, 110) Damit der Code aber später leserlicher wird, definiert man den Wert 110 einfach als aussagekräftige Konstante, also z.B.:
Const PHYSICALOFFSETX = 110 Somit übergibst Du dann der Funktion nicht mehr 110, sondern eben die Konstante - was jedoch gleichbedeutend mit der direkten Wertübergabe von 110 ist.
4.) Wenn Du CurrentX und CurrentY auf die Werte 0 festlegst, erfolgt die Ausgabe ganz oben links - jedoch unter Berücksichtigung der nicht bedruckbaren Ränder. Hat der Drucker z.B. einen Offset von x = 6mm und y = 5mm, so erfolgt die Ausgabe an der Position x=6mm und y=5mm.
Um nun sicherzustellen, dass die Ausgabe auf JEDEM Drucker an exakt der gleichen Position erfolgt, musst Du einen konstanten Wert für die nicht bedruckbaren Ränder annehmen. Welche Werte Du hier verwenden solltest, kann ich Dir leider nicht sagen, da jeder Drucker eben einen anderen physikalischen Rand besitzt. Du solltest die Werte also groß genug wählen, z.B. x = 15mm und y = 15mm.
Um nun eine Textausgabe an der Position x=15mm und y=15mm vorzunehmen musst Du als CurrentX und CurrentY auf 15 festlegen, wobei Du dann aber unbedingt noch den physikalischen Druckrand abziehen musst.
<font color=green>' Ausgabe an Position x=15 mm und y=15 mm</font>
Dim pLeft As Integer
Dim pTop As Integer
<font color=green>' Maßeinheit mm</font>
With Printer
.ScaleMode = 6
<font color=green>' Drucker-Offset </font>
pLeft = .ScaleX(GetDeviceCaps(.hDC, PHYSICALOFFSETX), vbPixels, .ScaleMode)
pTop = .ScaleY(GetDeviceCaps(.hDC, PHYSICALOFFSETY), vbPixels, .ScaleMode)
<font color=green>' Druckkopf positionieren</font>
.CurrentX = 15 - pLeft
.CurrentY = 15 - pTop
<font color=green>' Textausgabe</font>
Printer.Print "Test"
<font color=green>' Druckauftrag beenden</font>
.EndDoc
End With Cu
Dieter |