Для реализации первого варианта необходимо в качестве источника печати указать файл:
if dlgSavePRN.Execute then begin
rsSystem.DoNativeOutput := False;
rsSystem.DefaultDest := rdFile;
rsSystem.SystemSetups := rsSystem.SystemSetups - [ssAllowSetup];
rsSystem.OutputFileName := dlgSavePRN.FileName;
rpProj ect.Execute;
end;
Как видите, здесь мы воспользовались методикой прямой печати, описанной в предыдущем разделе, указав в качестве приемника файл с расширением ргп, выбранный в стандартном диалоге выбора файла.
Если же нужно сохранить проект отчета в файле с расширением rav, можно ИСШШСВЯЬ МеТОД SaveToFile Компонента TRvProject:
if dlgSaveProject.Execute
then RvProjectl.SaveToFile(dlgSaveProject.FileName);
Также просто выполнить и обратную операцию - загрузить в компонент TRvProject проект отчета из файла, но при этом не забудьте закрыть текущий отчет:
RvProjectl.Close;
RvProjectl.LoadFromFile(dlgOpenProject.FileName);
RvProjectl.Open;
Аналогичную функцию выполняет метод procedure SetProjectFile(Value: String);
компонента TRvProject.
КомпонентГЯиЛ/ОЯ Writer
Компонент TRvNDRWriter предназначен для сохранения отчетов в файлах. При этом используется двоичный формат NDR.
Приемник данных определяется свойством type
TStreamMode = (smMemory, smTempFile, smFile, smUser);
property StrearrMode: TStrearrMode ;
smMemory - для вывода данных используется поток в памяти (объект типа TMemoryStream);
smTempFile - данные сохраняются во временном файле, в папке, определенной в операционной системе для хранения временных файлов;
smFile - данные сохраняются в файле;
smUser - данные передаются в поток, заданный разработчиком. Имя файла, в котором будет сохранен отчет, определяется свойством property FileName: String;
А для определения потока используется свойство property Stream: TStream;
Таким образом, если вы хотите использовать для сохранения отчета файл, перед использованием компонент настраивается, например, так:
RvNDRWriterl.StreamMode := smFile;
RvNDRWriterl.FileName := ReportFilePath;
Если вы планируете использовать поток, сделайте следующим образом:
var ReportStream: TMemoryStream;
ReportStream := TMemoryStream.Create;
try
PAMWriterl.StreairMcde := smUser;
RvNDRWriterl.Stream := ReportStream;
finally
ReportSt ream. Free;
end;
Но сначала этот отчет необходимо создать. Для этого используется обширный набор методов, позволяющих отображать текст и графику, создавать таблицы и заполнять их данными. Перед началом работы следует вызвать метод
procedure Start;
а по окончании создания отчета использовать метод
procedure Finish;
Например, следующий фрагмент кода создает в отчете текст с заданным положением:
with RvNDRWriterl do begin Start;
Units := unMM;
SetFont('Times New Roman1, 14);
Bold := True;
OriginX := 0.0;
OriginY := 0.0;
GotoXY(1.0, 12.0) ;
Print('Заголовок#1 ' ) ;
GotoXY(6.0, 18.0);
Println('Заголовок#2 ' ) ;
GotoXY(6.0, 24.0);
Println('Заголовок #3 ' ) ;
GotoXY(6.0, 30.0);
Printin(1 Заголовок #4');
Finish;
end;
А вот так можно нарисовать прямоугольник и разместить в нем изображение:
with RvNDRWriterl do