uses QRPrntr;
procedure SaveQuickReportToStream(AQuickReport: TQuickRep; AStream: TStream);
var
PL: TQRPageList;
I: Integer;
begin
PL := nil;
try
PL := TQRPageList.Create;
PL.Stream := TQRStream.Create(100000);
AQuickReport.Prepare;
PL.LockList;
tryfor I := 1 to AQuickReport.QRPrinter.PageCount do
PL.AddPage(AQuickReport.QRPrinter.GetPage(I));
PL.Finish;
finally
PL.UnlockList;
end;
PL.Stream.SaveToStream(AStream);
finally
FreeAndNil(PL);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
stream: TFileStream;
begin
stream := TFileStream.Create('c:\quickreport.dat', fmCreate);
QuickReportToStream(QuickRep1, stream);
stream.Free;
end;
Here's a translation of the content into Russian:
Код, предназначенный для сохранения QuickReport в потоке, создает временный список страниц и затем добавляет все страницы отчета в этот список. После этого содержимое временного списка страниц сохраняется в указанном потоке.
Вот несколько способов улучшить контент:
Код кажется не полным, поскольку он не включает объявление формы (TForm1) или создание объекта QuickRep1. Создайте форму и объект QuickRep1 где-то в программе.
Код не обрабатывает потенциальные исключения, которые могут возникнуть при выполнении кода. Добавьте обработку ошибок с помощью блоков try-except.
Вот улучшенная версия кода:
usesQRPrntr,Forms;typeTForm1=class(TForm)Button1:TButton;QuickRep1:TQuickRep;procedureButton1Click(Sender:TObject);private{ Private declarations }public{ Public declarations }end;varForm1:TForm1;implementation{$R *.dfm}procedureTForm1.Button1Click(Sender:TObject);varstream:TFileStream;begintrystream:=TFileStream.Create('c:\quickreport.dat',fmCreate);SaveQuickReportToStream(QuickRep1,stream);stream.Free;exceptonE:ExceptiondoShowMessage(E.Message);end;end;procedureSaveQuickReportToStream(AQuickReport:TQuickRep;AStream:TStream);varPL:TQRPageList;I:Integer;beginPL:=nil;tryPL:=TQRPageList.Create;PL.Stream:=TQRStream.Create(100000);AQuickReport.Prepare;PL.LockList;tryforI:=1toAQuickReport.QRPrinter.PageCountdoPL.AddPage(AQuickReport.QRPrinter.GetPage(I));PL.Finish;finallyPL.UnlockList;end;PL.Stream.SaveToStream(AStream);finallyFreeAndNil(PL);end;end;initialization{$I quickreport.dfm}end.
В улучшенном коде:
Форма объявлена как TForm1.
Создание объекта QuickRep1 удалено, поскольку оно не было предоставлено в оригинальном коде и может быть создано где-то else в программе.
Обработка ошибок с помощью блоков try-except добавлена для обработки потенциальных исключений при выполнении кода.
Если исключение происходит, то сообщение об ошибке будет отображаться в окне сообщений.
Представлен код на Delphi, который позволяет сохранить отчёт QuickReport в поток (stream) для последующего использования или хранения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS