habe diesen Code im Forum gefunden, aber der Drucker läßt sich nicht bewegen, auf Hochformat zu stellen, wenn der Drucker vorher manuell auf Querdruck (Start->Drucker) eingestellt wurde.
Wie geht das, bzw funktioniert bei euch der Code korrekt.
Code: Alles auswählen
ProcedureDLL.l Print_OpenPrint(PrinterName$)
Protected PrintLib_PN.s,res.f,PrintLib_PH.f,Buffersize.l,*DevBufferIn.l,*DevBufferOut.l,*PrinterParameters.DEVMODE
Protected lpszDriver.s,PrintLib_DC.l
If PrintLib_PN=""
PrintLib_PN=Print_GetDefaultPrinter()
Else
PrintLib_PN=PrinterName$
EndIf
res=OpenPrinter_(PrintLib_PN,@PrintLib_PH,0)
If res
Buffersize.l=DocumentProperties_(0,PrintLib_PH,PrintLib_PN,0,0,0)
If Buffersize=<0
ProcedureReturn 0
EndIf
*DevBufferIn=AllocateMemory(Buffersize)
*DevBufferOut=AllocateMemory(Buffersize)
DocumentProperties_(0,PrintLib_PH,PrintLib_PN,*DevBufferIn,*DevBufferOut,#DM_OUT_BUFFER|#DM_IN_BUFFER)
*PrinterParameters.DEVMODE=*DevBufferIn
ClosePrinter_(@PrintLib_PH)
MessageRequester("",Str(*PrinterParameters.DEVMODE\dmOrientation))
If *DevBufferIn = 1
MessageRequester("Printer Orientation","Hochformat",0)
ElseIf *DevBufferIn = 2
MessageRequester("Printer Orientation","Querformat",0)
EndIf
If GetVersion_()&$FF0000 ; Windows NT/XP
lpszDriver.s = "WINSPOOL"
Else ; Win 9x/Me
lpszDriver = ""
EndIf
;Hier wird Hochformat eingestellt.
;wenn vorher der drucker auf 1 stand und hier eine 2 eingetragen wird,
;schaltet er nicht auf Quer um bzw umgekehrt.
;der Drucker behält die manuelle Defaulteinstellung
;Warum?
*PrinterParameters.DEVMODE\dmOrientation=1
PrintLib_DC=CreateDC_(@lpszDriver,PrintLib_PN,0,*PrinterParameters)
FreeMemory(*DevBufferIn)
FreeMemory(*DevBufferOut)
Print_SetBkMode(#TRANSPARENT)
;Print_CreatePen(PrintLib_Linestyle,PrintLib_Linewidth,PrintLib_Linecolor,0,0)
ProcedureReturn PrintLib_DC
Else
ProcedureReturn 0
EndIf
EndProcedure
Print_OpenPrint("")