Компонент TRvNDRWriter
Компонент TRvNDRWriter предназначен для сохранения отчетов в файлах. При этом используется двоичный формат NDR.
Приемник данных определяется свойством:
type TStreamMode = (smMemory, smTempFile, smFile, smUser); property StreamMode: TStreamMode;
Где:
- smMemory – для вывода данных используется поток в памяти (объект типа TMemoryStream);
- smTempFile – данные сохраняются во временном файле, в папке, определенной в операционной системе для хранения временных файлов;
- smFile – данные сохраняются в файле;
- smUser – данные передаются в поток, заданный разработчиком.
Имя файла, в котором будет сохранен отчет, определяется свойством:
property FileName: String;
А для определения потока используется свойство:
property Stream: TStream;
Таким образом, если вы хотите использовать для сохранения отчета файл, перед использованием компонент настраивается, например, так:
RvNDRWriterl.StreamMode: = smFile; RvNDRWriterl.FileName: = ReportFilePath;
Если вы планируете использовать поток, сделайте следующим образом:
var ReportStreara: TMemoryStreain; ReportStream: = TMemoryStream.Create/try RvNDRWriterl.StreamMode: = smUser; RvNDRWriterl.Stream: = ReportStream; finally ReportStream.Free; end;
Но сначала этот отчет необходимо создать. Для этого используется обширный набор методов, позволяющих отображать текст и графику, создавать таблицы и заполнять их данными. Перед началом работы следует вызвать метод:
procedure Start;
…а по окончании создания отчета использовать метод:
procedure Finish;
Например, следующий фрагмент кода создает в отчете текст с заданным положением:
with RvNDRWriterl do begin Start; Units: = unMM; SetFont('Times New Roman', 14); Bold: = True; OriginX: = 0.0; OriginY: = 0.0; GotoXY(1.0, 12.0); Print('Заголовок ttl'); GotoXY(6.0, 18.0); Println('Заголовок 12'); GotoXY(6.0, 24.0); Println('Заголовок 13'); GotoXY(6.0, 30.0); PrintIn('Заголовок #4'); Finish; end;
А вот так можно нарисовать прямоугольник и разместить в нем изображение:
with RvNDRWriterl do begin Start; Units: = unMM; SetBrush(clBlue, bsSolid, nil); Rectangle (5.0, 35.0, 65.0, 95.0); Bitmap: = TBitmap.Create; Bitmap.LoadFromFile('factory.BMP'); PrintBitmapRect(10.0, 40.0, 60.0, 90.0, Bitmap); Bitmap.Free; Finish; end;
В данном фрагменте кода метод:
procedure PrintBitmapRect(X1,Y1,X2,Y2: double; Bitmap: TBitmap);
…отображает растровое изображение Bitmap в прямоугольнике, обеспечивая его масштабирование в соответствии с размерами прямоугольника.
Внимание
Компонент TRvNDRWriter имеет свойство canvas (см. гл. 10), но использовать его нельзя – любые операции с канвой не возымеют действия и ваши труды не будут сохранены.
При использовании пары методов start и Finish не нужно предпринимать никаких дополнительных усилий для сохранения отчета – это будет сделано Методом Finish.
Множество других свойств и методов компонента (мы не будем останавливаться на них специально, т. к. их использование достаточно прозрачно) обеспечивают оформление отчета, управление страницами, настройку принтера и т. д.