![]() |
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:
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.
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; 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? |
Re: Text mittig drucken
Hallo Harry,
was mir gerade so ins Auge sticht:
Delphi-Quellcode:
Wäre es nicht besser, wenn du halbierst anstelle zu verdoppeln?
Printer.Canvas.TextOut( (iPageWidth * 2), iNextLine, 'Heading'); // Mittig
Freundliche Grüße |
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.
|
Re: Text mittig drucken
Was hast du da stehen:
Delphi-Quellcode:
?
Printer.Canvas.TextOut( (iPageWidth DIV 2), iNextLine, 'Heading');
|
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:
Ist jetzt nur mal so hingeschrieben, nicht getestet.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'); |
Re: Text mittig drucken
mkinzler: Jup das steht bei mir.
DelphiKlaus:
Delphi-Quellcode:
scheint ganz gut zu passen.
((Printer.PageWidth div 2) - Printer.Canvas.TextWidth(S))
Danke |
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; |
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.
|
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 14:41 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