Home » Tipps & Tricks » Komponenten » TStringGrid » StringGrid drucken
StringGrid drucken
Folgender Tipp demonstriert, wie man ein StringGrid ausdrucken kann. Die festen Spalten und Zeilen werden auch ausgedruckt.
Uses Printers, Grids; procedure GridDruck(grd:TStringGrid;links,oben:word;scal:double); var x,y,li,ob,re,un,waag,senk,h,a: integer; s: string; function rech(i,j:integer):integer; begin result:=round(((i*j) / 72) * scal); end; begin if scal > 0 then begin waag:=getdevicecaps(printer.handle,logpixelsx); senk:=getdevicecaps(printer.handle,logpixelsy); links:=rech(links,waag); oben:=rech(oben, senk); a:=rech(3,waag); li:=getdevicecaps(printer.handle,physicaloffsetx)+1+links; with printer do begin s:='Grid-Druck'; title:=s; BeginDoc; canvas.font:=grd.font; canvas.font.size:=round((grd.font.size / 0.72) * scal); h:=canvas.textheight(s); canvas.pen.color:=$333333; for x:=0 to grd.colcount-1 do begin if grd.gridlinewidth > 0 then begin canvas.pen.style:=pssolid; canvas.pen.width:=1; end else canvas.pen.style:=psclear; ob:=getdevicecaps(printer.handle,physicaloffsety)+1+oben; re:=li+rech(grd.ColWidths[x]+1,waag); for y:=0 to grd.rowcount-1 do begin un:=ob+rech(grd.RowHeights[y]+1,senk); if (x < grd.fixedcols) or (y < grd.fixedrows) then canvas.brush.color:=grd.fixedcolor else canvas.brush.color:=grd.color; canvas.rectangle(li,ob,re,un); canvas.brush.style:=bsclear; canvas.textrect(rect(li+a,ob+1,re-a,un-1), li+a,ob+(un-ob-h)div 2,grd.Cells[x,y]); ob:=un; end; canvas.brush.color:=clwhite; canvas.pen.style:=psclear; canvas.rectangle(li,ob+1,re,ob+h); li:=re; end; enddoc; end; end; end;
Die Procedure erwartet vier Parameter. Dem ersten Parameter muss das zu druckende StringGrid übergeben werden (z.B. StringGrid1), dem zweiten Parameter den linken und oberen Rand beim Drucken. Der vierte Parameter ist für die Skalierung zuständig.So kann man die Procedure Beispielsweise aufrufen:
// Ein Grid wird an der äußersten Druckkante in Originalgröße ausgegeben procedure TForm1.Button1Click(Sender: TObject); begin griddruck(stringgrid1,0,0,1); end; // Ein Grid wird mit dem Abstand wie auf der Form ausgegeben procedure TForm1.Button2Click(Sender: TObject); begin griddruck(stringgrid1,stringgrid1.left,stringgrid1.top,1); end; // Ein Grid wird in halber Größe ausgegeben procedure TForm1.Button1Click(Sender: TObject); begin griddruck(stringgrid1,0,0,0.5); end;