![]() |
Textdatei mit vorangestellten Steuercodes
Hallo,
ich habe nach Umstellung eines Rechners von XP auf WIN 7 mit einer kleinen Anwendung ein Problem, welches ich mir nicht erklären kann. Das Programm setzt zu beginn einer Textdatei den ESC-Steuercode für Condensdruck und gibt diese im Anschluss über
Code:
zum Druck auf LPT1.
shelltext :='COPY '+Edit_Outfile.text+' LPT1';
ShellExecute(handle, 'open', PWideChar('cmd.exe'),PWideChar('/C"'+shelltext+'"'),'', SW_SHOW) Auf einem Rechner mit Win XP wird die Datei in Condensed wie gewünscht übers Netzwerk am Drucker ausgedruckt, die gleiche Anwendung am gleichem Drucker unter Win 7 (32 Bit) nicht, hier erfolgt der Druck in den am Drucker eingestellten Standard, Ich denke, die Steuercodes werden nicht richtig übertragen. Woran könnte dies liegen ? Wie kann ich dies beseitigen ? mfg |
AW: Textdatei mit vorangestellten Steuercodes
Hat Dein Drucker einen "ControlModus"?
Nutz ihn und Du siehst was beim Drucker ankommt. ein Netzdrucker mit dem Namen "LPT1"? nicht alltäglich. Gruß K-H |
AW: Textdatei mit vorangestellten Steuercodes
Hallo,
ich leite den Druck über Net use LPT .. auf den Netzwerkdrucker um. Brauche LPT für alte DOS Anwendungen. Wie geschrieben, von den Rechnern im Netz mit XP läufts. ControlModus, kenne ich noch nicht. |
AW: Textdatei mit vorangestellten Steuercodes
Schon mal BINÄR versucht? 'COPY /B'...
|
AW: Textdatei mit vorangestellten Steuercodes
Hallo,
danke, hat aber nichts gebracht. Aber ich denke einen Schritt weiter zu sein, sicher ein Programmierfehler, welcher sich erst ab win7 auswirkt. Folgende Codes sollen an den Beginn einer Textdatei geschrieben werden Chr(27)+'(s18H'+CHR(27)+'(s8V') Dies erfolgt mit folgendem Code
Code:
procedure AppendStringToFile(const s:string; const filename:string; const prnfile:string);
var stream : TStream; outstream : TStream; const SO_END=2; begin ShowMessage(s); if FileExists(filename) then begin stream := TFileStream.Create(filename, fmOpenReadWrite or fmShareDenyWrite); // stream.Seek(0, soFromBeginning); stream.Seek(0, SO_END); end else stream := TFileStream.Create(filename, fmCreate or fmShareDenyWrite); outstream := TFileStream.Create(prnfile, fmCreate or fmShareDenyWrite); try outStream.WriteBuffer(s[1], Length(s)); outstream.CopyFrom(stream, 0); finally stream.Free; outstream.Free; end; end; In der Datei erscheinen aber jeweils noch ein Leerzeichen also Chr(27)+'( s 1 8 H '+CHR(27)+'( s 8 V ') Hier scheint die Ursache zu liegen, verstehe aber noch nicht was ich da in der Zeile
Code:
ändern muss damit die Leerzeichen weg bleiben.:oops:
outStream.WriteBuffer(s[1], Length(s));
|
AW: Textdatei mit vorangestellten Steuercodes
Dann würde ich statt PWideChar PANSIChar bzw. statt String ANSIString versuchen.
Ausserdem: procedure AppendStringToFile(const s:string; const filename:string; const prnfile:string); Besser: procedure AppendStringToFile(const s:ANSIstring; const filename:WIDEstring; const prnfile:WIDEstring); |
AW: Textdatei mit vorangestellten Steuercodes
Zitat:
Der gleiche Drucker heisst ja noch lange nicht, dass er gleich druckt, wenn die Standard-Druck-Einstellungen des jeweiligen Treibers anderst eingestellt sind. |
AW: Textdatei mit vorangestellten Steuercodes
Hallo,
die Druckereinstellungen im Treiber sind die gleichen, wenn ich die Leerzeichen aus den geschriebenen Steuercodes manuell im File lösche wird er auch wie bei XP gedruckt. Den Vorschlag mit
Code:
oder
outstream.WriteBuffer(PString(s)^, Length(s)) ;
Code:
habe ich probiert, die Umstellung des Procedure auf
outstream.WriteBuffer(PAnsichar(s)^, Length(s)) ;
Code:
hat die Lösung gebracht.
Procedure AppendStringToFile(const s:ANSIstring; const filename:WIDEstring; const prnfile:WIDEstring);
Vielen Dank |
AW: Textdatei mit vorangestellten Steuercodes
Das ist wieder eine von diesen Zufallslösungen - zufällig richtig.
Korrekt wäre es aus dem String die Bytefolge in der richtigen Kodierung zu erzeugen und genau diese Bytefolge an den Anfang der Datei zu schreiben. |
AW: Textdatei mit vorangestellten Steuercodes
Zitat:
Nachdem Hathors Hinweis den Erfolg nach sich gezogen hat, sollte klar sein, daß der Drucker (ohne weitere Einstellungen) Ansi-Zeichenfolgen versteht, also sollte die Steuersequenz tunlichst aus einem
Delphi-Quellcode:
oder einem
Array of AnsiChar
Delphi-Quellcode:
ausgelesen werden.
AnsiString
Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz