DX QuickReport351
Раніше робив так: Form1.QuickRep1.Prepare; PageCount:=Form1.QuickRep1.QRPrinter.PageCount; Form1.QuickRep1.Preview; // При формуванні використовую PageCount
Але, коли звіти стали по 200-300 сторінок, то використовувати Prepare стало нестерпно, т.к. він виконується за часом стільки ж, як і Preview. На цьому сайті знайшов: >. Там пропонується використовувати: TQRSysData.Data:=qrsPageCount; , але у мене qrsPageCount немає, глянув у більш старі версії QR, він там теж відсутній.
Які будуть ідеї? Заздалегідь дякую.
Зате є PageCount у QrPrinter, а ось звідки вони взяли qrsPageCount, напевно в маренні. І скажи щачем ти робиш QuickRep1.Prepare; так витрачаєш час.
Справа в тому, що якщо зробити так:
вилітає помилка AV на першому рядку.
Так працює: //Form1.QuickRep1.Tag:=Form1.QuickRep1.QRPrinter.PageCount; Form1.QuickRep1.Preview;
У наздогін: Form1.QuickRep1.Tag - це і є моя змінна PageCount
А навіщо тобі окрема змінна, коли значення прямо у QuickRep1.QRPrinter.PageCount; у будь-який момент безпосередньо доступно.
Саме для того, щоб під час Preview заповнити на кожній сторінці: "Сторінка PageNo з PageCount". Якщо це заповнення вішати на подію друку самого QRLabel, то бачитимемо таке:
Сторінка 1 із 1 Сторінка 1 із 2 Сторінка 1 із 3 . Сторінка 1 з 100
і лише після формування всього документа ми вже отримаємо реальний QuickRep1.QRPrinter.PageCount.
Цю частину в тебе виконує Prepare А з QRPrinter треба бути обережніше, він у багатьох місцях встановлюється в NIL, тому звернення до нього дуже небезпечне.
У тебе двічі/тричі відбуватиметься формування сторінок, prepare, preview, print Втратичасу жахливі.
QR карий, я звичайно згоден, ну немає поки що інших варіантів. А QR використовую давно, ми з Вами (Anatoly Podgoretsky) вже не вперше з цього приводу обговорюємо. Переробляти весь проект під новий генератор поки що немає можливості. А клієнти вимагають, щоб на кожній сторінці був підпис кількості сторінок і поточна сторінка, і десь вони мають рацію, це зручно.
QuickRep1.Prepare; QuickRep1.ReportTitle := "This report has" + IntToStr(QuickRep1.QRPrinter.PageCount) + "pages";QuickRep1.QRPrinter.Free; QuickRep1.QRPrinter := nil;QuickRep1.Preview;
Це має тобі допомогти
Так, але знову ж таки: QuickRep1.Prepare;
А так хочеться без нього.
Щоб наперед знати загальну кількість сторінок, треба згенерувати звіт. Так? Так. Отже попередній прогін неминучий. Незважаючи на те, що образ звіту ми вже маємо, він не зовсім задовольняє нас - у ньому немає вказівки на загальну кількість сторінок. Отже ми маємо його згенерувати наново, тобто. другий прогін також неминучий.