Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Textdatei mit vorangestellten Steuercodes (https://www.delphipraxis.net/185816-textdatei-mit-vorangestellten-steuercodes.html)

waldforest 8. Jul 2015 16:11

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:
shelltext :='COPY '+Edit_Outfile.text+' LPT1';
ShellExecute(handle, 'open', PWideChar('cmd.exe'),PWideChar('/C"'+shelltext+'"'),'', SW_SHOW)
zum Druck auf LPT1.
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

p80286 8. Jul 2015 18:11

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

waldforest 8. Jul 2015 18:14

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.

hathor 8. Jul 2015 20:07

AW: Textdatei mit vorangestellten Steuercodes
 
Schon mal BINÄR versucht? 'COPY /B'...

waldforest 8. Jul 2015 20:47

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:
outStream.WriteBuffer(s[1], Length(s));
ändern muss damit die Leerzeichen weg bleiben.:oops:

hathor 8. Jul 2015 21:35

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);

BadenPower 8. Jul 2015 21:37

AW: Textdatei mit vorangestellten Steuercodes
 
Zitat:

Zitat von waldforest (Beitrag 1308099)
Woran könnte dies liegen ?

Einmal ganz plump, hätte ich zuerst an unterschiedliche Druckereinstellungen gedacht.

Der gleiche Drucker heisst ja noch lange nicht, dass er gleich druckt, wenn die Standard-Druck-Einstellungen des jeweiligen Treibers anderst eingestellt sind.

waldforest 8. Jul 2015 21:47

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:
outstream.WriteBuffer(PString(s)^, Length(s)) ;
oder
Code:
outstream.WriteBuffer(PAnsichar(s)^, Length(s)) ;
habe ich probiert, die Umstellung des Procedure auf

Code:
Procedure AppendStringToFile(const s:ANSIstring; const filename:WIDEstring; const prnfile:WIDEstring);
hat die Lösung gebracht.
Vielen Dank

Sir Rufo 8. Jul 2015 22:01

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.

p80286 8. Jul 2015 22:14

AW: Textdatei mit vorangestellten Steuercodes
 
Zitat:

Zitat von Sir Rufo (Beitrag 1308132)
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.

Könntest Du das ein wenig konkretisieren?
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:
Array of AnsiChar
oder einem
Delphi-Quellcode:
AnsiString
ausgelesen werden.

Gruß
K-H


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr.
Seite 1 von 2  1 2      

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