![]() |
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? |
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 |
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 :) |
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. |
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:
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 |
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:
Getippt und nicht getestet.
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; |
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:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz