Buchungsjournal drucken

  • Hallo

    (Der Sachverhalt ist mir jetzt auf Englisch zu komplex)

    Also, wir drucken ein Buchungsjournal bei dem festgehalten wird welcher Datensatz auf welcher Seite gedruckt wird. Damit wir erstens fortlaufende Seiten drucken können und zweitens bei Wiederholungen die Seiten gleich aussehen.

    Bei meinem alten Reporting Tool, war Ausgabe und Formatierung eines, so daß ich beim Seitenwechsel reagieren konnte, da ich da noch im Datenstrom war.

    Nun setze ich WpTools 5 VCL ein (was seine guten Gründe hat) und versuche den Mechanismus nachzubauen.

    Wenn ich aber nun im ersten Schritte die Tabelle aufbaue, so ist sie noch unformatiert und ich finden keinen Weg an die Seitennummern ranzukommen.

    Nach der Formatierung erscheint es mir reichlich komplex mich durch die Strukturen zu hangeln, um festzustellen welche Zeile wurde auf welche Seite gedruckt.

    Welchen Weg schlage ich am besten ein, wonach muss ich in der Dokumentation schauen, ich bin noch nicht so richtig fündig geworden.

    Vielen Dank schon einmal.

    Grüße
    Andreas
    ---
    Nachtrag
    OnMeasureObject könnte eine Lösung sein, oder?

    Da erfahre ich auf welche Seite welcher Paragraph kommt. Gibt es eine Möglichkeit an den Paragraphen eine Integer Markierung zu hinterlassen also wie das TAG der Komponten.

    • Offizieller Beitrag

    Hallo,

    man kann dies über die OnTextObjectGetText event lösen. Dieses wird ja für jeden druckvorgang aufgerufen.

    Wenn ein derartiges object sich im Header befindet, kann auf jeder Seite ein anderer Text gedruckt werden, obwohl es sich immer um das gleiche objekt handeln. Genauso funktioniert auch die Seitennummeriereung.

    Ein paar code schnipsel:

    Code
    procedure TForm1.WPRichText1TextObjGetTextEx(RefCanvas: TCanvas;  TXTObject: TWPTextObj; var PrintString: WideString; var WidthInPix,  HeightInPix: Integer; var PaintObject: TWPTextObj; Xres, YRes: Integer);begin  if TXTObject.Name='CHANGEME' then  begin      PrintString := #32+ TxtObjText.Text + #32;      RefCanvas.Font.Height := -Round(YRes/72*9); // 9 pt!      RefCanvas.Font.Color := clRed;      RefCanvas.Brush.Color := clYellow;  end  else if TXTObject.Name='MARKER' then  begin     WidthInPix := Xres div 5;     TXTObject.OnPaint := OnPaintMarker;      // This line is required:     PaintObject :=  TXTObject;     PrintString := '';  end;end;

    Dieses ist interessant, es wird die aktuelle seiten nummer abgefragt