AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Textdatei mit vorangestellten Steuercodes
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei mit vorangestellten Steuercodes

Ein Thema von waldforest · begonnen am 8. Jul 2015 · letzter Beitrag vom 9. Jul 2015
Antwort Antwort
Seite 1 von 2  1 2      
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#1

Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 17:11
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
mfg wf
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 19:11
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 19:14
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.
mfg wf
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#4

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 21:07
Schon mal BINÄR versucht? 'COPY /B'...
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#5

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 21:47
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.
mfg wf
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#6

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 22:35
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);

Geändert von hathor ( 8. Jul 2015 um 22:39 Uhr)
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#7

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 22:37
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.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
waldforest

Registriert seit: 8. Mai 2005
366 Beiträge
 
Delphi XE3 Enterprise
 
#8

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 22:47
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
mfg wf

Geändert von waldforest ( 8. Jul 2015 um 22:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 23:01
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Textdatei mit vorangestellten Steuercodes

  Alt 8. Jul 2015, 23:14
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 Array of AnsiChar oder einem AnsiString ausgelesen werden.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:32 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