Delphi-PRAXiS
Seite 2 von 2     12   

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)

Sir Rufo 8. Jul 2015 22:24

AW: Textdatei mit vorangestellten Steuercodes
 
Es gibt Zeichen, die in fast allen Codepages durch gleiche Byte-Werte repräsentiert werden. Wenn man nur diese Zeichen verwendet, dann ist die Lösung zwar nicht wirklich korrekt, sie funktioniert einfach nur (für diesen speziellen Fall) zufällig.

Nur weil ich fehlerfrei "Status" lesen, schreiben und sprechen kann heisst es eben nicht, dass ich jetzt Latein oder Esperanto kann, sondern nur dass es dieses Wort eben auch in den beiden Sprachen gibt und sogar das Gleiche bedeutet.

waldforest 9. Jul 2015 06:46

AW: Textdatei mit vorangestellten Steuercodes
 
Hallo,
und wie wäre dies #9 umzusetzen ?

Denn vielleicht ist dieses das eigentliche Problem zwischen Windows XP (treiber) und Win 7 (treiber).

Dejan Vu 9. Jul 2015 07:03

AW: Textdatei mit vorangestellten Steuercodes
 
Zitat:

Zitat von Sir Rufo (Beitrag 1308140)
Nur weil ich fehlerfrei "Status" lesen, schreiben und sprechen kann heisst es eben nicht, dass ich jetzt Latein oder Esperanto kann, sondern nur dass es dieses Wort eben auch in den beiden Sprachen gibt und sogar das Gleiche bedeutet.

Das ist mal eine schöne Metapher für Kodierungen. :thumb:

Union 9. Jul 2015 07:16

AW: Textdatei mit vorangestellten Steuercodes
 
Zitat:

Zitat von Dejan Vu (Beitrag 1308166)
Das ist mal eine schöne Metapher für Kodierungen. :thumb:

Und nennt sich treffend falscher Freund.

Sir Rufo 9. Jul 2015 10:33

AW: Textdatei mit vorangestellten Steuercodes
 
Zitat:

Zitat von waldforest (Beitrag 1308165)
Hallo,
und wie wäre dies #9 umzusetzen ?

Denn vielleicht ist dieses das eigentliche Problem zwischen Windows XP (treiber) und Win 7 (treiber).

Eine Möglichkeit ist die Verwendung von einem StringStream:
Delphi-Quellcode:
var
  MeinTollertext : string;

TStringStream.Create( MeinTollerText, TEncoding.ANSI, False );
oder man holt sich die Bytes vom Encoding
Delphi-Quellcode:
var
  MeinTollerText : string;

TEncoding.ANSI.GetBytes( MeinTollerText );
Und für die Escape-Sequenzen würde ich mir eine kleine Unit schreiben und diese auch nach Bedarf erweitern. Der Code wird dadurch ungemein verständlicher:
Delphi-Quellcode:
// Statt
AppendStringToFile( Chr(27)+'(s18H'+CHR(27)+'(s8V', ... );
// viel besser nachvollziehbar, was hier passieren soll
AppendStringToFile(
  TPCLCodes.PrimaryPitch( 18 ) +
  TPCLCodes.PrimaryHeight( 8 ),
  ... );
und diese Unit würde dann am Anfang so aussehen:
Delphi-Quellcode:
unit PclCodes;

interface

type
  TPCLCodes = class
  public type
    TPrimarySpacing = ( Fixed, Proportional );
  private const
    ESC = #27;
  public const
    PrimarySpacing_Fixed = ESC + '(s0P';
    PrimarySpacing_Proportional = ESC + '(s1P';

    PrimarySmbolSet_ASCII = ESC + '(0U';
    PrimarySmbolSet_Legal = ESC + '(1U';
    PrimarySymbolSet_Win_3_1_Latin1 = ESC + '(9U';
    PrimarySymbolSet_PC_8 = ESC + '(10U';
    PrimarySymbolSet_PC_8_DN = ESC + '(11U';
    PrimarySymbolSet_PC_850 = ESC + '(12U';
    PrimarySymbolSet_Pi_FONT = ESC + '(15U';
    PrimarySymbolSet_PC_852 = ESC + '(17U';
    PrimarySymbolSet_ANSI = ESC + '(19U';

    PrimarySymbolSet_ISO_80 = ESC + '(0D';
    PrimarySmbolSet_ISO_8859_1 = ESC + '(0N';
    PrimarySmbolSet_ISO_8859_2 = ESC + '(2N';
    PrimarySmbolSet_ISO_8859_9 = ESC + '(5N';
    PrimarySymbolSet_Latin1 = PrimarySmbolSet_ISO_8859_1;
    PrimarySymbolSet_Latin2 = PrimarySmbolSet_ISO_8859_2;
    PrimarySymbolSet_Latin5 = PrimarySmbolSet_ISO_8859_9;

    PrimarySymbolSet_Latin1_ANSI = PrimarySymbolSet_ANSI;
  private const
    PrimaryPitchFormat = ESC + '(s%dH';
    PrimaryHeightFormat = ESC + '(s%dV';

    PrimarySpacingValues: array [ TPrimarySpacing ] of string = ( PrimarySpacing_Fixed, PrimarySpacing_Proportional );
  public
    class function PrimarySpacing( Value: TPrimarySpacing ): string;
    class function PrimaryPitch( CharactersPerInch: Integer ): string;
    class function PrimaryHeight( Points: Integer ): string;
  end;

implementation

uses
  System.SysUtils;

{ TPCLCodes }

class function TPCLCodes.PrimaryHeight( Points: Integer ): string;
begin
  Result := Format( PrimaryHeightFormat, [ Points ] );
end;

class function TPCLCodes.PrimaryPitch( CharactersPerInch: Integer ): string;
begin
  Result := Format( PrimaryPitchFormat, [ CharactersPerInch ] );
end;

class function TPCLCodes.PrimarySpacing( Value: TPrimarySpacing ): string;
begin
  Result := PrimarySpacingValues[ Value ];
end;

end.
Ach ja, die Prozedur/Methode würde ich etwas anders benennen:
Delphi-Quellcode:
procedure CombineStreams( ASource1, ASource2, ATarget: TStream );
begin
  ATarget.CopyFrom( ASource1, ASource1.Size );
  ATarget.CopyFrom( ASource2, ASource2.Size );
end;

procedure PrepareFileToPrint( ASourceFileName, ATargetFileName, APrefixStr: string );
var
  LSource1, LSource2, LTarget: TStream;
begin
  LSource1 := nil;
  LSource2 := nil;
  LTarget := nil;
  try
    LSource1 := TStringStream.Create( APrefixStr, TEncoding.ANSI, False );
    LSource2 := TFileStream.Create( ASourceFileName, fmOpenRead or fmShareDenyWrite );
    LTarget := TFileStream.Create( ATargetFileName, fmCreate or fmShareDenyRead );

    CombineStreams( LSource1, LSource2, LTarget );
  finally
    LSource1.Free;
    LSource2.Free;
    LTarget.Free;
  end;
end;

procedure TForm1.Button3Click( Sender: TObject );
begin
  PrepareFileToPrint(
  {} 'test.txt',
  {} 'print.txt',
  {} TPCLCodes.PrimaryPitch( 18 ) + TPCLCodes.PrimaryHeight( 8 ) );
end;

waldforest 9. Jul 2015 14:16

AW: Textdatei mit vorangestellten Steuercodes
 
Hallo,
vielen Dank,
Das bringt mich weiter, werde ich mir in Ruhe ansehen und verstehen wollen/müssen.
:thumb:


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

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