如何在页面中央打印字符串网格?

问题描述

所以我想在另一个已经打印/页眉和页脚的打印页面的中间/中心打印一个字符串网格,但我不知道如何在页面的中间/中心打印字符串网格? 下面的代码中是否有任何我可以更改的内容?还是我必须完全做其他事情?

预先感谢所有帮助!

我必须打印的页面类型示例(在页面的开放部分):

enter image description here

我用于其他打印按钮之一的代码:

procedure PrintGrid(sGrid: TStringGrid; sTitle: string);
var
  X1,X2: Integer;
  Y1,Y2: Integer;
  TmpI: Integer;
  F: Integer;
  TR: TRect;
begin
  Printer.Title := sTitle;
  Printer.BeginDoc;
  Printer.Canvas.Pen.Color  := 0;
  Printer.Canvas.Font.Name  := 'Times New Roman';
  Printer.Canvas.Font.Size  := 12;
  Printer.Canvas.Font.Style := [fsBold,fsUnderline];
  Printer.Canvas.TextOut(0,100,Printer.Title);
  for F := 1 to sGrid.ColCount - 1 do 
  begin
    X1 := 0;
    for TmpI := 1 to (F - 1) do
      X1 := X1 + 5 * (sGrid.ColWidths[TmpI]);
    Y1 := 300;
    X2 := 0;
    for TmpI := 1 to F do
      X2 := X2 + 5 * (sGrid.ColWidths[TmpI]);
    Y2 := 450;
    TR := Rect(X1,Y1,X2 - 30,Y2);
    Printer.Canvas.Font.Style := [fsBold];
    Printer.Canvas.Font.Size := 7;
    Printer.Canvas.TextRect(TR,X1 + 50,350,sGrid.Cells[F,0]);
    Printer.Canvas.Font.Style := [];
    for TmpI := 1 to sGrid.RowCount - 1 do 
    begin
      Y1 := 150 * TmpI + 300;
      Y2 := 150 * (TmpI + 1) + 300;
      TR := Rect(X1,Y2);
      Printer.Canvas.TextRect(TR,Y1 + 50,TmpI]);
    end;
  end;
  Printer.EndDoc;
end;

亲切的问候 PrimeBeat

解决方法

您可以获得以像素为单位的打印机宽度和高度(Printer.PageWidthPrinter.PageHeight)。您可以使用 Printer.Canvas.TextExtent 获取文本和高度。你有你的网格,所以你知道行数和列数。剩下的就是一些简单的计算。您可以调整字体大小,使网格适合给定的空间。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...