Drucker laesst sich nicht auf Hochformat stellen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Drucker laesst sich nicht auf Hochformat stellen

Beitrag von dysti »

Hallo,
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("")
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Beitrag von Shardik »

Ich hatte bereits einmal im englischen Forum ein Code-Beispiel veröffentlicht, mit dem man die Standard-Einstellungen eines Druckers dauerhaft verändern kann, sodaß diese Einstellungen selbst nach einem Reboot noch intakt sind. Das relativ komplexe Beispiel zeigt, wie man die Einstellung für Hoch- und Querdruck aber auch für Duplex-Druck abändern kann (ohne irgendeine User Library):
http://www.purebasic.fr/english/viewtop ... 3&start=20
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

Beitrag von dysti »

@Shardik,
vorerst mal herzlichen Dank für die Antwort. Es ist genau das, was ich gesucht habe. Noch ein Nebeneffekt: ich habe wieder etwas dazu gelernt.
Der Hinweis kommt aus dem Purebord-Archiv und wenn ich meine Suchbegriffe dort eingebe, bekomme ich auch die Informationen, die ich gebraucht hätte.
Den Auswahlpunkt habe ich irgendwie immer ignoriert.
Werde jetzt in Zukunft erstmal dort suchen, bevor ich eine Frage einstelle.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Antworten