Seite 2 von 3

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 6:58
von AUGE_OHR
ad 1511
https://www.startech.com/faq/parallel_g ... ting_issue
When I send jobs to my parallel port in Windows 10, it does not print. What do I do?

This issue was the result of a Windows update that has recently been fixed in the KB3140743 update.
If you are still experiencing this issue, download the latest Windows update.



You can also temporarily resolve the issue by completing the following:

Press the Windows key + X.
Click Device Manager.
Expand the section for Ports (COM & LPT).
Right-click on the LPT port that is experiencing the issue.
Click Properties.
Click the Port Settings tab.
Under Filter Resource Method, select an option that is not currently selected.
Click OK.
also bitte auf die aktuelle Windows Version upgraden ... oder geht das bei deiner CPU ( Cherry Tail) nicht :?:

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 8:19
von saab-olly
Hallo, ich habe die aktuelle win10 Version. Alles was fehlt ist der Seitenauswurf.....

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 10:06
von Koverhage

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 10:37
von brandelh
Ich meine dass das letzte
Set printer to
Den Druck abschließen müsste.

Was für ein Drucker ist es denn. Reiner GDI oder HP kompatibel?

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 10:51
von saab-olly
Hallo, meinst du die doszip?

Danke

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 10:59
von saab-olly
Dell laser, aber bei Print auf PDF oder XPS habe ich dasselbe Problem, ich überlege immer noch, ob ich einen Programmierfehler mache, der das abschließen des Drucks verhindert....

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 17:04
von brandelh
Das ist seltsam, ich dachte das folgende Programm müsste drucken wie gewünscht,
aber mit Win7 und diesem Programm druckt der Drucker nichts.

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"
#include "inkey.ch"
#pragma Library( "XppUI2.lib" )

PROCEDURE Main
   local oDlg, oPrn

   oDlg := XbpPrintDialog():new()
   oDlg:create()

   // Obtain configured printer object
   oPrn := oDlg:display()
   ? oPrn:devname
   oDlg:destroy()

   if oPrn <> NIL
      SET PRINTER TO OBJECT oPRN
      SET PRINTER ON
      SET CONSOLE OFF

      ? "Hallo Welt"

      SET PRINTER OFF
      SET CONSOLE ON
      SET PRINTER TO
   endif

   oPrn:destroy()

RETURN

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 17:42
von brandelh
das druckt perfekt

Code: Alles auswählen

PROCEDURE Main
   LOCAL oPS
   // Create presentation space for default printer
   oPS := PrinterPS("Brother MFC-7820N USB Printer")

   // Activate spooling
   oPS:device():startDoc()

   // Spool graphic output
   GraBox( oPS, {10,10}, {400,100} )
   GraStringAt( oPS, {20,50}, "Hallo Welt !")

   // End spooling
   oPS:device():endDoc()

   DestroyDevice( oPS )

RETURN

   // Create presentation space and link to
   // device context for printer. The coordinate
   // system unit is 1/10 millimeter.
   //
   FUNCTION PrinterPS( cPrinterObjectName )
      LOCAL oPS, oDC := XbpPrinter():New()
      LOCAL aSize

      oDC:Create( cPrinterObjectName )

      oPS := XbpPresSpace():New()
      aSize := oDC:paperSize()

      // Size of printable region on paper
      aSize := { aSize[5] - aSize[3], ;
                 aSize[6] - aSize[4]  }
      oPS:Create( oDC, aSize, GRA_PU_LOMETRIC )
   RETURN oPS

   PROCEDURE DestroyDevice( oPS )
      LOCAL oDC := oPS:device()

      IF oDC <> NIL
         oPS:configure()
         oDC:destroy()
      ENDIF
   RETURN

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 17:52
von saab-olly
Hallo Hubert,
danke für Deine Mühe!

Das genau ist mein Problem. Ich route das unter Win10 auf PDF: Die Datei wird erzeugt, ist aber leer (0 Byte) und korrupt. Ich kämpfe seit 4 TAgen damit - offensichtlich mache ich nichts falsch. Zum Verzweifeln...... :angry1: - dabei will ich nur ein paar Zeilen drucken :oops:

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 19:37
von saab-olly
Hallo, hast Du eine 1.9 oder 2.0 ?

Danke, Oliver

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 20:54
von brandelh
ich habe es mit beiden ausprobiert, egal wie viel chr(12) ich rein haue oder Ausdrucke hintereinander ... am Ende wird alles gedruckt.

Re: LPT unter Windows 10 Verion 1511

Verfasst: So, 18. Mär 2018 21:06
von saab-olly
Hi, jetzt doch oder bei der grafischen Version? Mit ?/?? klappt der Druck nicht, oder?

Re: LPT unter Windows 10 Verion 1511

Verfasst: Mo, 19. Mär 2018 8:37
von mini990
Guten Morgen,
wenn ich richtig verstabnden habe schickst Du Deine Druckaufträge direkt an LPT1.
Wenn dem so ist bitte folgendes überprüfen:
Gerätemanager -> Anschlüsse -> LPT1 -> Anschlusseinstellungen
Ist der Haken bei Legacyerkennung gesetzt? (Muss gesetzt sein)
Danach sollte es funktionieren.

Gruß Stefan

Re: LPT unter Windows 10 Verion 1511

Verfasst: Mo, 19. Mär 2018 9:55
von saab-olly
Moin, nee, von LPT bin ich jetzt auch weg. Ich sende direct an den korrekten Druckername oder über \\server\drucker, dort kommt es laut Spooler auch an, aber nicht raus...

Danke, Olly

Re: LPT unter Windows 10 Verion 1511

Verfasst: Mo, 19. Mär 2018 10:06
von brandelh
saab-olly hat geschrieben: So, 18. Mär 2018 21:06 Hi, jetzt doch oder bei der grafischen Version? Mit ?/?? klappt der Druck nicht, oder?
Die graphische Druckausgabe wie oben angezeigt funktioniert immer.

Bei der set printer to object oXbpPrinterObjekt Methode wird am Drucker angezeigt, dass "Restdaten" vorhanden sind.
Wenn ich dann auf dem Brother Drucker "Druck abbrechen" drücke (ein Button), dann werden alle Seiten gedruckt, die ich auch per ? übergeben hatte.

Ich habe mit 1.90.355 und 2.00.906 probiert, mein OS war Win 7

Ich selbst drucke nicht mehr so, daher hatte ich keine Erfahrungen mit dem Befehl set printer to object oXbp.

Mit Win10 habe ich dann nicht mehr probiert.

Re: LPT unter Windows 10 Verion 1511

Verfasst: Mo, 19. Mär 2018 10:36
von saab-olly
Ok, vielen Dank, Hubert!

Re: LPT unter Windows 10 Verion 1511

Verfasst: Fr, 23. Mär 2018 12:28
von brandelh
ich habe eine LinePrinter Funktion geschrieben, die die Umsetzung solcher Listen vereinfachen soll, gedruckt wird ausschließlich (wenn auch intern) über XbpPrinter() und GraStringAt().
set printer to wird nicht benötigt und muss entfernt werden. Somit müssten alle Probleme von set printer to ... erledigt sein. :D

Wichtig, da sowohl die Erstellung der Objekte (oPRN, oPS) als auch Start und Ende des Druckjobs außerhalb gesteuert werden, kann man mehrere Ausgaben mischen.
Und im eigenen Quellcode muss man nur VOR und NACH dem alten Quellcode wenige Zeilen einfügen / löschen.
Natürlich funktioniert der Ausdruck auch auf PDF oder andere Datei-Druckertreiber, sowie auf allen Druckern, die Windows selbst verwenden kann.

Für Verbesserungen bin ich offen und wenn es stabil ist (aktuell unterscheide ich noch nicht die Einstellung Top Left / Bottom Left) stelle ich es in die Wissensdatenbank.
Gleiches habe ich mit PDF (HBPrintPDF, etc.) vor...

Code: Alles auswählen

// Schriftart etc. wird vorher festgelegt

oPrn:startDoc("Test von LinePrinter") // bestimmt Dateinamen bei PDF Druckertreibern.

// init the LinePrinter function
QPRN( { oPS, nLineFeed, nFirstLine, nLinesPerPage, nLeftMargin } )
// the old Report stye ...
.... ? ...
// End of Printing
QPRN()

oPrn:endDoc()

Meine Funktion, kann auch über #translate auf ? umgeleitet werden, allerdings sollten man dann die Warnung ignorieren, dass evt. ein NIL zuviel übergeben wird, das habe ich nicht weg bekommen.

* Syntax der Funktion:

Erster Aufruf: QPRN( { oPS, nLineFeed, nFirstLine, nLinesPerPage, nLeftMargin } ) // nLeftMargin = Blanks left of text

hierbei werden die nötigen Infos als Array übergeben:
  • oPS (XbpPresentationSpace des XbpPrinters)
  • Zeilenvorschub (Zeilenhöhe)
  • Position der ersten Zeile (0,0 ist ja links unten, also etwa 2900)
  • Zeilen pro Seite
  • Blanks für linken Rand
Aufrufe für die Druckzeilen:

QPRN( "LF", .... ) => entspricht qout(...) oder ? ...
QPRN( "NO", .... ) => entspricht qout(...) oder ? ... "NO" kann auch NIL sein.
QPRN( "FF" ) => entspricht EJECT
QPRN( ) => setzt die Funktion zurück, wobei der Druckjob noch nicht geschlossen ist.

Das kann man mit #translate auch so umsetzen, dass die eigentlichen alten Reportzeilen nicht geändert werden müssen:

#command ? [<list,...>] => QPRN( "LF", <list> )
#command ?? [<list,...>] => QPRN( "NO", <list> )
#command EJECT => QPRN( "FF" )

Mein Testprogramm sieht so aus:

Code: Alles auswählen

#include "Gra.ch"
#include "Xbp.ch"
#include "Common.ch"

#pragma Library( "XppUI2.lib" )

// TO DO --- Vorschub automatisch bestimmen und Top Left berücksichtigen.

/*
#command  ?  [<list,...>]  =>  oSheet:Q( <list> )
#command  ?? [<list,...>]  =>  oSheet:QQ( <list> )
*/

#define PRINTERAUSWAHL .t.

// LinePrinter mit XbpPrinter() Objekt

// einfacher und zuverlässiger als SET PRINTER TO OBJECT ...

/* Syntax:

   INIT:    QPRN( { oPS, nLineFeed, nFirstLine, nLinesPerPage, nLeftMargin } ) // nLeftMargin = Blanks left of text

   QOUT():  QPRN( "LF", .... )
   QQOUT(): QPRN( "NO", .... )
   EJECT:   QPRN( "FF" )
   ?        QPRN( "LF" )
   END      QPRN( )


#command  ?  [<list,...>]  =>  QPRN( "LF", <list> )
#command  ?? [<list,...>]  =>  QPRN( "NO", <list> )
#command  EJECT            =>  QPRN( "FF" )

* Standard ist in Xbp.CH !

#ifndef __XWB__
#command  ?  [<list,...>]  =>  QOUT( <list> )
#command  ?? [<list,...>]  =>  QQOUT( <list> )
#else
#command  ?  [[<foo1> [,<fooN>]]  =>  Var2LChar(<foo1>)[+" "+Var2LChar(<fooN>)]
#command  ?? [[<foo1> [,<fooN>]]  =>  Var2LChar(<foo1>)[+" "+Var2LChar(<fooN>)]
#endif
#command  EJECT            => _Eject()

*/

PROCEDURE Main
   LOCAL oPrn, oPS, oDlg, oFont, aSize
   LOCAL nFirstLine, nLinesPerPage, nLineFeed, nLeftMargin

   set charset to ansi

   if PRINTERAUSWAHL

      oDlg := XbpPrintDialog():new()
      oDlg:create()

      // Obtain configured printer object
      oPrn := oDlg:display()
      oDlg:destroy()

   else

      oPrn := XbpPrinter():new():create()


   endif

   IF oPrn <> NIL
      // Create a new presentation space
      oPS   := XbpPresSpace():new()

      // Size of printable region on paper
      aSize := oPrn:paperSize()
      aSize := { aSize[5] - aSize[3], aSize[6] - aSize[4]  }

      oPS:create( oPrn, aSize, GRA_PU_LOMETRIC )

      // Font setzen ...

      oFont := XbpFont():new(oPS)     // Font for printer
      if .t.
         oFont:familyName := "Arial"
         oFont:height     := 0           // use nominalPointSize
         oFont:width      := 0           // use nominalPointSize
         oFont:nominalPointSize := 10    // for Arial etc.
      else
         oFont:familyName := "Courier"
         oFont:height     := 16
         oFont:width      :=  8
      endif
      oFont:create()                        // Create font

      oPS:setFont(oFont)

      // Zeilenanzahl berechnen oder festlegen !
      // you can calculate the line parameter or just define what you want.

      nLineFeed      := -40
      nFirstLine     := aSize[2] + (nLineFeed * 1)
      nLinesPerPage  :=  60
      nLeftMargin    :=   5

      oPrn:startDoc("Test von LinePrinter")

      // init the LinePrinter function

      QPRN( { oPS, nLineFeed, nFirstLine, nLinesPerPage, nLeftMargin } )

      // the old Report stye ...

#command  ?  [<list,...>]  =>  QPRN( "LF", <list> )
#command  ?? [<list,...>]  =>  QPRN( "NO", <list> )
#command  EJECT            =>  QPRN( "FF" )

      ? "Test 1",34,date(),time(),111.22
      ? "Test 2",35,date(),time(),112.22
      ? "Test 3",36,date(),time(),113.22
      ?
      EJECT
      ? "New Page"
      ? ""
      ? "Text-"
      ?? "Ende"

#ifndef __XWB__
#command  ?  [<list,...>]  =>  QOUT( <list> )
#command  ?? [<list,...>]  =>  QQOUT( <list> )
#else
#command  ?  [[<foo1> [,<fooN>]]  =>  Var2LChar(<foo1>)[+" "+Var2LChar(<fooN>)]
#command  ?? [[<foo1> [,<fooN>]]  =>  Var2LChar(<foo1>)[+" "+Var2LChar(<fooN>)]
#endif
#command  EJECT            => _Eject()

      // End of Printing
      QPRN()

      oPrn:endDoc()

      oFont:destroy()
      oPrn:destroy()
      oPS:destroy()

   ENDIF


return

procedure QPRN( xCommand )
  STATIC oPrn, oPS, nLineFeed, nFirstLine, nLinesPerPage, nPosX, nPosY, nLine, cLM
  LOCAL i, nParams, cTxt, uValue, aInfo, nTxtLen
  nParams := PCount()
  IF nParams = 0
     // end of Printing
     oPrn          := NIL
     oPS           := NIL
     nLine         := 0
     nLineFeed     := 0
     nFirstLine    := 0
     nLinesPerPage := 0
     nPosX         := 0
     nPosY         := 0
     cLM           := ""
  else
     // xCommand ...
     DEFAULT xCommand TO "NO"
     do case
        case oPrn = NIL .and. valtype( xCommand ) # "A"
             alert("QPRN wurde nicht initialisiert")
             quit
        case valtype( xCommand ) == "A"
             // INIT:    QPRN( { oPS, nLineFeed, nFirstLine, nLinesPerPagen, LeftMargin } )
             oPS           := xCommand[1]      // XbpPresentationSpace
             oPRN          := oPS:device()     // XbpPrinter
             nLineFeed     := xCommand[2]
             nFirstLine    := xCommand[3]
             nLinesPerPage := xCommand[4]
             if ! empty(xCommand[5])
                cLM        := space(xCommand[5])
             endif
             nLine         := 1
             nPosX         := 0
             nPosY         := nFirstLine + nLineFeed
        case valtype( xCommand ) == "C"
             do case
                case xCommand == "LF"
                     nPosX := 0
                     if nLine > 0
                        nPosY += nLineFeed
                     endif
                     nLine++
                     if nLine > nLinesPerPage
                        oPrn:newPage()
                        nPosX := 0
                        nPosY := nFirstLine + nLineFeed
                     endif
                case xCommand == "FF"
                     oPrn:newPage()
                     nLine := 1
                     nPosX := 0
                     nPosY := nFirstLine + nLineFeed
                case xCommand == "NO"
                     // OK
                otherwise
                     alert("QPRN unbekanntes Kommando: '"+xCommand+"'")
                     quit
             end

             cTxt := cLM

             for i := 2 to PCount()
                 uValue := PValue(i)
                 if i>2
                    cTxt += " "
                 endif
                 do case
                    case uValue = NIL
                         // nothing
                    case valtype(uValue) = "C"
                         cTxt += uValue
                    case valtype(uValue) = "N"
                         cTxt += alltrim(str(uValue))
                    case valtype(uValue) = "D"
                         cTxt += dtoc(uValue)
                    case valtype(uValue) = "L"
                         cTxt += iif(uValue,"J","N")
                    otherwise
                         cTxt += var2char(uValue)
                 end

             next

             aInfo   := GraQueryTextBox(oPS, cTxt)
             nTxtLen := aInfo[3,1] - aInfo[2,1]

             GraStringAt( oPS, {nPosX,nPosY}, cTxt )

             nPosX += nTxtLen


             cTxt := ""

        otherwise
             alert("QPRN unbekanntes Kommando: '"+var2char(xCommand)+"'")
             quit

     end

  endif

return



Re: LPT unter Windows 10 Verion 1511

Verfasst: Fr, 23. Mär 2018 22:19
von saab-olly
Hallo Hubert, das ist der Hammer. Schaue ich mir am Wochenende an, das könnte mir viel Arbeit und Zeit sparen. Danke schonmal....

Ciao Olli

Re: LPT unter Windows 10 Verion 1511

Verfasst: Fr, 30. Mär 2018 18:57
von saab-olly
HAllo Hubert,

ich habe den ersten Report meiner App nun mit lineprinter umgesetzt, funktioniert prima, vielen Dank nochmal!!

Ich habe noch eine Frage, ein Problemchen:

Nachdem der User sich entschieden hat auf dem Drucker zu drucken (statt Bildschirm), setze ich in diesem IF-Konstrukt die BEfehle um:
#command ? [<list,...>] => QPRN( "LF", <list> )
#command ?? [<list,...>] => QPRN( "NO", <list> )
#command EJECT => QPRN( "FF" )
.... jetzt Drucken it dem alten ?/??
....
... und nach dem Drucken wieder zurück.
.....
IF ziel= "D"
// End of Printing
QPRN()
oPrn:endDoc()
#command ? [<list,...>] => QOUT( <list> )
#command ?? [<list,...>] => QQOUT( <list> )
#command EJECT => _Eject()
ELSE // nur auf dem Bildschirm angesehen
WAIT "Taste drücken..."
ENDIF

Problem:
auch wenn das IF oben garnicht durchlaufen wird, ich also von ANfang an Bildschrim wähle, werden die ?/?? BEfehle an QPRN gesendet, dass natürlich nicht initialisiert wurde. Ich kenne mich mit den #command-Direktiven nicht sonderlich aus, habe aber verstanden, dass man sie innerhalb des laufenden Pogrammes, wie in Deinem Bsp. wieder umbiegen kann.

Hast Du ev. eine Idee?

Danke und schöne Ostern - Oliver

Re: LPT unter Windows 10 Verion 1511

Verfasst: Fr, 30. Mär 2018 22:37
von brandelh
die #command Befehle werden vor dem Compiler umgesetzt, damit dieser den so entstehenden Code compilieren kann.
Dein IF zur Laufzeit ist ja viel später, darum kann das nicht funktionieren !

Die Vorgabe war eine Druckliste auf den Drucker zu bringen.
Gleichzeitig auf dem Monitor geht so nicht.

Da bleibt nur die Anfrage bei Alaska warum das mit dem Set Printer To Object bei uns nicht geht.

Re: LPT unter Windows 10 Verion 1511

Verfasst: Fr, 30. Mär 2018 23:27
von saab-olly
Hallo,

die Ausgabe soll ja nocht gleichzeitig sondern irgendwann später drucken. In Deinem Bsp-Programm setzt Du das doch auch zurück auf QOUT..... :?:

Re: LPT unter Windows 10 Verion 1511

Verfasst: Sa, 31. Mär 2018 18:10
von brandelh
Nochmal !!! denke an die Zeit.

Compiliere einmal mit /P Schalter und du siehst wie der Quellcode zur Runtime der EXE aussieht.

Du kannst 2 Funktionen machen, einmal MIT dem #command und einmal ohne,
die eine heißt dann Vorschau(), die andere Drucken() ... der Teil mit den Druckausgaben ist identisch (eventuell über #INCLUDE zusammen laden).

Re: LPT unter Windows 10 Verion 1511

Verfasst: Sa, 31. Mär 2018 18:14
von brandelh
Man könnte meine Funktion auch so abwandeln, dass sie je nach Inhalt einer Public/Private Variablen einmal ? und ein anderes mal die Druck Ansteuerung nutzt.
Aber alles was mit #COMMAND oder #IF/#ENDIF oder #TRANSLATE eingebaut wird, kann man zur Laufzeit nicht ins Original zurücksetzen.

Das wird alles zur Compilier-Zeit gesetzt !

Re: LPT unter Windows 10 Verion 1511

Verfasst: Sa, 31. Mär 2018 18:56
von AUGE_OHR
da ich keinen Drucker mehr am PP Port habe die Frage : funktoniert

Code: Alles auswählen

COPY xyz.TXT > LPT1: 
noch unter Windows 10 :?:

wenn ja würde ich den ganzen "Druck" z.b. mit

Code: Alles auswählen

SET ALTERNATE TO FILE.TXT
umleiten und dann mit dem COPY Befehl an den Drucker schicken.

Re: LPT unter Windows 10 Verion 1511

Verfasst: Sa, 31. Mär 2018 23:07
von saab-olly
Hi,

kann leider nicht helfen, da ich keinen LPT mehr habe :-(

Die App von Hubert hat mir super geholfen, nachdem ich nun auch die Gültigkeit von Precompiler-Direktiven kapiert habe :-)

ciao Olly