Drucken des StringGrid Inhaltes

jc-freak

Mitglied
Hallo und HILFE!

Also mir ist bekannt das ich n PrintDialog zum auswählen der normalen Druckeinstellungen besnutzen kann. Nur wie kann ich dem Drucker verklickern das er Beispielsweise eine Tabelle mit 30 Zeilen und 6 Spalten ausdrucken soll?
Die natürlich wiederum String Daten enthält.

hoffe mal mein Problem ist verständlich ...
 
re

hi ich hatte jetzt mal das selbe problem und habe ein wenig gegoogelt und folgende procedure gefunden:

Code:
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;

und so kannst du die procedure beispielsweise ausführen:

Code:
// 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;

Du kannst dann noch diverse sachen einbauen wie zum beispiel querformat drucken etc.

Die prozedure ist wirklich gut und einfach zu benutzen.

greetz yoshie
 

Neue Beiträge

Zurück