AGB  ·  Datenschutz  ·  Impressum  







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

Memo Drucken

Ein Thema von TarantelFaser47 · begonnen am 30. Aug 2018 · letzter Beitrag vom 31. Aug 2018
Antwort Antwort
TarantelFaser47

Registriert seit: 30. Jan 2018
14 Beiträge
 
#1

Memo Drucken

  Alt 30. Aug 2018, 17:17
Hi,
ich versuche gerade mich in das Drucken einzuarbeiten und bin auf ein Problem gestoßen.
Code:
procedure TForm1.Button2Click(Sender: TObject);
var i,y : Integer;
begin


  Printer.BeginDoc;
  Printer.NewPage;

  for i := 0 to memo1.Lines.Count do
   begin
    inc(y,5);
    Printer.Canvas.TextOut(2,y,memo1.Lines[i]);
   end;

  Printer.EndDoc;
end;
Wie hier zu sehen ist, versuche ich alle Zeilen eines Memos genau so auszudrucken wie sie, sozusagen, auf dem Bildschirm zu sehen sind (also untereinander).
Es werden auch keine Fehlermeldungen angezeigt, aber auf dem Papier, welches dann aus dem Drucker kommt ist auch nichts drauf .
Ich komme leider nicht dahinter was daran falsch ist ...

Danke für jede Hilfe
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#2

AW: Memo Drucken

  Alt 30. Aug 2018, 20:12
Ist das der komplette Quellcode? Wenn ja, dann wird das y nicht initialisiert und da steht irgendetwas drin, nur nicht das, was du erwartest.

Außerdem ist ein inc(y, 5) etwas wenig für einen Zeilenvorschub auf einem Drucker.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#3

AW: Memo Drucken

  Alt 30. Aug 2018, 22:30
Ich würde mal schätzen, deine Textausgabe liegt außerhalb des bedruckbaren Bereichs deines Druckers. Die meisten Drucker haben eine Rand, auf dem nichts gedrückt werden kann.
Ein Drucker hat eine wesentlich höhere Pixelauflösung (dpi) als z.b. Der Canvas einer Paintbox.
Und du solltest ,al ermitteln welchen Mindestrand dein Drucker hat (meist in mm angegeben) und den umrechnen in Inch und das dann mit der DPI deines Drcker multiplizieren.
Diese Werte addierst du dann auf die x bzw. y Angabe deine Canvas.textout Damit kannst du sicherstellen, dass die Ausgabe schon mal im druckbare Bereich liegt.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (31. Aug 2018 um 09:25 Uhr)
  Mit Zitat antworten Zitat
noisy_master

Registriert seit: 17. Jun 2009
Ort: Wolfenbüttel/Baddeckenstedt
260 Beiträge
 
Delphi XE5 Professional
 
#4

AW: Memo Drucken

  Alt 31. Aug 2018, 07:37
Hi,

wenn du es dir etwas einfacher machen möchtest gibt es bei Torry.net eine nette kleine Komponente namens TLinePrinter. Mit der bekommst du dein Anliegen ganz einfach umgesetzt
Dirk
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Memo Drucken

  Alt 31. Aug 2018, 07:45
Hallo,
SetMapMode (https://www.delphipraxis.net/128708-...-funktion.html) richtig setzen.
Ohne das setzen, sind die y-Werte negativ, weil der 0,0-Punkt links oben ist.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Memo Drucken

  Alt 31. Aug 2018, 09:03
Wie wäre es hiermit?
uses Printers;
Delphi-Quellcode:
procedure PrintStrings(Strings: TStrings);
var
  Prn: TextFile;
  i: word;
begin
  AssignPrn(Prn);
  try
    Rewrite(Prn);
    try
      for i := 0 to Strings.Count - 1 do
        writeln(Prn, Strings.Strings[i]);
    finally
      CloseFile(Prn);
    end;
  except
    on EInOutError do
      MessageDlg('Drucker nicht bereit.', mtError, [mbOk], 0);
  end;
end;
so in etwa Aufrufen:
  PrintStrings(Memo1.Lines);
Oder so:
Delphi-Quellcode:
// pack einen TPrintDialog und TButton auf Form
// hier wird Memo1 Font auch berücksichtigt, falls das eine Rolle spielt
procedure TForm1.Button1Click(Sender: TObject);
var
  MemoOutput: TextFile;
  I: LongInt;
begin
  If PrintDialog1.Execute then
   begin
     AssignPrn(MemoOutput); //assigns a text-file variable to the printer.
     try
       Rewrite(MemoOutput); //creates a new file and opens it
       try
         Printer.Canvas.Font := Memo1.Font; //Sets Font to Printer
         For I := 0 to Memo1.Lines.Count - 1 do
         WriteLn(MemoOutput, Memo1.Lines[I]); //puts it to the Printer Canvas
       finally
         CloseFile(MemoOutput); //terminates the association between file variable and an external disk file
       end;
     except
      on EInOutError do
       MessageDlg('Drucker nicht bereit.', mtError, [mbOk], 0);
     end;
   end;
end;
einen hab ich noch
Delphi-Quellcode:
procedure PrintMemo(const TheMemo: TMemo);
var
  MemoOutput: TextFile;
  I: LongInt;
begin
  If PrintDialog1.Execute then
   begin
     AssignPrn(MemoOutput); //assigns a text-file variable to the printer.
     try
       Rewrite(MemoOutput); //creates a new file and opens it
       try
         Printer.Canvas.Font := TheMemo.Font; //Sets Font to Printer
         For I := 0 to TheMemo.Lines.Count - 1 do
         WriteLn(MemoOutput, TheMemo.Lines[I]); //puts it to the Printer Canvas
       finally
         CloseFile(MemoOutput); //terminates the association between file variable and an external disk file
       end;
     except
      on EInOutError do
       MessageDlg('Drucker nicht bereit.', mtError, [mbOk], 0);
     end;
   end;
end;
Gruß vom KodeZwerg

Geändert von KodeZwerg (31. Aug 2018 um 09:45 Uhr)
  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 10:09 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