AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

zeilenweise drucken

Ein Thema von Hansa · begonnen am 18. Sep 2005 · letzter Beitrag vom 18. Sep 2005
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

zeilenweise drucken

  Alt 18. Sep 2005, 13:38
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#2

Re: zeilenweise drucken

  Alt 18. Sep 2005, 14:13
Mach es doch mit einem TRichEdit feld.
Da kann man dann einfach Print machen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: zeilenweise drucken

  Alt 18. Sep 2005, 14:21
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.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#4

Re: zeilenweise drucken

  Alt 18. Sep 2005, 14:23
Und wo wir schon dabei sind: Die Zeilenhöhe bekommst du mit Delphi-Referenz durchsuchenCanvas.TextHeight
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: zeilenweise drucken

  Alt 18. Sep 2005, 14:36
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:
showmessage(printer.printers[printer.printerindex])
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: zeilenweise drucken

  Alt 18. Sep 2005, 17:16
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 !
Miniaturansicht angehängter Grafiken
scan0101_360.jpg  
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: zeilenweise drucken

  Alt 18. Sep 2005, 17:30
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
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:05 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