LazReport Band Umbruch

Rund um die LCL und andere Komponenten
Antworten
JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

LazReport Band Umbruch

Beitrag von JosefKoller »

Hallo,

es ist zum Verzweifeln.

So wie ein Band mit dem Feld darauf größer ist, als eine Seite wird nicht richtig auf die nächste Seite umgebrochen:

ein ganz einfaches Beispiel:

ein Memofeld, ein DialogOpen, ein frReport und 2 Buttons auf die Form.
Dann in das Memofeld mit dem 1. Button eine Textdatei laden, die größer als eine A4 Seite ist. Mit dem 2. Button showreport anstoßen.

Im Report Designer vorher ein Band (z. b. Reportzusammenfassung) legen, darauf ein Feld, ins Feld eine Variable und dieser Variable im OnGetValue mit parValue den Memotext zuweisen.

Ich kann am Band einstellen, was ich will (gedehnt z. b.) und am Feld einstellen was ich will (gedehnt z. b.), es wird einfach kein richtiger Seitenumbruch erzeugt.

In der Vorschau wird z. b. bei gedehnt im Band und gedehnt im Feld der Inhalt erst auf der dritten Seite angezeigt und da läuft der Text über die Seite raus und wird dann nach drei Zeilen abgeschnitten.

Wie oder was muß ich denn einstellen, damit die Bänder, bzw. die Seitenumbrüche richtig dargestellt werden, wenn der Feldinhalt größer als eine Seite ist?

Danke.

Josef

P.S.
Gibt es für Lazarus was Anderes als den LazReport?

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: LazReport Band Umbruch

Beitrag von m.fuchs »

JosefKoller hat geschrieben:Gibt es für Lazarus was Anderes als den LazReport?


Ich kenne noch Fortes (http://fortes4lazarus.sourceforge.net/). Errinnert mich ein bisschen an QuickReport unter Delphi3.
Sinnvollerweise nutzt du die SVN-Version, die Stable zum Download ist glaub ich recht alt.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: LazReport Band Umbruch

Beitrag von JosefKoller »

Hallo,

Danke für den tipp. fortes4Lazarus hatte ich in meiner Verzweiflung in der Zwischenzeit schon installiert.
Schaut gut aus. Nur, ich finde wenig Dokumentation dazu. Und wenn dann in portugisisch.

Mittlerweile, nach einem halben Nervenzusammenbruch, hab ich mein Problem mit LazReport gelöst.

Wenn mann es weiß, ist es eigentlich ganz einfach.

Mein langer Text steht in einem DBMemo-Feld.

Also gehe ich das Memofeld mit frUserDataSet zeilenweise durch und weise dann einer Variablen im OnGetValue die jeweilige Textzeile zu.

Wenn's interessieren sollte, kann ich die paar Codezeilen auch posten.

Ciao

Josef

VB_Lazarus
Beiträge: 90
Registriert: Do 23. Dez 2010, 19:10
OS, Lazarus, FPC: Windows 10/11 32/64bit, L 2.2.0 32bit, FPC 3.2.2 32bit
CPU-Target: 32Bit

Re: LazReport Band Umbruch

Beitrag von VB_Lazarus »

Hallo,

ich stehe vor dem selben Problem und habe keine Lösung.
Falls Du den Part des Codes zusenden könntest, wäre ich dir sehr dankbar.

Gruß

JosefKoller
Beiträge: 115
Registriert: Sa 17. Mär 2007, 10:53

Re: LazReport Band Umbruch

Beitrag von JosefKoller »

Hallo,

VB_Lazarus hat geschrieben:Hallo,
ich stehe vor dem selben Problem und habe keine Lösung.
Falls Du den Part des Codes zusenden könntest, wäre ich dir sehr dankbar.
Gruß


Es muß ein frUserDataset auf das Formular. Die Ereignisse OnCheckEOF, OnFirst und OnNext werden wie beschrieben belegt.

Das OnGetValue Ereignis der FrReport Komponente wird ebenfalls wie beschrieben belegt.

Code: Alles auswählen

 
...
private
iRow:integer;
...
 
procedure Tfaufschriftbearbeiten.frUserDataset1CheckEOF(Sender: TObject;
  var Eof: Boolean);
begin
  Eof := iRow > DBMemo3.Lines.Count - 1;
end;
 
procedure Tfaufschriftbearbeiten.frUserDataset1First(Sender: TObject);
begin
   iRow:=1;
end;
 
procedure Tfaufschriftbearbeiten.frUserDataset1Next(Sender: TObject);
begin
  inc(iRow);
end;   
 
procedure Tfaufschriftbearbeiten.frSchriftGetValue(const ParName: string;
  var ParValue: variant);
begin
  if ParName = ' vrfuss' then
       ParValue := DBMemo3.Lines.Strings[iRow];
end;
 
 


Im frReportDesigner eine Variable definieren (in meinem Fall vrfuss). Zu errreichen unter Datei -> Variablenliste.
Im frReportDeisgner dann ein Band aufziehen (bei mir ist es ein Subdetail-Band). Dieses Band mit dem frUserDataset verbinden (Doppelklick auf das Band und entsprechendes Dataset auswählen).

Auf dem Band ein Feld ablegen. Dem Feld die definierte Variable zuweisen (in meinem Fall [ vrfuss]).

Das Band und das Feld werden auf gedehnt gestellt (rechter Mausklick auf das Feld und auf das Band).

Anwendung starten und prüfen.
Fertig.

Ich habe damit eine dfm bzw.lfm-Datei geladen, die 600 Seiten im Report erzeugte. Dauerte zwar etwas, aber es funktioniert einwandfrei.

Ciao

Josef

P.S.
Natürlich müssen die in meinem Codebeispiel genannten Formularnamen und der Name des DBMemo-Feldes entsprechend angepaßt werden. Es funktioniert natürlich auch mit einem normalen Memofeld oder mit einer Stringliste. Hauptsache man kann Eintrag für Eintrag oder Zeile für Zeile runterzählen und zuweisen.

Antworten