Mega Code Archive

 
Categories / Delphi / Printing
 

Print or Preview StringGrid with custome setting

Title: Print or Preview StringGrid with custome setting type TrecPrintStrGrid = Record PrCanvas : TCanvas; //Printer or PaintBox Canvas sGrid: TStringGrid; //StringGrid containing data sTitle: String; //Title of document bPrintFlag : Boolean; //Print if True ptXYOffset : TPoint; //Left and Top margins ftTitleFont : TFont; //Font for Title ftHeadingFont : TFont; //Font for Heading row ftDataFont : TFont; //Font for Data bBorderFlag : Boolean //Print border if True end; var recPrintStrGrid : TrecPrintStrGrid; procedure PrintGrid(ArecPrintStrGrid : TrecPrintStrGrid); var iX1, iX2, iY1, iY2, iY3, iTmp , iLoop, iWd : Integer; trTextRect : TRect; begin iWd := 0; with ArecPrintStrGrid, PrCanvas do begin //Calculate Total Width of String Grid Font := ftHeadingFont; for iLoop := 0 to sGrid.ColCount-1 do begin if (TextWidth(sGrid.Cells[iLoop, 0])+5) iWd := iWd + sGrid.ColWidths[iLoop] else iWd := iWd + TextWidth(sGrid.Cells[iLoop, 0])+5; end; // for sGrid.ColCount //Initialize Printer if bPrintFlag then begin Printer.Title := sTitle; Printer.BeginDoc; end; //Output Title Pen.Color := clBlack; Font := ftTitleFont; TextOut(((iWd Div 2) - (TextWidth(sTitle) Div 2)), ptXYOffset.Y, sTitle); //Output Column Data for iLoop := 0 to sGrid.ColCount-1 do begin Font := ftHeadingFont; iX1 := ptXYOffset.X; for iTmp := 0 to (iLoop-1) do if (TextWidth(sGrid.Cells[iTmp, 0])+5) iX1 := iX1 + (sGrid.ColWidths[iTmp]) else iX1 := iX1 + TextWidth(sGrid.Cells[iTmp, 0])+5; iY1 := ptXYOffset.Y + ((TextHeight('Ag')+5) * 2); iX2 := ptXYOffset.X; for iTmp := 0 to iLoop do if (TextWidth(sGrid.Cells[iTmp, 0])+5) iX2 := iX2 + (sGrid.ColWidths[iTmp]) else iX2 := iX2 + TextWidth(sGrid.Cells[iTmp, 0])+5; iY2 := iY1 + TextHeight('Ag'); trTextRect := Rect(iX1, iY1, iX2, iY2); TextRect(trTextRect, trTextRect.Left+5, trTextRect.Top+3, sGrid.Cells[iLoop, 0]); Brush.Color := clWhite; if bBorderFlag then FrameRect(trTextRect); Brush.Style := bsClear; //Output Row Data Font := ftDataFont; iY1 := iY2; iY3 := TextHeight('Ag')+5; for iTmp := 1 to sGrid.RowCount-1 do begin iY2 := iY1 + iY3; trTextRect := Rect(iX1, iY1, iX2, iY2); TextRect(trTextRect, trTextRect.Left+5, trTextRect.Top+3, sGrid.Cells[iLoop, iTmp]); Brush.Color := clBlack; if bBorderFlag then FrameRect(trTextRect); Brush.Style := bsClear; iY1 := iY1 + iY3; end; // for sGrid.RowCount-1 do end; // for sGrid.ColCount-1 if bPrintFlag then Printer.EndDoc; end; // with ArecPrintStrGrid, prCanvas end; { PrintGrid } procedure TfrmSamp.buPrintClick(Sender: TObject); begin with recPrintStrGrid do begin PrCanvas := pbPreview.Canvas; sGrid := stgData; sTitle := 'Print of String Grid'; bPrintFlag := False; ptXYOffset.X := 10; ptXYOffset.Y := 100; ftTitleFont := TFont.Create; with ftTitleFont do begin Name := 'Arial'; Style := [fsBold, fsItalic, fsUnderLine]; Size := 14; end; ftHeadingFont := TFont.Create; with ftHeadingFont do begin Name := 'Arial'; Style := [fsBold]; Size := 12; end; ftDataFont := TFont.Create; with ftDataFont do begin Name := 'Arial'; Style := []; Size := 10; end; bBorderFlag := True; end; //with recPrintStrGrid do PrintGrid(recPrintStrGrid); end;