VPE+ employs a banded style of reporting. Bands are implemented within frame components which provide a structure and flow to report generation. Unrestricted nesting of frames permits complex report designs. By the same token, frames are by no means obligatory.
A positional (x, y) cursor moves in synchrony with output, typically obviating the need for explicit coordinates, but not precluding them. Indeed, you can easily address output to any part of any page at any time with versatile single line and multi-line output methods, including horizontal tabbed printing and column style output.
The Concept Behind VPE+
Fundamentally, of course, VPE+ is a code-based reporting system. You write code to output text and other objects to a page. VPE+ balances automation with low level flexibility.
Central to VPE+ is the reporting interface encapsulated by TReportInterface. This non-visual component is so-called because it links the underlying Virtual Print Engine (VPE) both with the code-based framework of VPE+ and the GUI requirements of reporting within an application.
When a report is executed, you begin with a blank "page canvas". This behaves like a (single) default band to which you can target output.
Frame components (TPageFrame, TMasterFrame, TDetailFrame, TLabelFrame and TColumnFrame) introduce fixed and dynamic bands (page headers and footers, group headers and footers, report body bands, mailing labels etc etc) which demarcate specific zones on the page. They also provide cyclic flow and control mechanisms to structure a report and navigate datasets.
Print functions (PrintPos, PrintTab, PrintLine, PrintHeight, PrintLines etc) allow you to write text elements to the page. You can also pre-render text to assess space requirements and wrapping behaviour before actual output. Both plain text and RTF can be handled. The cursor can be readily manipulated to align text with respect to another object or the font metric of another text element anywhere on the page. Positionally, VPE+ is very precise.
Drawing functions (DrawBox, DrawEllipse, DrawLine, DrawImage, DrawArrow, DrawTabBox etc) allow you to draw shapes and images.