Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Text mittig drucken (https://www.delphipraxis.net/88434-text-mittig-drucken.html)

Harry M. 15. Mär 2007 11:04


Text mittig drucken
 
Hallöchen zusammmen,
ich verusche eine Rechnung zu drucken.
Kopf und Fuszeile jeweils mittig, Artikel links und Preis rechts am Rand.
Delphi-Quellcode:
var
  iPageWidth, iPageHeight: Cardinal;
  iNextLine: Cardinal;
  I: Integer;
begin
  Printer.Title := 'Titel';

  Printer.Orientation := poPortrait;
  SetMapMode(Printer.Handle, MM_LOMETRIC);

  Printer.BeginDoc;

  SetTextAlign(Printer.Handle, TA_CENTER + TA_TOP);                               // Oben, mittig

  iPageWidth := GetDeviceCaps(Printer.Handle, HorzSize);
  iPageHeight := GetDeviceCaps(Printer.Handle, VertSize);

  Printer.Canvas.Font.Name := Printer.Fonts.Strings[0];

  { Kopfbereich }
  Printer.Canvas.Font.Height := 5 * 10;
  iNextLine := Printer.Canvas.Font.Height;
  Printer.Canvas.TextOut( (iPageWidth * 2), iNextLine, 'Heading');              // Mittig

  Inc(iNextLine, Printer.Canvas.Font.Height);
  Printer.Canvas.Font.Height := 4 * 10;

  Printer.Canvas.TextOut( (iPageWidth * 2), iNextLine, 'Subheading');           // Mittig



  { Haupttetxt}

  for I := 1 to 5 do begin
    Inc(iNextLine, Printer.Canvas.Font.Height);
    Printer.Canvas.Font.Height := 3 * 10;

    SetTextAlign(Printer.Handle, TA_LEFT);
    Printer.Canvas.TextOut( (iPageWidth * 2), iNextLine, 'Artikelname');        // Links

    SetTextAlign(Printer.Handle, TA_RIGHT);                                      // Rechts
    Printer.Canvas.TextOut( (iPageWidth * 2), iNextLine, 'Preis');

    Inc(iNextLine, Printer.Canvas.Font.Height);
    end;


  { Fußzeile }

  SetTextAlign(Printer.Handle, TA_BOTTOM + TA_CENTER);                           // Unten, mittig
  Printer.Canvas.Font.Height := 4 * 10;

  Printer.Canvas.TextOut( (iPageWidth * 2), iNextLine, DateTimeToStr(Now) );     // Mittig

  Printer.EndDoc;
end;
Das Problem ist das Kopf und Fußzeile nicht mittig sind, der Text des Artikes rechts statt links steht und der Preis welcher links statt rechts steht.
Es wäre zwar möglich, TA_LEFT gegen TA_RIGHT zu tauschen.... um Artikel und Preis und die richtige STelle zu bekommen... aber mit solchen Code-Krücken kann ich mich nicht zufrieden geben :? Und das Problem von TA_CENTER behebt so auch nicht. Wie also bekomme ich den Text an die richtige Stelle?

marabu 15. Mär 2007 11:13

Re: Text mittig drucken
 
Hallo Harry,

was mir gerade so ins Auge sticht:

Delphi-Quellcode:
Printer.Canvas.TextOut( (iPageWidth * 2), iNextLine, 'Heading');              // Mittig
Wäre es nicht besser, wenn du halbierst anstelle zu verdoppeln?

Freundliche Grüße

Harry M. 15. Mär 2007 11:18

Re: Text mittig drucken
 
Prinziell hast Du ja recht, nur ändere ich diesen Wert, wird alles links gedruckt. Genau das ist ja das was ich nicht verstehe.

mkinzler 15. Mär 2007 11:24

Re: Text mittig drucken
 
Was hast du da stehen:
Delphi-Quellcode:
Printer.Canvas.TextOut( (iPageWidth DIV 2), iNextLine, 'Heading');
?

DelphiKlaus 15. Mär 2007 11:25

Re: Text mittig drucken
 
Ich mach beim Drucken immer einen ganz anderen Ansatz.

Printer.PageWidth liefert die Anzahl der Pixel in horizontaler Richtung und damit kann man damit linksbündig, mittig oder rechtsbündig positionieren:

Delphi-Quellcode:

  Printer.Canvas.TextOut (Printer.PageWidth * 5 div 100,
                          YPosition,
                          'Linksbündiger Text 5% vom Rand');

  Printer.Canvas.TextOut (Printer.PageWidth * 98 div 100  - Printer.TextWidth ('Rechtsbündiger Text 2% vom Rand'),
                          YPosition,
                          'Rechtsbündiger Text 2% vom Rand');

  Printer.Canvas.TextOut (Printer.PageWidth div 2  - Printer.TextWidth ('Mittiger Text') div 2,
                          YPosition,
                          'Mittiger Text');
Ist jetzt nur mal so hingeschrieben, nicht getestet.

Harry M. 15. Mär 2007 11:28

Re: Text mittig drucken
 
mkinzler: Jup das steht bei mir.
DelphiKlaus:
Delphi-Quellcode:
((Printer.PageWidth div 2) - Printer.Canvas.TextWidth(S))
scheint ganz gut zu passen.
Danke

Harry M. 15. Mär 2007 12:41

Re: Text mittig drucken
 
Liste der Anhänge anzeigen (Anzahl: 1)
So richtig mittig ist es leider irgedwie noch nicht :?
Delphi-Quellcode:
procedure DruckeKleinenBon();
var
  iPageWidth, iPageHeight: Cardinal;
  iNextLine: Cardinal;
  I: Integer;
  Text: String;
begin
  Printer.PrinterIndex := -1;
  Printer.Title := 'Titel';
  iNextLine := 0;
  Printer.Canvas.Font.Name := Printer.Fonts.Strings[0];

  Printer.BeginDoc;


  { Kopfbereich }

  Printer.Canvas.Font.Height := 20 *10;
  Text := 'Heading';
  Printer.Canvas.TextOut( ((Printer.PageWidth div 2) - Printer.Canvas.TextWidth(Text)) , 0, Text);      // Mittig

  Inc(iNextLine, Printer.Canvas.Font.Height);

  Printer.Canvas.Font.Height := 17 *10;
  Text := 'SubHeading';
  Printer.Canvas.TextOut( ((Printer.PageWidth div 2) - Printer.Canvas.TextWidth(Text)) , iNextLine, Text);

  Inc(iNextLine, Printer.Canvas.Font.Height);


  { Haupttetxt }
  for I := 1 to 5 do begin
    Inc(iNextLine, Printer.Canvas.Font.Height);
    Printer.Canvas.Font.Height := 14 * 10;
    Printer.Canvas.TextOut( (Printer.PageWidth * 3 div 100), iNextLine, 'Artikelname');  // Links
    Printer.Canvas.TextOut( ((Printer.PageWidth * 97 div 100)- Printer.Canvas.TextWidth(Text)), iNextLine, 'Preis');       // Rechts
    Inc(iNextLine, Printer.Canvas.Font.Height);
    end;



  { Fußzeile }
  Printer.Canvas.Font.Height := 17 * 10;
  Text := DateTimeToStr(Now);
  Printer.Canvas.TextOut( ((Printer.PageWidth div 2) - Printer.Canvas.TextWidth(Text)), (Printer.PageHeight -Printer.Canvas.Font.Height) , Text);

  Printer.EndDoc;
end;

DelphiKlaus 15. Mär 2007 12:47

Re: Text mittig drucken
 
Der Text müsste jetzt genau in der Mitte enden. Du berechnest erst die Mitte der Seite, PageWidth div 2, und ziehst dann die gesamte Textlänge davon ab. Du Darfst nur die halbe Textlänge abziehen.

Harry M. 15. Mär 2007 13:18

Re: Text mittig drucken
 
Jup jetzte passt's. Hätte ich auch von allein drauf kommen müssen :?


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