AGB  ·  Datenschutz  ·  Impressum  







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

Drucker druckt nur eine Seite

Ein Thema von Bobdimfi · begonnen am 20. Nov 2003 · letzter Beitrag vom 20. Nov 2003
Antwort Antwort
Benutzerbild von Bobdimfi
Bobdimfi

Registriert seit: 3. Jan 2003
1 Beiträge
 
Delphi 4 Standard
 
#1

Drucker druckt nur eine Seite

  Alt 20. Nov 2003, 17:27
Hallo,

ich arbeite zur Zeit an einem Programm, um eine Rangliste zu verwalten.

Unter anderem habe ich vor, diese auszudrucken.

Dazu benutze ich folgende Prozedur:

Delphi-Quellcode:
procedure Drucken;
var
  I: Integer;
  X, Y: Integer;
  Breite, Hoehe, Randlinks, Randoben: Integer;
begin
  if PrintDialog1.Execute then
    with Printer do
    begin
      BeginDoc;
      SetMapMode(Canvas.Handle,MM_LOMETRIC); // 1/10 mm

      with Canvas do
      begin
        with Font do
        begin
          Name := 'Courier New';
          Height := 50;
        end;

        Breite := GetDeviceCaps(Handle,HORZSIZE) * 10;
        Hoehe := GetDeviceCaps(Handle,VERTSIZE) * 10;

        Randlinks := 100;
        Randoben := 200;

        Y := -Randoben;

        for I := 0 to ListBox1.Items.Count-1 do
        begin

          if -Y > (Hoehe - 2 * Randoben) then
          begin
            NewPage; // funktioniert nicht
            Y := -Randoben;
          end;

          TextOut(X,Y,ListBox1.Items[I]);

          Y := Y - TextHeight(ListBox1.Items[I]);
        end;
      end;
      EndDoc;
    end;
end;
Ich habe sie ein bisschen vereinfacht (ListBox1 anstatt Listview mit Subitems).

Die erste Seite wird besstens gedruckt, aber seit ich "MapMode" auf MM_LOMETRIC gesetzt habe,
werden alle weiteren Seiten leer ausgeworfen.

An was könnte das denn liegen?
  Mit Zitat antworten Zitat
Horald

Registriert seit: 29. Okt 2003
11 Beiträge
 
#2

Re: Drucker druckt nur eine Seite

  Alt 20. Nov 2003, 19:28
Hallo,

warum hast du die Druckroutine "hardcodiert". Mach es doch mit Quickreport. Man braucht für Quickreport nicht unbedingt eine Datenbank. Meine Fehlerreports drucke ich auch mit Quickreport. Dies hat einige Vorteile. Quickreport kümmert sich selbst um Papierformat, Seitengröße etc. Und ich kann die Position der Ausgabezeile recht einfach auf einem Report platzieren.
Entscheidend ist dass das onNeeddata-Ereignis überschrieben wird. Solange moredata=true ist macht Quickreport weiter, sobald moredata=false ist wird die Ausgabe beendet. Mit Quickreport könnte dein Source dann etwa so aussehen:

Code:
var i : integer;

procedure TQRDrucken.QRDruckenBeforePrint(Sender: TQuickRep;
  var PrintReport: Boolean);
begin
  i:=0;
end;


procedure TQRDrucken.QRLabel1Print(sender: TObject; var Value: String);
begin
  value:=Form1.ListBox1.Items[i];
end;

procedure TQRDrucken.QRDruckenNeedData(Sender: TObject;
  var MoreData: Boolean);
begin
  moreData:=true;
  if i>Form1.ListBox1.Items.Count then
    begin
    moredata:=false;
    end;
  inc(i);
end;
Probiers mal aus.

Gruß

Horst
  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 10:02 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