카테고리 없음

[일반/컴포넌트] TStringGrid 인쇄하기

[롯벨] 2023. 9. 5. 08:13
procedure TForm1.PrintBtnClick(Sender: TObject);
var
  i:integer;
  leftmargin, rightmargin, topmargin:integer;
  savewidth,saveheight:integer;
  savecolw,saverowh:array of integer;
  SavefontSize, SaveGL:integer;
  scalev,scaleh,scale:single;

begin
if PrintDialog1.Execute then
    with Printer, stringgrid1 do
    begin
      BeginDoc;
      {set print margins}
      leftmargin:=pagewidth div 10;
      rightmargin:=pagewidth-leftmargin;
      topmargin:= pageheight div 10;
      {save stringgrid sizes}
      savewidth:=width;
      saveheight:=height;
      setlength(savecolw,colcount);
      setlength(saverowh,rowcount);
      for i:=0 to colcount-1 do savecolw[i]:=colwidths[i];
      for i:= 0 to rowcount-1 do saverowh[i]:=rowheights[i];
      savefontsize:=font.size;
      saveGL:=gridLineWidth;

    {scale stringgrid up}
      scalev:=(pageheight-2*topmargin) / height;
      scaleh:=(rightmargin - leftmargin) / width;
      if scalev<scaleh then scale:=scalev else scale:=scaleh;
      width:=trunc(scale*width);
      height:= trunc(scale*height);
      for i:=0 to colcount-1 do colwidths[i]:=trunc(scale*colwidths[i]);
      for i:= 0 to rowcount-1 do rowheights[i]:=trunc(scale*rowheights[i]);
      font.size:=trunc(scale*font.size);
      gridlinewidth:=trunc(scale*gridlinewidth);

    {print it}
      paintto(printer.handle,leftmargin,topmargin);

    {and put size back}
      width:=savewidth;
      height:=saveheight;
      for i:=0 to colcount-1 do colwidths[i]:=savecolw[i];
      for i:= 0 to rowcount-1 do rowheights[i]:=saverowh[i];
      gridlinewidth:=saveGL;
      font.size:=savefontsize;
      EndDoc;
    end;
end;