Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alten Drucker ansteuern (https://www.delphipraxis.net/148138-alten-drucker-ansteuern.html)

marteng57 23. Feb 2010 13:27


Alten Drucker ansteuern
 
Hallo,

leider habe ich die Notwendigkeit einen alten Drucker ansteuern zu müssen. Bis Delphi 2007 war das kein Problem, folgendes funktioniert:

Delphi-Quellcode:
  cDruck:=#27#64;      // Initialisierung
  cDruck:=cDruck+#18; // Keine Schmalschrift
  cDruck:=cDruck+#27#67+chr(24)+#13; // Seitenlänge in Zoll * 6
 ....
    cDruck := MyAnsiToOem(cDruck);
    Stream := TFileStream.create('LPT1:',fmOpenWrite);
    try
      Stream.Write(pchar(cDruck)^,length(cDruck));
    finally
      Stream.free;
      cDruck := '';
    end;
wobei die Funktion so hinterlegt ist
Delphi-Quellcode:
  SetLength(Result, Length(Ansi));
  CharToOemBuff( PChar(Ansi), PAnsiChar(Result), Length(Result));
Nach der Umstellung auf D 2009 geht es lt. Kunde nicht mehr, die Resultate sind aber undefinert. d.h. sie schwanken

Eine Umstellung auf cDruck: ansistring hat keine Besserung gebracht.

Habt Ihr einen Tipp für mich?

generic 23. Feb 2010 13:32

Re: Alten Drucker ansteuern
 
Speichere den Stream in eine Datei und schau mal was da ankommt (z.B. mit einem HexEditor)

Delphi-Quellcode:
pchar(cDruck)^,
Müsste das nicht dann auch pAnsiChar sein?
Warum musst du überhaupt casten?

himitsu 23. Feb 2010 13:42

Re: Alten Drucker ansteuern
 
Wenn, dann sollte wohl besser alles auf Ansi umgesellt werden:

Delphi-Quellcode:
function MyAnsiToOem(const Ansi: RawByteString): RawByteString;
begin
  SetLength(Result, Length(Ansi));
  CharToOemBuffA(PAnsiChar(Ansi), PAnsiChar(Result), Length(Result));
end;

var cDruck: RawByteString;

cDruck := #27#64;                              // Initialisierung
cDruck := cDruck + #18;                        // Keine Schmalschrift
cDruck := cDruck + #27#67 + AnsiChar(24) + #13; // Seitenlänge in Zoll * 6

cDruck := MyAnsiToOem(cDruck);
Stream := TFileStream.Create('LPT1:',fmOpenWrite);
try
  Stream.Write(PAnsiChar(cDruck)^, Length(cDruck));
finally
  Stream.Free;
  cDruck := '';
end;

marteng57 1. Mär 2010 12:23

Re: Alten Drucker ansteuern
 
Vielen Dank für Eure Hinweise, die komplette Umstellung auf Ansi hat geholfen.

Gruß :P


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 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