![]() |
Fastreport und Seitenauswahl
Hallo,
ich habe vor, Etiketten zu drucken (Endlospapierrolle, daher unterschiedliche Formate innerhalb eines Reports möglich). Die Etiketten sind dann jeweils eine Seite, mal horizontal oder vertikal ausgerichtet. Der Drucker kann das. Dazu habe ich einen Report mit 3 Seiten/Layouts definiert. Jetzt möchte ich nur je Datensatz die Etiketten 1+2 drucken, weil ich das Etikett 3 zB nicht benötige. Ich verwende keine Bänder, sondern weise die Inhalte über OnGetValue direkt zu (per Value oder mit c:=frxReport.FindObject('sn'); if c<>nil then TfrxMemoView(c).Text:='bla';). Problem: es generiert mir die Vorschau eben immer mit allen 3 Seiten. Durch die Forensuche habe ich die Möglichkeit gefunden, mit PrintOptions.PageNumbers eine Auswahl für den Ausdruck zu definieren zB '1,2,4,5'. Aber das reduziert ja die Vorschau nicht. Dann habe ich die Methode probiert, die immer wieder im Forum empfohlen wird, in der jede Seite in einer separaten Datei ist:
Code:
Hierbei bekomme ich aber ständig Zugriffsverletzungen - offenbar, weil ich durch die OnGetValue auf Elemente zugreife, die in dem jeweils geladenen Report nicht drin sind. Also habe ich die mit if c<>nil then behandelt, aber die Exceptions treten auch innerhalb der frxXML auf (frxXML.TfrxXLMItem.GetItems(-1)).frxReport.LoadFromFile('eti1.fr3'); frxReport.PrepareReport(true); frxMainReport.PreviewPages.AddFrom(frxReport); //oder AddPage(...) oder AddSourcePage(...) - was ist der Unterschied?? frxMainReport.ShowPreparedReport; Bei meinen ungezählten Versuchen hatte ich es auch schon ohne Exceptions, dann waren die Seiten aber leer. Was tun? |
AW: Fastreport und Seitenauswahl
Naja, ich hab jetzt eine Lösung gefunden:
Ich nehme doch mein Multipage-Report. In den Report.EngineOptions setze ich DoublePass auf true. Dann bereite ich in vor. Danach habe ich die Anzahl der vorberiteten Seiten und lösche diese raus, die ich nicht brauche, bevor ich die Vorschau anzeige...
Delphi-Quellcode:
Bestimmt geht das auch eleganter...frxReport.PrintOptions.ShowDialog:=false; frxEtiData.RangeEndCount:=Grid1.RowCount-2; frxReport.PrepareReport; i:=frxReport.PreviewPages.Count; repeat dec(i); if frxReport.PreviewPages.Page[i].Name='pAdresse' then if not chk_doAdress.Checked then frxReport.PreviewPages.DeletePage(i) else else if frxReport.PreviewPages.Page[i].Name='pLabel' then if not chk_doLabel.Checked then frxReport.PreviewPages.DeletePage(i) else else if frxReport.PreviewPages.Page[i].Name='pSN' then if not chk_doSN.Checked then frxReport.PreviewPages.DeletePage(i); until i=0; frxReport.ShowPreparedReport; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz