From 266cfd42a14d8d46a6616c3b04f454762e4cc297 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Mon, 12 Dec 2022 23:27:06 +0000 Subject: [PATCH] GridPrinter: Beginning to add documentation git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8646 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../gridprinter/docs/gridprinter-wiki.chm | Bin 0 -> 66243 bytes components/gridprinter/docs/wiki/css/wiki.css | 288 +++++++++++++ .../images/GridPrinter_v0=2E2=2E0.h060.png | Bin 0 -> 28384 bytes .../gridprinter/docs/wiki/instructions.txt | 13 + .../gridprinter/docs/wiki/make_docs.bat | 14 + .../docs/wiki/wikixml/GridPrinter.h00.xml | 378 ++++++++++++++++++ components/gridprinter/docs/xml/gridprn.xml | 26 ++ components/gridprinter/gridprinterpkg.lpk | 1 + components/gridprinter/source/gridprn.pas | 2 +- 9 files changed, 721 insertions(+), 1 deletion(-) create mode 100644 components/gridprinter/docs/gridprinter-wiki.chm create mode 100644 components/gridprinter/docs/wiki/css/wiki.css create mode 100644 components/gridprinter/docs/wiki/images/GridPrinter_v0=2E2=2E0.h060.png create mode 100644 components/gridprinter/docs/wiki/instructions.txt create mode 100644 components/gridprinter/docs/wiki/make_docs.bat create mode 100644 components/gridprinter/docs/wiki/wikixml/GridPrinter.h00.xml create mode 100644 components/gridprinter/docs/xml/gridprn.xml diff --git a/components/gridprinter/docs/gridprinter-wiki.chm b/components/gridprinter/docs/gridprinter-wiki.chm new file mode 100644 index 0000000000000000000000000000000000000000..4b1c8c561dff834c7e4af602232029f1eb1e8c01 GIT binary patch literal 66243 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

U|197^n-#xHdbaFBo~x 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 K%A<_RC;)%LFPqc= literal 0 HcmV?d00001 diff --git a/components/gridprinter/docs/wiki/css/wiki.css b/components/gridprinter/docs/wiki/css/wiki.css new file mode 100644 index 000000000..f2360eba6 --- /dev/null +++ b/components/gridprinter/docs/wiki/css/wiki.css @@ -0,0 +1,288 @@ +body { + margin: 0; + color: #111111; + background-color: #FFFFFF; + font-family: "Segoe UI", "Trebuchet MS", Arial, Verdana, sans-serif; + font-size: 10pt; + text-align: left; + padding: 0.7em; +} + + +/* Bi-Directional support */ + +*[lang="he"], *[lang="ar"] /* not supported by IE */ +{ + direction: rtl; + text-align: right; +} + +body[lang="he"], body[lang="ar"] +{ + margin: 0; + color: #111111; + background-color: #FFFFFF; + font-family: "Segoe UI", "Trebuchet MS", Arial, Verdana, sans-serif; + text-align: right; + direction: rtl; + margin-right: 10.2em; + padding-right: 0.7em; +} + +p { + line-height: 1.25em; + margin: 5px 0 5px 0; +} + +a { + color:#4D87CE; + text-decoration:none; +} +a:hover { + color:#2a65ad; +} + +ul li { + list-style-image:url(../pic/backgrounds/li.gif); + text-align:left; + margin-bottom: 2px; + margin-top: 2px; +} + +#logoheader { + width:80%; + margin:0 auto 0 auto; + text-align:right; +} + +#content { + margin:0 40px; + padding:0; + text-align:left; +} + + +/* Headers */ + +h1 { + font-family: "Century Gothic", "Trebuchet MS", "Arial Narrow", Arial, sans-serif; + font-size:150%; + font-weight:normal; + text-transform:uppercase; + border-bottom:1px solid #eeeeee; + margin-top: 10px; +} + +#content h1 { + font-family:"Century Gothic", "Trebuchet MS", "Arial Narrow", Arial, sans-serif; + font-size:150%; + margin-bottom: 10px; +} + +h2 { + font-family: "Century Gothic", "Trebuchet MS", "Arial Narrow", Arial, sans-serif; + font-size: 130%; + margin-top: 25px; + margin-bottom: 10px; + border-bottom: 1px solid #CCCCCC; +} + +h3 { + font-family: "Century Gothic", "Trebuchet MS", "Arial Narrow", Arial, sans-serif; + font-size:120%; + margin-top: 15px; + margin-bottom: 5px; +} + +h4, h5, h6, .subTitle { + font-family: sans-serif; + font-size: 100%; + font-weight: bold; + margin-bottom: 5px; +} + + +/* Code */ + +pre, .pascal { + background-color: #F9F9F9; + border: 1px dashed #2F6FAB; + color: black; + padding: 8px; + overflow: auto; + line-height: 125%; +} + +.num { + color: #0000DD; +} + +.string { + color: #800080; +} + +.var { + color: #000000; +} + +.key { + font-weight:bold; +} + +.sym { + color: red; +} + +.cmt { + color: #777777; + font-style: italic; +} + +blockquote { + margin: 0 3%; +} + + +/* templates */ + +div.template-with-icon { + border-width: 1px; + border-color: #C0C0C0; + padding: 4px 8px 8px 8px; + border-style:solid; + display: block; + margin-top: 10px; + min-height: 28px; +} + +div.icon { + clear: left; + float: left; + margin-right: 8px; + margin-top:0px; +} + +span.keypress { + border: 0.2em outset #cecbc7; + background: #f0ece8; + padding: 0.1em 0.4em; + font-size: 80%; + white-space: nowrap; +} + +div.catlinks { + background-color: #F9F9F9; + border: 1px solid #aaa; + color: #aaa; + padding: 10px; + margin-top: 20px; +} + + +/* images */ + +div.image { + border: 1px solid $C0C0C0; + padding: 3px; + margin: 8px; + font-size: 80%; + vertical-align: text-top; +} + +.image-no-border { + border: 0px; + padding: 0px; + margin: 8px; + font-size: 80%; + vertical-align: text-top; +} + + +/* roadmap.css */ + +table { + margin-top: 10px; + margin-bottom: 10px; + border-collapse: collapse; + padding: 4px; + font-family: "Segoe UI", "Trebuchet MS", Arial, Verdana, sans-serif; + font-size: 10pt; +} + +th { + border: 1px solid #999; + border-collapse: collapse; + padding: 4px; + background-color: #CCCCCC; + font-size: 10pt; + font-weight: bold; + text-align: center; +} + +td { + border: 1px solid #999; + border-collapse: collapse; + background-color: #F7F7F7; + padding: 3px; + font-size: 10pt; +} + +td.working { + background-color: #88FF88; + padding: 3px; + text-align: center; +} + +td.unknown { + background-color: #FFFFFF; + padding: 3px; + text-align: center; +} + +td.partial { + background-color: #FFFF88; + padding: 3px; + text-align: center; +} + +td.not { + background-color: #FF8888; + padding: 3px; + text-align: center; +} + +td.progress { + background-color: #8888FF; + padding: 3px; + text-align: center; +} + +tr.working { + background-color: #88FF88; + padding: 3px; + text-align: center; +} + +tr.unknown { + background-color: #FFFFFF; + padding: 3px; + text-align: center; +} + +tr.partial { + background-color: #FFFF88; + padding: 3px; + text-align: center; +} + +tr.not { + background-color: #FF8888; + padding: 3px; + text-align: center; +} + +tr.progress { + background-color: #8888FF; + padding: 3px; + text-align: center; +} diff --git a/components/gridprinter/docs/wiki/images/GridPrinter_v0=2E2=2E0.h060.png b/components/gridprinter/docs/wiki/images/GridPrinter_v0=2E2=2E0.h060.png new file mode 100644 index 0000000000000000000000000000000000000000..1cfb5ebafbe2d779a38ef1622510a0f98f14a2b6 GIT binary patch literal 28384 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 + + Lazarus wiki + lazaruswiki + http://wiki.freepascal.org/Main_Page + MediaWiki 1.35.6 + case-sensitive + + Media + Special + + Talk + User + User talk + Lazarus wiki + Lazarus wiki talk + File + File talk + MediaWiki + MediaWiki talk + Template + Template talk + Help + Help talk + Category + Category talk + + + + GridPrinter + 0 + 19438 + + 154824 + 154823 + 2022-12-12T22:53:44Z + + Wp + 5796 + + /* Getting Started */ + 154824 + wikitext + text/x-wiki + {{GridPrinter}} + +==About== +[[Image:GridPrinter v0.2.0.png|GridPrinter]] + +<b><tt>TGridPrinter</tt></b> is a component to simplify printing of string grids or other descendants of TCustomGrid. It is bundled together with a ready-made print preview dialog, <b><tt>TGridPrintPreviewDialog</tt></b>, as well as standard actions to trigger printing or to show the preview dialog without writing a single line of code. + +Author: Werner Pamler. + +License: Modified LGPL-2 (with linking exception, like Lazarus LCL). + +==Download and Installation== +===Release version=== +The package is made available for installation by the Online-Package-Manager. Additionally, a zip file with the most recent release version can be found at [https://sourceforge.net/projects/lazarus-ccr/files/GridPrinter/ Lazarus CCR at SourceForge]; unzip the file into any folder; load the file ''gridprinterpkg.lpk'' into Lazarus and click ''Use'' > ''Install''. + +===Development version=== +The current development version is hosted at [https://sourceforge.net/p/lazarus-ccr/svn/HEAD/tree/components/gridprinter/ Lazarus CCR]. Use SVN to check it out, or download the zipped snapshot from this page. Install by loading the ''gridprinterpkg.lpk'' package file into Lazarus and clicking ''Use'' > ''Install''. + +==Getting Started== +====How can I print a StringGrid?==== +Nothing easier when you have the GridPrinter package... +* Drop a <tt>TGridPrinter</tt> component on the form. +* Link its <tt>Grid</tt> property to the StringGrid that you want to print. +* In the <tt>OnClick</tt> handler of the button or menu item that is supposed to start the print-out, call the <tt>Print</tt> method of the <tt>GridPrinter</tt>. That's all. +<syntaxhighlight lang=Pascal> +procedure TForm1.PrintButtonClick(Sender: TObject); +begin + GridPrinter1.Print; +end;</syntaxhighlight> + +====How can I see a preview of the printout before the printer starts to waste paper?==== +* Drop also a <tt>TGridPrintPreviewDialog</tt> on the form. +* Links its <tt>GridPrinter</tt> property to the GridPrinter instance that you had added in the previous exercise. +* In the <tt>OnClick</tt> handler of the button or menu item that is supposed to show the preview, call the <tt>Execute</tt> method of the <tt>GridPrintPreviewDialog</tt>. +* In the preview dialog you can scroll through the pages, zoom to various levels, change page orientation, adjust the page margins by dragging with the mouse, or add a header and/or footer. Of course, you can also print here, too. +<syntaxhighlight lang=Pascal> +procedure TForm1.PrintPreviewButtonClick(Sender: TObject); +begin + GridPrintPreviewDialog1.Execute; +end;</syntaxhighlight> + +====I have several printers and want to make sure that the print-out goes to the right one==== +<tt>TGridPrinter</tt> has a property <tt>ShowPrintDialog</tt> which controls whether a print dialog should be displayed before printing starts. The kind of dialog is determined by the following options: +* <tt>gpdNone</tt>: no print dialog +* <tt>gpdPageSetup</tt>: shows a <tt>TPageSetupDialog</tt>. Here you can select the paper size and set page orientation as well as page margins. +* <tt>gpdPrintDialog</tt>: shows a <tt>TPrintDialog</tt> where you can select the printer, the number of copies and the range of printed pages. +* <tt>gpdPrinterSetup</tt>: shows <tt>TPrinterSetupDialog</tt>. Here you can select the printer, the paper size and the page orientation. + +====Can individual cell formatting by the OnPrepareCanvas event be applied to the printout?==== +Yes. The <tt>TGridPrinter</tt> fires an <tt>OnPrepareCanvas</tt> event, too. Both even can share the same event handler. You only should be careful to use the correct <tt>Canvas</tt> when handling the event: When the <tt>Sender</tt> of the event is the grid, you must refer to the grid's <tt>Canvas</tt>, and when the <tt>Sender</tt> is the <tt>GridPrinter</tt> you must use that <tt>Canvas</tt> exposed by the <tt>GridPrinter</tt>; during printing this is the printer's <tt>Canvas</tt>, and when the preview is painted it is the <tt>Canvas</tt> of a temporary <tt>TBitmap</tt>. + +Let's assume that your <tt>OnPrepareCanvas</tt> handler is supposed to paint the column title in bold type face. This could be done by the following code. The procedure must be assigned to the <tt>OnPrepareCanvas</tt> of both grid and <tt>GridPrinter</tt>. +<syntaxhighlight lang=Pascal> +procedure TForm1.PrepareCanvasHandler(Sender: TObject; ACol, ARow: Integer; AState: TGridDrawState); +var + lCanvas: TCanvas; +begin + if Sender = StringGrid1 then + lCanvas := StringGrid1.Canvas + else + if Sender = GridPrinter1 then + lCanvas := GridPrinter1.Canvas + else + raise Exception.Create('Unknown sender of OnPrepareCanvas.'); + + if ARow < StringGrid1.FixedRows then + lCanvas.Font.Style := [fsBold]; +end; +</syntaxhighlight> + +====Can I print a DBGrid?==== +Yes, but it requires a bit more work than just connecting it to the <tt>Grid</tt> property of the <tt>GridPrinter</tt>. A <tt>DBGrid</tt> displays data from a <tt>TDataset</tt>, but it keeps only a small number of records. But you usually want to print the entire dataset, rather than just the section loaded into the <tt>DBGrid</tt>. + +At first we must tell the <tt>GridPrinter</tt> how many rows it will have to print. This can be done by providing a handler for the event <tt>OnGetRowCount</tt> in which we pass the dataset's <tt>RecordCount</tt> value to the provided parameter. Note that the title row must be included here. Note also that the <tt>RecordCount</tt> property often is only correct after the dataset pointer has been moved to the last record and back to the first record. + +<syntaxhighlight lang=Pascal> +procedure TForm1.GridPrinter1GetRowCount(Sender: TObject; AGrid: TCustomGrid; + var ARowCount: Integer); +var + dbGrid: TDBGrid; +begin + dbGrid := AGrid as TDBGrid; + dbGrid.Datasource.Dataset.Last; + dbGrid.Datasource.Dataset.First; + ARowCount := dbGrid.Datasource.Dataset.RecordCount + 1; // we must 1 for the header row +end; +</syntaxhighlight> + +In order to provide the cell texts for the GridPrinter we must write a handler for the <tt>OnGetCellText</tt> event which is fired whenever the GridPrinter needs any cell text. We will return to this in a minute. We must first clarify the process flow. The easiest way to get the cell texts is by iterating over the entire dataset. Provide a handler for the <tt>OnBeforePrint</tt> event which moves the dataset to its first record: + +<syntaxhighlight lang=Pascal> +procedure TForm1.GridPrinter1BeforePrint(Sender: TObject); +begin + DBGrid1.DataSource.Dataset.First; +end; +</syntaxhighlight> + +Another event, <tt>OnNewLine</tt> fires when the <tt>GridPrinter</tt> has finished printing a line and wants to proceed with the next one. This means we must advance the dataset to its next record. However, if a printed line extends over several pages we must be able to return to this record for completing its printout on the next page. Generally this must be handled by setting bookmarks - please see the example ''dbgrid2'' in the <tt>GridPrinter</tt> installation folder for details. For some flat-file databases such as ''dBase'', ''BufDataset'' etc. there is a simpler way by using the <tt>RecNo</tt> property of the dataset. This is a running number for each record starting at 1 with the first record. So, in the <tt>OnNewLine</tt> event we simply set the dataset's <tt>RecNo</tt> to the row parameter passed to the event: + +<syntaxhighlight lang=Pascal> +procedure TForm1.GridPrinter1NewLine(Sender: TObject; AGrid: TCustomGrid; + ARow: Integer); +var + dbGrid: TDBGrid; +begin + dbGrid := AGrid as TDBGrid; + BufDataset1.RecNo := ARow; // RecNo starts at 1. ARow starts at 1, too, since we display the header row +end; +</syntaxhighlight> + +Then, within each row, the <tt>GridPrinter</tt> proceeds from grid column to grid column. In order to extract the cell text, we determine the column <tt>col</tt> from the <tt>ACol</tt> parameter of the <tt>OnGetCellText</tt>event and thus have access to the dataset field in that column (<tt>col.Field</tt>). Finally, we can query the cell text by calling the field's <tt>AsString</tt> method. Special handling is required for the very first row (<tt>ARow = 0</tt>) which corresponds to the grid titles: +<syntaxhighlight lang=Pascal> +procedure TForm1.GridPrinter1GetCellText(Sender: TObject; AGrid: TCustomGrid; + ACol, ARow: Integer; var AText: String); +var + dbGrid: TDBGrid; + col: TColumn; + colOffs: Integer; +begin + AText := ''; + + dbGrid := AGrid as TDBGrid; + + if (dgIndicator in dbGrid.Options) then + colOffs := 1 + else + colOffs := 0; + + if ACol < colOffs then + exit; + + col := dbGrid.Columns[ACol - colOffs]; + + if (ARow = 0) then + AText := col.FieldName + else + AText := col.Field.AsString; +end; </syntaxhighlight> + +As already mentioned, there are <tt>DBGrid</tt> sample projects in the <tt>GridPrinter</tt> installation to demonstrate the steps for <tt>DBGrid</tt> printing. + +====How can I print a page number?==== +You can print a page number at the top or bottom of every page by activating the header or footer of the <tt>GridPrinter</tt>. For this you select the <tt>Header</tt> (or <tt>Footer</tt> property and switch is <tt>Visible</tt> property to <tt>true</tt>. Then you enter the header (or footer) text in the property <tt>Text</tt>. In order to print the page number use for it the symbol <tt>$PAGE</tt> which is replaced by the number of the currently printed page. Note that the header/footer text consists of a left-aligned, centered and right-aligned part separated by a <tt>'|'</tt> character. So, if you want the page number to be centered the <tt>Text</tt> should be <tt>'|$PAGE|'</tt>, and if you want to include the total page count you could use '|$PAGE of $PAGECOUNT|'. Learn about the other symbols in the [[#TGridPrnHeaderFooter|documentation section below]]. + +== Documentation == + +=== TGridPrinter === + +==== Public methods ==== +* <tt>function CreatePreviewBitmap(APageNo, APercentage: Integer): TBitmap</tt> -- Creates the preview bitmap for the printout of the specified page. The bitmap is scaled by the given percentage relative to the original pager size (100). +* <tt>function GetCellText(ACol, ARow: Integer): String</tt> -- Returns the text to be printed for the grid cell at the given row and column indices. +* <tt>procedure Print</tt> -- Prints the grid. '''Main method of the component'''. +* <tt>procedure ScaleToPages(NumHor, NumVert: Integer)</tt> -- Scales the printout such that it fits on <tt>NumHor</tt> pages horizontally and <tt>NumVert</tt> pages vertically. When <tt>NumHorPages</tt> is 0 (or smaller) only the height is scaled according to <tt>NumVert</tt>. Similarly when <tt>NumVert</tt> is 0 (or smaller). +* <tt>function ScaleX(AValue: Integer): Integer</tt> -- General scaling function for conversion of horizontal screen pixels to pixels on the printer or the preview bitmap. +* <tt>function ScaleY(AValue: Integer): Integer</tt> -- General scaling function for conversion of vertical screen pixels to pixels on the printer or the preview bitmap. +* <tt>procedure UpdatePreview</tt> -- Fires the event <tt>OnUpdatePreview</tt> if the <tt>GridPrinter</tt> is in preview mode. + +==== Public properties ==== +* <tt>Canvas: TCanvas</tt> (read-only) -- Canvas currently used by the <tt>GridPrinter</tt>. This is either the printer canvas or the canvas of the preview bitmap sent to the <tt>TGridPrintPreview</tt> component. +* <tt>ColCount: Integer</tt> (read-only) -- Number of columns to be printed (including fixed columns). +* <tt>ColWidth[AIndex: Integer]: Double</tt> (read-only) -- Width of the specified column, given in pixels of the current output device (printer or preview bitmap). +* <tt>FooterMargin: Integer</tt> (read-only) -- Distance of the footer bottom from the page bottom, in pixels of the current output device. +* <tt>HeaderMargin: Integer</tt> -- Distance of the header top from the page top, in pixels of the current output device. +* <tt>PageHeight: Integer</tt> (read-only) -- Height of the page, in pixels of the current output device. +* <tt>PageWidth: Integer</tt> (read-only) -- Width of the page, in pixels of the current output device. +* <tt>PageRect: TRect</tt> (read-only) -- Rectangle on the page, in pixels of the current output device, available for printing the grid. In other words: size of the page with margins subtracted. +* <tt>PixelsPerInchX: Integer</tt> (read-only) -- Pixel density of the current output device, in horizontal direction. +* <tt>PixelsPerInchY: Integer</tt> (read-only) -- Pixel density of the current output device, in vertical direction. +* <tt>Padding: Integer</tt> (read-only) -- Distance, in pixels of the current output device, between cell text and cell border. +* <tt>PageCount: Integer</tt> (read-only) -- Total number of pages to be printed. +* <tt>PrintPageNumber: Integer</tt> (read-only) -- Number of the page which is currently printed. Pages numbers begin with <tt>'1'</tt>. +* <tt>PrintScaleToNumHorPages: Integer</tt> -- The <tt>PrintScalingFactor</tt> is adjusted such that this number of grid pages fits onto a single sheet of paper horizontally. +* <tt>PrintScaleToNumVertPages: Integer</tt> -- The <tt>PrintScalingFactor</tt> is adjusted such that this number of grid pages fits onto a single sheet of paper vertically. +* <tt>PrintScalingMode: TGridPrnScalingMode</tt> -- Determines how the print output is scaled. +** <tt>smManual</tt> -- The current value of the <tt>PrintScalingFactor</tt> is applied. +** <tt>smFitToWidth</tt> -- The <tt>PrintScalingFactor</tt> is adjusted so that the number of grid pages given by <tt>PrintScaleToNumVertPages</tt> fit onto a single page vertically. +** <tt>smsmFitToHeight</tt> -- The <tt>PrintScalingFactor</tt> is adjusted so that the number of grid pages given by <tt>PrintScaleToNumHorPages</tt> fit onto a single page horizontally. +** <tt>smFitAll</tt> -- The <tt>PrintScalingFactor</tt> is adjusted so that the entire grid fits onto a single page. +* <tt>RowCount: Integer</tt> (read-only) -- Number of rows to be printed (including fixed rows). +* <tt>RowHeight[AIndex: Integer]: Double</tt> (read-only) -- Height of the specified row, given in pixels of the current output device. + +==== Published properties and events ==== +'''Properties''' +* <tt>Grid: TCustomGrid</tt> -- Links to the grid to be printed. Ideally, this should be a <tt>TStringGrid</tt>, but other descendants of <tt>TCustomGrid</tt> can be printed as well when the appropriate event handlers are provided. +* <tt>BorderLineColor: TColor</tt> -- Line color of the outer border of the printed grid. +* <tt>BorderLineWidth: Double</tt> -- Line width of the outer border of the printed grid, in millimeters. If negative, the scaled value of the grid's <tt>GridLineWidth</tt> is used. +* <tt>FileName: String</tt> -- Has no functional use inside the <tt>GridPrinter</tt>. But indicates the name of the file which is printed, if applicable. The filename is displayed in the header or footer of the printout/preview where it is used to replace the symbols <tt>$FULL_FILENAME</tt>, <tt>$FILENAME</tt>, <tt>$PATH</tt> in the header/footer <tt>Text</tt>. +* <tt>FixedLineColor: TColor</tt> -- Line color of the dividing line between fixed and normal cells in the printout/preview. +* <tt>FixedLineWidth: Double</tt> -- Line width of the dividing line between fixed and normal cells in the printout/preview, in millimeters. If negative, the scaled value of the grid's <tt>GridLineWidth</tt> is used. +* <tt>Footer: TGridPrnHeaderFooter</tt> -- Parameters for printing a footer at the bottom of each page. See [[#TGridPrnHeaderFooter|TGridPrnHeaderFooter]]. +* <tt>FromPage: Integer</tt> -- Defines the first page to be printed. Any value less than 1 is interpreted as "first page". +* <tt>GridLineColor: TColor</tt> -- Color of the inner grid lines. +* <tt>GridLineWidth: Double</tt> -- Line width of the inner grid lines, in millimeters. If negative, the scaled value of the grid's <tt>GridLineWidth</tt> is used. +* <tt>Header: TGridPrnHeaderFooter</tt> -- Parameters for printer a header at the top of each page. See [[#TGridPrnHeaderFooter|TGridPrnHeaderFooter]] +* <tt>Margins: TGridPrnMargins</tt> -- Defines page and header/footer margins, in millimeters. See [[#TGridPrnMargins|TGridPrnMargins]]. +* <tt>Monochrome: Boolean</tt> -- Prints the grid only with black color. +* <tt>Options: TGridPrnOptions</tt> -- Options for fine-tuning the printout: +** <tt>gpoCenterHor</tt> -- Centers the printed table on the page horizontally. +** <tt>gpoCenterVert</tt> -- Centers the printed table on the page vertically. +** <tt>gpoHorGridLines</tt> -- Overrides the corresponding grid option and can be used to show/hide horizontal grid lines between the printed rows. +** <tt>gpoVertGridLines</tt> -- Overrides the corresponding grid option and can be used to show/hide vertical grid lines between the printed columns. +** <tt>gpoFixedHorGridLines</tt> -- Can be used to show/hide horizontal grid lines between the fixed cells. +** <tt>gpoFixedVertGridLines</tt> -- Can be used to show/hide vertical grid lines between the fixed cells. +** <tt>gpoHeaderBorderLines</tt> -- Can be used to show/hide dividing lines between the fixed and normal cells. +** <tt>gpoOuterBorderLines</tt> -- Can be used to show/hide outer lines around the grid. +* <tt>Orientation: TPrinterOrientation</tt> -- Defines the page orientation: <tt>poPortrait</tt>, <tt>poLandscape</tt>, <tt>poReverseLandscape</tt>, <tt>poReversePortrait</tt> (declared in the ''Printers'' unit). +* <tt>PrintOrder: TGridPrnOrder</tt> -- Large grids are wrapped into several pages. This property defines whether rows (<tt>poRowsFirst</tt>) or columns (<tt>poColsFirst</tt>) will be completed first. +* <tt>PrintScaleFactor: Double</tt> -- caling factor for the printout. Default: <tt>1.0</tt>. Call the method <tt>ScaleToPages()</tt> if you want to adjust the <tt>PrintScaleFactor</tt> such that the entire printout fits on a given number of pages. +* <tt>ShowPrintDialog: TGridPrnDialog</tt> -- Determines whether one of the Lazarus print dialog should be shown before printing begins: <tt>gpdNone</tt>, <tt>gpdPageSetup</tt>, <tt>gpdPrintDialog</tt>, <tt>gpdPrinterSetup</tt>. +* <tt>ToPage: Integer</tt> -- Defines the last page to be printed. Any value larger than the real page count prints to the last page. + +'''Events''' +* <tt>OnAfterPrint</tt> -- Fires when printing is finished. +* <tt>OnBeforePrint</tt> -- Fires before printing begins. The printer has not yet received its <tt>BeginDoc</tt> command. +* <tt>OnGetCellText</tt> -- Whenever the <tt>GridPrinter</tt> needs to know the text in a specific cell it sends this event. The text to be printed can be passed in a parameter. This way non-standard grid which have different cell technology can be printed as well. +* <tt>OnGetRowCount</tt> -- In this event the application can tell the <tt>GridPrinter</tt> the number of rows to be printed. This is useful when a <tt>DBGrid</tt> which holds only a small parts of all rows of a dataset. +* <tt>OnGetColCount</tt> -- Similar to <tt>OnGetRowCount</tt>, just for columns, rather than rows. +* <tt>OnLinePrinted</tt> -- Fires when the <tt>GridPrinter</tt> has finished printing a specific line. +* <tt>OnNewLine</tt> -- Fires when the <tt>GridPrinter</tt> starts printing a new line of cells. +* <tt>OnNewPage</tt> -- Fires when the <tt>GridPrinter</tt> begins a new page. +* <tt>OnPrepareCanvas</tt> -- Similar to the equally-named event of the grid. When the canvas for printing a cell has been prepared the user has the opportunity here to override the selection of colors, fonts, alignments etc. The handler can be shared between grid and <tt>GridPrinter</tt>, it only must be guaranteed that the correct canvas is used in the code. +* <tt>OnPrintCell</tt> -- When this event has a handler it completely replaces the built-in code for printing a cell. Can be used for printing very specific grids. +* <tt>OnUpdatePreview</tt> -- When the <tt>GridPrinter</tt> runs in preview mode the application can be notified, for example, when some parameter has been changed and the preview can repaint itself. + +===== TGridPrnHeaderFooter ===== +This is the class of the header and footer lines which can be printed at the top and bottom of each page. + +'''Published properties''' +* <tt>Font: TFont</tt> -- Font used for printing the header/footer. +* <tt>LineColor: TColor</tt> -- Color of the dividing line printed below the header/above the footer. +* <tt>LineWidth: Double</tt> -- Line width of the dividing line printed below the header/above the footer, in millimeters. +* <tt>SectionSeparator: String</tt> -- The header/footer text can consist of a left-aligned, centered, and a right-aligned part, all specified together in the <tt>Text</tt>property. Defines the separator character or string between these three sections, default: <tt>'|'</tt>. +* <tt>ShowLine: Boolean</tt> -- Shows/hides the dividing line printed below the header/above the footer. +* <tt>Text: String</tt> -- Contains the text to be displayed in the header/footer. It can consist of up to three sections, separated by the <tt>SectionSeparator</tt>, which are printed at the left, in the center or at the right end of the header/footer. Moreover, the <tt>Text</tt> can contain the following symbols which are replaced during printing by the current values: +** <tt>$DATE</tt> -- Replaced by current date. +** <tt>$PAGECOUNT</tt> -- Total number of pages to be printed. +** <tt>$PAGE</tt> -- Number of the currently printed page. First page number is <tt>1</tt>. +** <tt>$FULL_FILENAME</tt> -- Is replaced by the full path of the <tt>FileName</tt> property of the <tt>GridPrinter</tt>. +** <tt>$FILENAME</tt> -- Is replaced by the <tt>FileName</tt> property of the <tt>GridPrinter</tt> after removal of the file path. +** <tt>$PATH</tt> -- Is replaced by the path to the <tt>FileName</tt> property of the <tt>GridPrinter</tt>. +** <tt>$TIME</tt> -- Replaced by current time. +* <tt>Visible: Boolean</tt> -- Shows/hides the header/footer. + +'''Public properties''' +* <tt>ProcessedText[AIndex: TGridPrnHeaderFooterSection]: String</tt> where <tt>TGridPrnHeaderFooterSection = (hfsLeft, hfsCenter, hfsRight)</tt> -- returns the header/footer text in the specified section after replacement of the symbols. +* <tt>SectionText[AIndex: TGridPrnHeaderFooterSection]: String</tt> where <tt>TGridPrnHeaderFooterSection = (hfsLeft, hfsCenter, hfsRight)</tt> -- returns the specified section <tt>Text</tt>. + +===== TGridPrnMargins ===== +This class collects the parameters for the page margins: + +'''Published properties''' +* <tt>Left: Double</tt> -- Left margin, in millimeters. +* <tt>Top: Double</tt> -- Top margin, in millimeters. +* <tt>Right: Double</tt> -- Right margin, in millimeters. +* <tt>Bottom: Double</tt> -- Bottom margin, in millimeters. +* <tt>Header: Double</tt> -- Margin to the top of the header, in millimeters. Note that it is not checked that the header does not overlap with the grid. +* <tt>Footer: Double</tt> -- Margin to the bottom of the footer, in millimeters. Note that it is not checked that the footer does not overlap with the grid. + +=== TGridPrintPreviewDialog === + +In unit ''GridPrnPreviewDlg''. + +==== Public methods ==== +* <tt>procedure Execute</tt> -- Displays the preview form '''(Main method of the component)'''. + +==== Published properties ==== +* <tt>FormParams: TGridPrintPreviewFormParams</tt> -- Parameters which define size and position of the preview form. See [[#TGridPrintPreviewFormParams|TGridPrintPreviewFormParams]]. +* <tt>GridPrinter: TGridPrinter</tt> -- Links to the <tt>TGridPrinter</tt> instance which actually performs the printing. +* <tt>Options: TGridPrintPreviewOptions</tt> -- Controls the options the user has to modify the preview (declared in unit ''GridPrnPreviewForm'': +** <tt>ppoNavigationBtns</tt> -- Enables/disables page navigation in the preview. +** <tt>ppoNavigationEdit</tt> -- Whows/hides the edit control in the preview toolbar with which the user can navigate to a specific page of the preview. +** <tt>ppoZoomBtns</tt> -- Enables/disables zooming in the preview. +** <tt>ppoPageOrientationBtns</tt> -- Enables/disables selection of page orientation. +** <tt>ppoMarginsBtn</tt> -- Enables/disables page margin selection in the preview. +** <tt>ppoHeaderFooterBtn</tt> -- Enables/disables the possibility to set up the header and footer in a dialog. +** <tt>ppoPrintOrderBtns</tt> -- Enables/disables the possibility to define the order of pages when the entire print-out does not fit onto a single page of paper. +** <tt>ppoCenterBtns</tt> -- Shows/hides the buttons to center the grid on the printed page. +** <tt>ppoScalePrinterBtn</tt> -- shows/hides the button to scale the printer output manually or to force a given count of pages onto a single sheet. +** <tt>ppoPageSetupBtn</tt> -- Shows/hides a toolbar button with a dropdown menu containing options to control the page layout (page orientation, margin selection, etc). +** <tt>ppoPageNumberInfo</tt> -- Shows/hides the display of page number and total page count in the preview form. +** <tt>ppoZoomLevelInfo</tt> -- Shows/hides the display of the preview zoom level (percentage) in the preview form. +* <tt>Zoom: Integer</tt> -- Scaling factor, in percent, applied when the preview bitmap is displayed in the preview form. Default: <tt>100</tt>. +* <tt>ZoomMode: TGridPrintPreviewZoomMode</tt> - Determines how the preview bitmap is scaled by means of the <tt>Zoom</tt> scaling factor: +** <tt>zmCustom</tt> -- The current value of the <tt>Zoom</tt> factor is applied directly. +** <tt>zmFitWidth</tt> -- The <tt>Zoom</tt> factor is adjusted so that the page fits horizontally into the preview window. +** <tt>zmFitHeight</tt> -- The <tt>Zoom</tt> factor is adjusted such that the page fits vertically into the preview window. + +===== TGridPrintPreviewFormParams ===== +* <tt>Left: Integer</tt> -- Position of the left edge of the preview form on the screen, in screen pixels. +* <tt>Top: Integer</tt> -- Position of the top edge of the preview form on the screen, in screen pixels. +* <tt>Width: Integer</tt> -- Width of the preview form, in screen pixels. +* <tt>Height: Integer</tt> -- Height of the preview form, in screen pixels. +* <tt>Position: TPosition</tt> -- Standard LCL form position options overriding the other parameters in the <tt>GridPrintPreviewFormParams</tt>, e.g. <tt>poMainFormCenter</tt> or <tt>poScreenCenter</tt> to center the form over the mainform or on the screen, respectively. + +==== Functionality of the preview form ==== +The preview dialog contains a toolbar with a variety of buttons. By means of the <tt>Options</tt> of the <tt>GridPrintPreviewDialog</tt> it is possible to hide those buttons which are not needed. + +Here is a description of what the buttons can be used for: + +* [[image:gridprn_print.png]] Sends the grid to the printer, as displayed by the preview. +* [[image:gridprn_firstpage.png]] Displays the first page of the preview. +* [[image:gridprn_prevpage.png]] Displays the previous page of the preview. +* [[image:gridprn_nextpage.png]] Displays the next page of the preview. +* [[image:gridprn_lastpage.png]] Displays the last page of the preview. +* [[image:gridprn_zoomin.png]] Enlarges the preview ("zoom in"). +* [[image:gridprn_zoomout.png]] Reduces the preview ("zoom out"). +* [[image:gridprn_zoom100.png]] Original size of the preview page (100%). +* [[image:gridprn_zoomtowidth.png]] Scales the preview image so that it fills the width of the preview window. +* [[image:gridprn_zoomtoheight.png]] Scales the preview image so that it fills the height of the preview window. +* [[image:gridprn_portrait.png]] Switches the page to portrait orientation. +* [[image:gridprn_landscape.png]] Switches the page to landscape orientation. +* [[image:gridprn_headerfooter.png]] Shows a dialog to set up the header and/or footer of the printout. +* [[image:gridprn_pagemargins.png]] Displays the page margins as lines. Drag these lines to adjust the margins. +* [[image:gridprn_rowsfirst.png]] In case of large grids the rows are printed first before advancing to the next block of rows. +* [[image:gridprn_colsfirst.png]] In case of large grids the columns are printed first before advancing to the next block of columns. +* [[image:gridprn_centerhor.png]] Centers the grid on the printed page horizontally. +* [[image:gridprn_centervert.png]] Centers the grid on the printed page vertically. +* [[image:gridprn_scaleprinter.png]] Opens a dialog in which a scale factor for the printout can be defined. This way, for example, a large grid can be "squeezed" onto a single page. +* [[image:gridprn_pagesetup.png]] Opens a dropdown menu with a collection of the commandsabove. This is useful when not all buttons are shown on the toolbar. + +The icons displayed on these buttons are taken from the Lazarus general-purpose image collection provided by [https://www.rhsoft.de/ Roland Hahn]. + +=== GridPrinter Actions === +Unit ''GridPrnActions'' implements two standard actions for further simplification of usage + +==== TGridPrinterAction ==== +When its property <tt>GridPrinter</tt> is linked to a <tt>TGridPrinter</tt> instance and the action is linked to the <tt>Action</tt> property of a control a click on the control executes the <tt>Print</tt> method of the <tt>GridPrinter</tt> without any additional code. + +==== TGridPrintPreviewAction ==== +When its property <tt>PreviewDialog</tt> is linked to a <tt>TGridPrintPreviewDialog</tt> instance and the action is linked to the <tt>Action</tt> property of a control a click on the control runs the <tt>Execute</tt> method of the <tt>GridPrintPreviewDialog</tt> without any additional code. + q4h78wq2qy30qwmkit79blsy1ot5f27 + + + diff --git a/components/gridprinter/docs/xml/gridprn.xml b/components/gridprinter/docs/xml/gridprn.xml new file mode 100644 index 000000000..4ee96a7eb --- /dev/null +++ b/components/gridprinter/docs/xml/gridprn.xml @@ -0,0 +1,26 @@ + +Defines the page margins + Value for the left margin, in millimeters + Value for the top margin, in millimeters + Value for the right margin, in millimeters + Value for the bottom margin + Distance between header (top edge) to the top of the pageIt is not checked that the header overlaps with the body of the printed grid. + + Distance between the footer (bottom edge) and the bottom of the pageIt is not checked that the footer overlaps with the body of the printed grid. + + Constructor of the TGridPrnMargins</prn> classStores the associated TGridPrinter instance for notification when the margins are changed. + + Notifies the associated TGridPrinter instance that margins have been changed. + Defines how a large grid is wrapped over into multiple pages

+ + Defines how the PrintScalingFactor is used
  • smManual - the current value of the PrintScalingFactor is applied directly.
  • smFitToWidth - the PrintScalingFactor is adjusted such that the number of pages specified by PrintScaleToNumHorPages fit on a single printed page.
  • smFitToHeight - the PrintScalingFactor is adjusted such that the number of pages specified by PrintScaleToNumVertPages fit on a single printed page.
  • +
+
+
Identifies the device which is used when the GridPrinter is printing
  • odPrinter - printer
  • odPreview - bitmap for the print preview
  • +
+
+
+ + + diff --git a/components/gridprinter/gridprinterpkg.lpk b/components/gridprinter/gridprinterpkg.lpk index 01b713351..bd6c3aef3 100644 --- a/components/gridprinter/gridprinterpkg.lpk +++ b/components/gridprinter/gridprinterpkg.lpk @@ -52,6 +52,7 @@ + diff --git a/components/gridprinter/source/gridprn.pas b/components/gridprinter/source/gridprn.pas index 48951df80..d30277a38 100644 --- a/components/gridprinter/source/gridprn.pas +++ b/components/gridprinter/source/gridprn.pas @@ -484,7 +484,7 @@ const Result := StringReplace(Result, AParam, s, [rfReplaceAll, rfIgnoreCase]); end; - begin +begin Result := FSectionText[AIndex]; Result := StringReplace(Result, '$DATE', DateToStr(Now), [rfReplaceAll, rfIgnoreCase]); Result := StringReplace(Result, '$TIME', TimeToStr(Now), [rfReplaceAll, rfIgnoreCase]);