![]() |
Wie Druckerränder einstellen?
Hallo, weiß jemand wie man die Größe der Ränder des aktuellen Druckers einstellen kann?
|
Re: Wie Druckerränder einstellen?
Moin auch :hi:
Kommt dabei als erstes die Frage auf: "Womit druckst du?" Nicht den Namen des Druckers sondern der Software. Stefan |
Re: Wie Druckerränder einstellen?
Zitat:
Delphi-Quellcode:
Und noch eine zweite Frage: Wie kann ich mitbekommen, wenn auf dem Drucker-Canvas eine überlange Zeile umgebrochen wird?
var
MyFile: TextFile; begin AssignPrn(MyFile); Rewrite(MyFile); WriteLn(MyFile, 'Mein Text');
Delphi-Quellcode:
Printer.Canvas.OnChange := MeinCanvasEventHandler;
|
Re: Wie Druckerränder einstellen?
Hallo,
also folgendes müsste für Textdateien funktionieren:
Delphi-Quellcode:
uses Printers;
procedure Ausdrucken(Text: TStringList; x, y: integer); var i, Zeile, FontSize: integer; begin Zeile:= 0; x:= x* 10; y:= y* 10; printer.begindoc; printer.Canvas.Font.Size:= 12; FontSize:= printer.Canvas.Font.Size* 10; for i:= 0 to Text.Count- 1 do begin if Printer.Canvas.TextWidth(Text[i])> printer.PageWidth- x then Showmessage('Zeile '+inttostr(i)+ ' ist zu breit'); Printer.Canvas.TextOut(x, y+ FontSize* Zeile, Text[i]); inc(Zeile); if (y+ FontSize* Zeile> printer.PageHeight) and (Zeile<= Text.Count) then begin Zeile:= 0; printer.NewPage; end; end; printer.enddoc; end; procedure TForm1.Button1Click(Sender: TObject); var Text: TStringList; begin Text:= TStringList.Create; Text.LoadFromFile('C:\Test.txt'); Ausdrucken(Text, 20, 120); Text.Free; end; |
Re: Wie Druckerränder einstellen?
Hallo bitsetter, vielen Dank für den Code!
Ich habe den Code etwas umgemodelt, um auch verschiedene Schriftgrößen innerhalb des Textes zu unterstützen. Was hältst du davon:
Delphi-Quellcode:
Jetzt bräuchte man nur noch eine Funktion, die überlange Textzeilen vor dem rechten Seitenrand an Wortgrenzen umbricht, dann wäre es perfekt!
procedure Ausdrucken(Text: TStringList; x, y: integer);
var i, z: integer; begin x := x * 10; y := y * 10; z := y; Printer.Begindoc; //printer.Canvas.Font.Name := 'Courier New'; for i := 0 to Text.Count - 1 do begin (*if Printer.Canvas.TextWidth(Text[i]) > printer.PageWidth - x then Showmessage('Zeile ' + inttostr(i + 1) + ' ist zu breit');*) if (i mod 3) = 0 then printer.Canvas.Font.Size := 16 else printer.Canvas.Font.Size := 11; Printer.Canvas.TextOut(x, y, Text[i]); y := y + (printer.Canvas.Font.Size * 11); if (y > (printer.PageHeight - z - (printer.Canvas.Font.Size * 10))) then begin y := z; Printer.NewPage; end; end; Printer.Enddoc; end; procedure TForm2.Button1Click(Sender: TObject); var Text: TStringList; begin Text:= TStringList.Create; Text.LoadFromFile('C:\Test.txt'); Ausdrucken(Text, 20, 17); Text.Free; end; |
Re: Wie Druckerränder einstellen?
So, nun ist auch die Umbruchfunktion fertig! Wer sagt denn, dass die Nacht zum Schlafen da ist?
Delphi-Quellcode:
procedure Ausdrucken(Text: TStringList; x, y: integer);
var i, j, z, w, m, c: integer; ThisLine: string; EndOfLine: Boolean; procedure PrintLine(const Line: string); begin Printer.Canvas.TextOut(x, y, Line); y := y + (Printer.Canvas.Font.Size * 11); if (y > (Printer.PageHeight - z - (printer.Canvas.Font.Size * 11))) then begin y := z; Printer.NewPage; end; end; begin x := x * 10; y := y * 10; z := y; Printer.Begindoc; //printer.Canvas.Font.Name := 'Courier New'; for i := 0 to Text.Count - 1 do begin m := i mod 8; case m of 0: printer.Canvas.Font.Size := 16; 1: printer.Canvas.Font.Size := 15; 2: printer.Canvas.Font.Size := 14; 3: printer.Canvas.Font.Size := 13; 4: printer.Canvas.Font.Size := 12; 5: printer.Canvas.Font.Size := 11; 6: printer.Canvas.Font.Size := 10; 7: printer.Canvas.Font.Size := 9; end; //Überlange Zeilen an Wortgrenzen umbrechen: ThisLine := Text[i]; w := 1; //? c := 0; EndOfLine := False; repeat begin for j := 1 to Length(ThisLine) do begin if ThisLine[j] = ' ' then w := j - 1 //Wortgrenze merken else if ThisLine[j] in [',', '.', ';', ':', '!', '?', '-'] then w := j; //Wortgrenze merken if (Printer.Canvas.TextWidth(Copy(ThisLine, 1, j))) > (printer.PageWidth - (x * 2)) then begin PrintLine(Copy(ThisLine, 1, w)); //Rest der Zeile: ThisLine := Trim(Copy(ThisLine, w + 1, Length(ThisLine))); BREAK; end; if j = Length(ThisLine) then begin EndOfLine := True; PrintLine(ThisLine); end; end; //Zur Sicherheit: if c > Text.Count then BREAK; Inc(c); end; until EndOfLine; end; Printer.Enddoc; end; procedure TForm2.Button1Click(Sender: TObject); var Text: TStringList; begin Text:= TStringList.Create; Text.LoadFromFile('C:\Test.txt'); Ausdrucken(Text, 20, 17); Text.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:32 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