Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Mehrere Memo´s auf einem Blatt drucken. (https://www.delphipraxis.net/103192-mehrere-memo%B4s-auf-einem-blatt-drucken.html)

N30N 12. Nov 2007 09:28


Mehrere Memo´s auf einem Blatt drucken.
 
Delphi-Quellcode:
var
  Zeile: Integer;
  PrintText: TextFile;
begin
  AssignPrn(PrintText);
  Rewrite(PrintText);
  Printer.Canvas.Font := Memo1.Font;
  for Zeile := 0 to Memo1.Lines.Count - 1 do
  Writeln(PrintText, Memo1.Lines[Zeile]);
  CloseFile(PrintText);
end;

Das ist der Code, mit dem ich das Memo1 auf meinem Formular ausdrucken lasse. Wie kann ich jetzt zum Beispiel noch mehr Memofelder auf dieses Blatt drucken?

Einfach unterhalb des ersten Memofeldes.


Wie stell ich das an?

marabu 12. Nov 2007 09:32

Re: Mehrere Memo´s auf einem Blatt drucken.
 
Hallo,

du darfst die Druckausgabe erst mit CloseFile() schließen, wenn du fertig bist - sonst wird der Druckjob abgeschlossen und die Seite aus dem Drucker geschoben.

Grüße vom marabu

N30N 12. Nov 2007 09:40

Re: Mehrere Memo´s auf einem Blatt drucken.
 
Super! :)


Habs raus, richtiger Code müsste also folgender sein:


Delphi-Quellcode:
var
  Zeile: Integer;
  PrintText: TextFile;
begin
  AssignPrn(PrintText);
  Rewrite(PrintText);
  Printer.Canvas.Font := Memo1.Font;
  for Zeile := 0 to Memo1.Lines.Count - 1 do
  Writeln(PrintText, Memo1.Lines[Zeile]);

  for Zeile := 0 to Memo2.Lines.Count - 1 do
  Writeln(PrintText, Memo2.Lines[Zeile]);

  CloseFile(PrintText);
end;


Jetzt noch ne kleine Frage: Wie änder ich die Schriftgröße auf dem Ausdruck? Die Schriftgröße im Memofeld soll nicht höher werden!

Und noch eine wo wir grade dabei sind: Wie kann ich es anstellen, dass neben die erste Line von Memo1 auch gleich die erste Line von Memo2 gedruckt wird? Das ganze also nicht untereinander, sondern nebeneinander!

Wär echt klassee wenn das jemand weiss, danke schonmal :)

marabu 12. Nov 2007 09:53

Re: Mehrere Memo´s auf einem Blatt drucken.
 
Was die Font-Size angeht, so schaue dir mal Printer.Canvas.Font an - da gibt es eine Eigenschaft Size.

Parallele Spalten drucken ist einfach, wenn du mit mono-spaced fonts (z.B. Courier) arbeitest. Es genügt dann, wenn du den Text der linken Spalte mit Leerzeichen auffüllst. Ansonsten wird es etwas komplizierter.

N30N 12. Nov 2007 10:53

Re: Mehrere Memo´s auf einem Blatt drucken.
 
Delphi-Quellcode:
var
  Zeile: Integer;
  PrintText: TextFile;
begin
  Printer.Canvas.Font.size :=15;
  AssignPrn(PrintText);
  Rewrite(PrintText);
  Printer.Canvas.Font := Memo1.Font;
  for Zeile := 0 to Memo1.Lines.Count - 1 do
  Writeln(PrintText, Memo1.Lines[Zeile]);

  for Zeile := 0 to Memo2.Lines.Count - 1 do
  Writeln(PrintText, Memo2.Lines[Zeile]);

  CloseFile(PrintText);
end;

Hmmm, also Printer.Canvas.Font.size :=15; habe ich eingefügt, allerdings bringt das garnix beim Ausdruck. Hab ich es vielleicht an die falsche Stelle gesetzt? Hatte es auch schonmmal vor Closefile(Printtext); stehen, allerdings hat sich auf dem Ausdruck auch nichts geändert. Es bleibt bei Schriftgröße 8 :(


Zitat:

Parallele Spalten drucken ist einfach, wenn du mit mono-spaced fonts (z.B. Courier) arbeitest. Es genügt dann, wenn du den Text der linken Spalte mit Leerzeichen auffüllst. Ansonsten wird es etwas komplizierter.

Mir isses relativ wurscht welchen Font ich benutze ^^ Hauptsache ich kann den Inhalt von Memo1 und den Inhalt von Memo2 nebeneinader darstellen. Am besten wäre es ja, Memo1 linksbündig zu machen, und Memo2 rechtsbündig zu machen. Aber wie?? Ich hab keinen Plan :D

marabu 12. Nov 2007 11:01

Re: Mehrere Memo´s auf einem Blatt drucken.
 
Es kann nur so funktionieren:

Delphi-Quellcode:
// ...
begin
  AssignPrn(PrintText);
  Rewrite(PrintText);
  Printer.Canvas.Font.Assign(Memo1.Font);
  Printer.Canvas.Font.size := 15;
  // ...
end;

EDIT: Nachschlag

Delphi-Quellcode:
function FormatLine(lines1, lines2: TStrings;
    index, leftColWidth, colDist, leftMargin: Integer;
    var line: string
): Boolean;
var
  line1, line2: string;
begin
  line1 := IfThen(index < lines1.Count, lines1[index]);
  line2 := IfThen(index < lines2.Count, lines2[index]);
  line := Format('%s%*s%s%s', [
            StringOfChar('+', leftMargin),
            leftColWidth,
            line1,
            StringOfChar('+', colDist),
            line2
          ]);
  Result := (index < lines1.Count) or (index < lines2.Count);
end;

procedure TDemoForm.Button3Click(Sender: TObject);
const
  LEFT_COL_WIDTH = 10;
  COL_DIST = 2;
  LEFT_MARGIN = 5;
var
  index: Integer;
  line: string;
  PrintText: TextFile;
begin
  AssignPrn(PrintText);
  Rewrite(PrintText);
  Printer.Canvas.Font.Assign(Memo1.Font);
  Printer.Canvas.Font.size :=15;

  index := 0;
  while FormatLine(Memo1.Lines, Memo2.Lines, index, LEFT_COL_WIDTH, COL_DIST, LEFT_MARGIN, line) do
  begin
    Writeln(PrintText, line);
    Inc(index);
  end;

  CloseFile(PrintText);
end;
Getippt und nicht getestet.

emsländer 30. Dez 2008 21:37

Re: Mehrere Memo´s auf einem Blatt drucken.
 
Hi,

auch ich habe bisher unter Delphi noch nicht ein einziges Dokument zu Papier gebracht und brauche nun etwas Schwieriges.

Ich muss ein Memo auf einem A4-Blatt mehrspaltig ausdrucken. D.h. wenn es 30 Zeilen in Schrift Arial Größe 6 sind, dann zwei Spalten, wenn es mehr als 60 sind, dann 3.
Sind es mehr als 90 dann muss unter Spalte 1 ein wenig Freiraum und dort weitere 30 Zeilen drucken.

Ich weiß das diese Frage für die Druckprofis hier schon fast Blasphemie ist, aber ich blick durch den Druckkram nun einfach nicht durch.

Gruss und danke für die Geduld

EL


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