Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi ExtEscape Unterschied Windows XP und WinDows 7 (https://www.delphipraxis.net/177877-extescape-unterschied-windows-xp-und-windows-7-a.html)

Pro_RJ 3. Dez 2013 14:29

ExtEscape Unterschied Windows XP und WinDows 7
 
Halli hallo,
Ich habe eine Kassenschublade an einem Bondrucker (BIXOLON SRP-350plusII) angeschlossen.
jetzt möchte ich die ESC-Squenz zum öffnen an den Drucker senden.
Dafür habe ich mir (mit Hilfe aus dem Forum :-) ) ein kleines Testtool geschrieben mit dem das auch fast perfekt geht.


Delphi-Quellcode:
procedure TForm10.Button4Click(Sender: TObject);
type
  TPassThroughData = record
    nLen : Integer;
    Data : array[0..4] of byte;
  end;

  procedure DirectPrint(s:String);
  var PTBlock : TPassThroughData;
      res : Integer;
  begin
    PTBlock.nLen := length(s);
//    Showmessage(Inttostr(length(s)));
//    Setlength(PTBlock.data,PTBlock.nLen);
//    Move(S[0],PTBlock.data[0],PTBlock.nLen);
//    StrPCopy(@PTBlock.Data, s);
    Fillchar(PTBlock.Data[0],Sizeof(PTBlock.Data),#0);
    PTBlock.nLen := 5;
    PTBlock.Data[0] := $1B;
    PTBlock.Data[1] := $70;
    PTBlock.Data[2] := $0;
    PTBlock.Data[3] := $32;
    PTBlock.Data[4] := $32;

//    res := Escape(Printer.Handle, PASSTHROUGH, sizeof(TPassThroughData), @PTBlock, nil);
    res := ExtEscape(Printer.Handle,
              PASSTHROUGH,
              sizeof(TPassThroughData),
              @PTBlock,
              0,
              nil);
    case res of
      SP_ERROR : Showmessage('SP_ERROR');
    end;
//    showmessage(Inttostr(res));
  end;
var res : Integer;
begin
  Printer.PrinterIndex := CBDrucker.ItemIndex; // PrinterIndex auf Standardwert setzen
  Printer.BeginDoc;
//  DirectPrint(#27 + 'p' + #0 + #50 + #50);
//  DirectPrint([$1B,$70,$0,$32,$32]);
  DirectPrint('');
  Printer.EndDoc;
  res := GetLastError;
  Showmessage('Error : ' + Inttostr(Res) + #13#10+SysErrorMessage(res));
 
end;
der Ablauf ist der, ich drücke auf einen Button und die Schublade soll auf gehen.
Schließe ich den Drucker an einem Windows XP(Prof. 32 Bit SP3) Rechner an geht die Schublade auf.
Schließe ich aber den gleichen Drucker an einen Windows 7(Prof. 32 Bit ) Rechner reagiert zwar der Drucker aber die Schublade geht nicht auf, obwohl ja exakt das gleiche gemacht wird.

Normale Text-Ausdrucke werden ordentlich ohne Probleme ausgedruckt.
Der Drucker ist per USB angeschlossen

Das Ergebnis von ExtEscape(). ist auf beiden Rechnern „5“
GetLastError ist auf beiden Rechnern immer „0“
Ich habe es auch schon mit Escape() versucht. Ist aber genau das gleiche Ergebnis.
Die Sequenz die gesendet wird ist auch ok, sonst würde die Schublade ja auch dem XP-Rechner auch nicht aufgehen.
An was kann es noch liegen, warum es auf dem XP geht und auf dem Windows 7 nicht.
Jens

sx2008 3. Dez 2013 17:15

AW: ExtEscape Unterschied Windows XP und WinDows 7
 
Schau dir mal diese Unit in der Code-Library an.
http://www.delphipraxis.net/23387-da...er-senden.html
Hierbei wird der Druckertreiber umgangen und nur der Spooler angesprochen.
Das funktioniert zuverlässig mit allen Druckerports (LPT, USB, Netzwerk,...).


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz