Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi zeilenweise drucken (https://www.delphipraxis.net/53528-zeilenweise-drucken.html)

Hansa 18. Sep 2005 12:38


zeilenweise drucken
 
Hi,

ich muß Listen drucken. Und zwar auf einen Bondrucker Epson TMT-88III. Standardmäßig hat der nur 40 Zeichen / Zeile. Das hier gefällt mir jetzt aber nicht so recht :

Delphi-Quellcode:
  if PrintDialog1.Execute then begin
    printer.BeginDoc;
    printer.Canvas.Font.Size := 8;
showmessage (printer.Printers.Names[1]);
    printer.Canvas.TextOut(1,1,'12345678901234567890123456789012345678901234567890');
    printer.Canvas.TextOut(1,31,'Zeile 2');
    printer.Canvas.TextOut(1,61,'Zeile 3');
    printer.Canvas.TextOut(1,91,'Zeile 4');
    printer.EndDoc;
  end;
Kann man das jetzt nicht verallgemeinern, also ohne die absoluten Pixel-Angaben ? Am liebsten wäre es mir mit writeln zu arbeiten, aber dann gibt es Probleme im Netzwerk mit Freigabenamen usw. Und noch kurze Nebenfrage : wieso zeigt mir die showmessage nichts an ? :shock:

igel457 18. Sep 2005 13:13

Re: zeilenweise drucken
 
Mach es doch mit einem TRichEdit feld.
Da kann man dann einfach Print machen.

Union 18. Sep 2005 13:21

Re: zeilenweise drucken
 
Zitat:

Zitat von Hansa
Standardmäßig hat der nur 40 Zeichen / Zeile.

Also laut meiner Information hat dieser Drucker 42 Zeichen oder bei kleinerer Schriftart 56. Wenn Du schon direkt auf den Canvas druckst, sende doch die Daten aus einem Array in einer Schleife und ermittle die Zeilenposition aus dem Schleifenzähler * Zeilenhöhe -1.

Ultimator 18. Sep 2005 13:23

Re: zeilenweise drucken
 
Und wo wir schon dabei sind: Die Zeilenhöhe bekommst du mit Delphi-Referenz durchsuchenCanvas.TextHeight :stupid:

Union 18. Sep 2005 13:36

Re: zeilenweise drucken
 
Achja, und Dein Showmessage zeigt immer den 2. installierten Drucker an. Wenn Du den Drucker anzeigen willst, der im PrintDialog ausgewählt und auf dem gedruckt wird, musst Du es so machen:
Delphi-Quellcode:
showmessage(printer.printers[printer.printerindex])

Hansa 18. Sep 2005 16:16

Re: zeilenweise drucken
 
Liste der Anhänge anzeigen (Anzahl: 1)
Gut, Printerindex muß das sein, um den Drucker anzuzeigen. Aber man sehe sich mal den Anhang an, der mit folgendem Source erzeugt wurde :

Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
begin
  Listbox1.Items := printer.printers;
  if PrintDialog1.Execute then begin
    printer.BeginDoc;
    printer.Canvas.Font.Size := 6;
showmessage(printer.printers[printer.printerindex]);
    printer.Canvas.TextOut(1,1,'12345678901234567890123456789012345678901234567890');
    printer.Canvas.TextOut(1,31,'Zeile 2');
    printer.Canvas.TextOut(1,61,'Zeile 3');
    printer.Canvas.TextOut(1,91,'Zeile 4');
    printer.Canvas.Font.Size := 8;
    printer.Canvas.TextOut(1,100,'12345678901234567890123456789012345678901234567890');
    printer.Canvas.TextOut(1,131,'Zeile 2');
    printer.Canvas.TextOut(1,161,'Zeile 3');
    printer.Canvas.TextOut(1,191,'Zeile 4');
    printer.Canvas.Font.Size := 10;
    printer.Canvas.TextOut(1,200,'12345678901234567890123456789012345678901234567890');
    printer.Canvas.TextOut(1,231,'Zeile 2');
    printer.Canvas.TextOut(1,261,'Zeile 3');
    printer.Canvas.TextOut(1,291,'Zeile 4');
    printer.Canvas.Font.Size := 12;
    printer.Canvas.TextOut(1,300,'12345678901234567890123456789012345678901234567890');
    printer.Canvas.TextOut(1,331,'Zeile 2');
    printer.Canvas.TextOut(1,361,'Zeile 3');
    printer.Canvas.TextOut(1,391,'Zeile 4');
    printer.EndDoc;
  end;
end;
Unter Windows sieht die Sache ganz anders aus, als unter DOS. Die Festlegung auf Zeichen/Zeile gilt da nicht. Das Ziel ist nun, eine Druckbreite von 48 Zeichen/Zeile zu erreichen (wegen anderer Drucker notwendig). Allerdings sieht man, daß die Zeilenhöhe alles vermasselt, sofern sie in Abhängigkeit von der Druckbreite gesetzt wird. Wegen diverser Drucker will ich nun allerdings auch nicht jeden Drucker einzeln anpassen. Was ich brauche ist einfach zeilenweise zu drucken mit max. 48 Zeichen. Da es sich um Endlosdrucker handelt spielen auch die Seiten keine Rolle. Die gibts nicht !

Union 18. Sep 2005 16:30

Re: zeilenweise drucken
 
Zitat:

Zitat von Hansa
Unter Windows sieht die Sache ganz anders aus, als unter DOS. Die Festlegung auf Zeichen/Zeile gilt da nicht. Das Ziel ist nun, eine Druckbreite von 48 Zeichen/Zeile zu erreichen (wegen anderer Drucker notwendig). Allerdings sieht man, daß die Zeilenhöhe alles vermasselt, sofern sie in Abhängigkeit von der Druckbreite gesetzt wird. Wegen diverser Drucker will ich nun allerdings auch nicht jeden Drucker einzeln anpassen. Was ich brauche ist einfach zeilenweise zu drucken mit max. 48 Zeichen. Da es sich um Endlosdrucker handelt spielen auch die Seiten keine Rolle. Die gibts nicht !

Die Zeilenhöhe hast Du selbst bestimmt... Und wenn Du dann nur 9 pt weitergehst, ist das Ergebnis doch wohl klar. Übrigens, gerade bei solchen "Spezialdruckern" die nur eine begrenzte Anzahl von Schriftarten haben, wirst Du nicht umhinkommen, speziell für diese zu Programmieren. Ich würde Dir aber dringend anraten, eine Reportengine einzusetzen, anstelle das Rad hier wieder neu zu erfinden (FastReport, QuickReport, Rave). Das was Du da programmierst, sieht ja fast nach einer halben NONVcl Anwendung aus - soweit ich weiss, machst Du das aber nicht zum Selbstzweck ;)


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