AGB  ·  Datenschutz  ·  Impressum  







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

Text mittig drucken

Ein Thema von Harry M. · begonnen am 15. Mär 2007 · letzter Beitrag vom 15. Mär 2007
Antwort Antwort
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#1

Text mittig drucken

  Alt 15. Mär 2007, 11:04
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?
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Text mittig drucken

  Alt 15. Mär 2007, 11:13
Hallo Harry,

was mir gerade so ins Auge sticht:

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

Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#3

Re: Text mittig drucken

  Alt 15. Mär 2007, 11:18
Prinziell hast Du ja recht, nur ändere ich diesen Wert, wird alles links gedruckt. Genau das ist ja das was ich nicht verstehe.
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Text mittig drucken

  Alt 15. Mär 2007, 11:24
Was hast du da stehen:
Printer.Canvas.TextOut( (iPageWidth DIV 2), iNextLine, 'Heading'); ?
Markus Kinzler
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#5

Re: Text mittig drucken

  Alt 15. Mär 2007, 11:25
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.
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#6

Re: Text mittig drucken

  Alt 15. Mär 2007, 11:28
mkinzler: Jup das steht bei mir.
DelphiKlaus: ((Printer.PageWidth div 2) - Printer.Canvas.TextWidth(S)) scheint ganz gut zu passen.
Danke
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#7

Re: Text mittig drucken

  Alt 15. Mär 2007, 12:41
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;
Angehängte Dateien
Dateityp: pdf titel_311.pdf (1,9 KB, 15x aufgerufen)
Harry
Gruß Harry
www.H-Soft.info
  Mit Zitat antworten Zitat
DelphiKlaus

Registriert seit: 18. Okt 2006
100 Beiträge
 
Delphi 6 Professional
 
#8

Re: Text mittig drucken

  Alt 15. Mär 2007, 12:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von Harry M.
Harry M.

Registriert seit: 29. Okt 2004
Ort: Halle
462 Beiträge
 
#9

Re: Text mittig drucken

  Alt 15. Mär 2007, 13:18
Jup jetzte passt's. Hätte ich auch von allein drauf kommen müssen
Harry
Gruß Harry
www.H-Soft.info
  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 08: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