AGB  ·  Datenschutz  ·  Impressum  







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

Drucken über Canvas!

Ein Thema von Goldesel · begonnen am 28. Apr 2006 · letzter Beitrag vom 30. Apr 2006
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#1

Drucken über Canvas!

  Alt 28. Apr 2006, 19:56
Hallo,
zuerst einmal zur Veranschaulichung mein Source:

Delphi-Quellcode:
     begin
      Lines := 900;
      table3.First;
      printer.BeginDoc;

      printer.Title:='Ausdruck von My- Bank';
      printer.Canvas.Font.Name:='Times New Roman';

      printer.Canvas.Font.Size:=18;
      printer.Canvas.Font.Style:=[fsunderline,fsbold];
      printer.canvas.TextOut(1750,200,'Auszahlungen');
      printer.Canvas.Font.Style:=[];
      printer.Canvas.Font.Size:=14;
      printer.Canvas.TextOut(350,500,'Ausdruck vom : '+datetostr(now));
     end;
   repeat
   while not table3.Eof do
    begin
      druck1:='Kreditinstitut: '+dbtext5.Caption;
      druck2:='Ort: '+dbtext6.caption;
      druck3:='Betrag: '+dbtext7.Caption+'';
      druck4:='Verwendungszweck: '+dbtext8.Caption;
      druck5:='Datum: '+dbtext9.Caption;
      anzahldb:=table3.RecordCount;
      activedb:=table3.RecNo;

      table3.Next;
   
      printer.Canvas.Font.Size:=14;
      printer.Canvas.Font.Style:=[fsunderline];
      printer.Canvas.TextOut(350,lines-150,'Datensatz '+inttostr(activedb)+' von '+inttostr(anzahldb));
      printer.Canvas.Font.Style:=[];

      printer.Canvas.Font.size:=12;
      printer.Canvas.TextOut(350,lines,druck1);
      printer.Canvas.TextOut(350,lines+150,druck2);
      printer.Canvas.TextOut(350,lines+300,druck3);
      printer.Canvas.TextOut(350,lines+450,druck4);
      printer.Canvas.TextOut(350,lines+600,druck5);

    end;
    until
     (table3.RecNo=anzahldb);
     printer.EndDoc;

  lines:=lines+1000;
    if lines>6000 then
     begin;
      printer.NewPage;
      lines:=200;
     end;
Die bisherige Durckfunktion läuft eigentlich ganz gut. Das einzige Problem was ich habe ist, dass ich nur eine Seite ausdrucken kann. Ich möchte aber pro Seite nur 5 Datensätze haben, d.h. wenn eine bestimmte Line erreicht ist soll eine neue Seite gezogen werden und dort weitergedruckt werden. Ich hoffe mein Problem ist einigermaßen verständlich geschildert

Und noch eine Frage am Rande: Wie kann ich dem Dokument einen Dokumentnamen zuordnen, welcher in der Druckerwarteschlange angezeigt wird?


Vielen Dank
Jannik
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 20:14
Hallo Jannik,

hast du es schon mal mit Delphi-Referenz durchsuchenTPrinter.NewPage versucht?

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#3

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 20:15
Ja allerdings bekomme ich dann nur eine leere Seite ausgegeben.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 20:24
und wenn du zwei Zeilen deines Codes entfernst?

Delphi-Quellcode:
begin
  Lines := 900;
  table3.First;
  printer.BeginDoc;
  repeat

    // Druckbefehle

    lines:=lines+1000;
    if lines>6000 then
    begin;
      Printer.NewPage; // <<-- neu
      lines:=900;
// printer.enddoc; // <<-- entfernen
// printer.BeginDoc; // <<-- entfernen
    end;
  until (table3.RecNo = anzahldb);
  printer.EndDoc;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#5

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 20:32
Zuerst einmal vielen Dank! So klappt es nämlich. Jetzt habe ich allerdings folgendes Problem. Wenn ich zehn Datensätze in der table habe, werden nur neun gedruckt. Das heißt immer der letzte Datensatz wird nicht mitgedruckt? Kann dies am table3.next liegen?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 20:44
Ich habe mit den Datenbank-Komponenten noch nicht gearbeitet. Laut Hilfe gibt es die Eigenschaft Eof. Wäre es damit nicht einfacher?

Delphi-Quellcode:
table3.First;
while not table3.eof do
begin

  // hier Datensatz verarbeiten

  table3.next;
end;
Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#7

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 20:50
Jetzt werden zwar alle Datensätze gedruckt, Datensatz 1-7 auch ordnungsgemäß. Nur Datensatz 8 (also der letzte) wird auf eine neue Seite und etwas weiter unten gedruckt.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 21:12
Die Steuerung der Ausgabe über die Variable lines in deinem Code stimmt wohl noch nicht ganz. Offensichtlich druckst du auch den Header ("Auszahlungen") für jeden Datensatz erneut aus. Diesen Code solltest du aus der Schleife herausziehen und den Header nur 1x pro Seite drucken.

Vielleicht ist es besser, die ausgegebenen Datensätze pro Seite mitzuzählen und beim Erreichen des gewünschten Maximalwertes auf eine neue Seite umzuschalten. Aus diesem Zähler kannst du dann die vertikale Druckposition für jeden Datensatz errechnen. Die jetzige Steuerung über lines ist schwerer nachzuvollziehen; bei einer Änderung (z.B. andere Anzahl Datensätze pro Seite) schleichen sich schnell Fehler ein.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Goldesel
Goldesel

Registriert seit: 22. Nov 2004
Ort: Lübeck
202 Beiträge
 
Delphi 2005 Architect
 
#9

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 21:18
Also, ich habe eben den Code nochmal erneuert (s.o.). Jetzt habe ich allerdings folgendes Problem, nun wird nur der 8 (also der letzte) Datensatz gedruckt und der Header.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#10

Re: Drucken über Canvas!

  Alt 28. Apr 2006, 21:28
Den Fehler solltest du eigentlich sofort sehen, wenn du deinen Code vernünftig einrückst.
In dem linksbündigen Listing übersiehst du allzu leicht logische Fehler im Ablauf.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 10:56 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