AGB  ·  Datenschutz  ·  Impressum  







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

Wie Druckerränder einstellen?

Ein Thema von PeterPanino · begonnen am 3. Feb 2007 · letzter Beitrag vom 6. Feb 2007
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Wie Druckerränder einstellen?

  Alt 3. Feb 2007, 23:17
Hallo, weiß jemand wie man die Größe der Ränder des aktuellen Druckers einstellen kann?
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
295 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Wie Druckerränder einstellen?

  Alt 4. Feb 2007, 13:21
Moin auch

Kommt dabei als erstes die Frage auf: "Womit druckst du?" Nicht den Namen des Druckers sondern der Software.

Stefan
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Wie Druckerränder einstellen?

  Alt 4. Feb 2007, 15:15
Zitat von MacGuyver:
Moin auch

Kommt dabei als erstes die Frage auf: "Womit druckst du?" Nicht den Namen des Druckers sondern der Software.

Stefan
Ganz einfach: Mit WriteLn in ein TextFile auf den aktuellen Drucker:

Delphi-Quellcode:
var
  MyFile: TextFile;
begin
  AssignPrn(MyFile);
  Rewrite(MyFile);
  WriteLn(MyFile, 'Mein Text');
Und noch eine zweite Frage: Wie kann ich mitbekommen, wenn auf dem Drucker-Canvas eine überlange Zeile umgebrochen wird?

Printer.Canvas.OnChange := MeinCanvasEventHandler;
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Wie Druckerränder einstellen?

  Alt 5. Feb 2007, 00:52
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;
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Wie Druckerränder einstellen?

  Alt 6. Feb 2007, 02:11
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:
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;
Jetzt bräuchte man nur noch eine Funktion, die überlange Textzeilen vor dem rechten Seitenrand an Wortgrenzen umbricht, dann wäre es perfekt!
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Wie Druckerränder einstellen?

  Alt 6. Feb 2007, 05:05
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;
  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 12:37 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