Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inhalt eines Memos mit dem Printer-Objekt ausdrucken (https://www.delphipraxis.net/96924-inhalt-eines-memos-mit-dem-printer-objekt-ausdrucken.html)

rollstuhlfahrer 1. Aug 2007 19:22


Inhalt eines Memos mit dem Printer-Objekt ausdrucken
 
Hallo Leute,

ich bin dabei ein Programm zu schreiben, das ein Memo-Feld besitzt.
Der Inhalt dieses Memo-Feldes soll dann über den Drucker auf ein Blatt Papier gebracht werden.
Zur Zeit sieht die Prozedur so aus (! nicht funktionsfähig !)
Delphi-Quellcode:
procedure TForm1.Drucken1Click(Sender: TObject);
begin
  IF PrintDialog1.Execute
     THEN BEGIN
          { AssignPrn (DruckDatei);  <-- Das ist die alte Variante, die aber unschöne Seiten
          Rewrite (DruckDatei);      produziert hat.
          writeln (DruckDatei, Memo1.Lines.GetText);
          CloseFile (DruckDatei); }
          Printer.BeginDoc;
          Hoehe := Printer.PageHeight; { Wie groß ist die Seite? }
          ZlDiff := Hoehe DIV 65;      { Zeilenhoehe }

           WITH Printer.Canvas DO BEGIN
                SpDiff :=TextWidth('n'); { Wie breit ist ca. ein Buchstabe? }
                Zl := 3*ZlDiff;
                Sp := 8*SpDiff;
                TextOut (Sp*SpDiff,Zl,Memo1.Lines.GetText); {Hier ist das Problem}
                INC (Zl,ZlDiff);
                      IF Zl > Hoehe - 5*ZlDiff
                         THEN BEGIN
                              Printer.NewPage;
                              Zl := 3*ZlDiff;
                              END;
                END; { WITH }
           Printer.EndDoc;
           END;
end;
Das eigentliche Problem beläuft sich darauf, dass die Zeilen, wie im Quelltext angegeben, nicht einzeln ausgelesen werden. :coder2:
Der ursprüngliche Quellcode dazu kommt von http://noebis.pi-noe.ac.at/delphi/kapitel15.htm

marabu 1. Aug 2007 20:12

Re: Inhalt eines Memos mit dem Printer-Objekt ausdrucken
 
Herzlich willkommen in der Delphi-PRAXiS, rollstuhlfahrer.

Wie du in dem verlinkten Quelltext sehen kannst, werden mit dieser Ausgabetechnik einzelne Zeilen ausgegeben - und zwar an berechneten Stellen. An die Stelle der Schleife über die Datenbank-Tabelle tritt bei dir eine Schleife über die Zeilen deines Memos:

Delphi-Quellcode:
procedure TFormDatei.ButtonDruckClick(Sender: TObject);
var
  Hoehe, ZlDiff, Zl, SpDiff, Sp, ZlNr: WORD;
begin
  IF PrintDialog.Execute THEN
  BEGIN
    Printer.BeginDoc;
    { Wie groß ist die Seite? }
    Hoehe := Printer.PageHeight;
    ZlDiff := Hoehe DIV 65;
    WITH Printer.Canvas DO
    BEGIN
      SpDiff := TextWidth('n'); {Wie breit ist ca. ein Buchstabe?}
      Zl := 3 * ZlDiff;
      Sp := 8 * SpDiff;
      FOR ZlNr := 0 to Pred(Memo.Lines.Count) DO
      BEGIN
        TextOut(Sp, Zl, Memo.Lines[ZlNr]);
        INC(Zl, ZlDiff);
        IF Zl > Hoehe - 5 * ZlDiff THEN
        BEGIN
          Printer.NewPage;
          Zl := 3 * ZlDiff;
        END;
      END; {FOR}
    END; { WITH }
    Printer.EndDoc;
  END;
end; { ButtonDruckClick }
Getippt und nicht getestet.

Freundliche Grüße vom marabu

rollstuhlfahrer 1. Aug 2007 20:30

Re: Inhalt eines Memos mit dem Printer-Objekt ausdrucken
 
thx, das funktioniert genau sowie ich mir das vorgestellt hab.

Damit ist diese offene Frage beantwortet

rollstuhlfahrer


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