Autor Beitrag
Jagg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 635



BeitragVerfasst: Di 07.12.04 12:48 
Hallo Leute !
Ich habe diesen Code :
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
rocedure GridDrucktitel(grd:TStringGrid; links, oben: Integer; scal:double; farbig:boolean);
 var x, y, li, ob, re, un, waag, senk, a,  vSpalte, bSpalte, vZeile, bZeile,xWidth: integer;
     fix, grund, schrift: TColor;
     r: TRect;
  function rech(i,j:integer):integer;
  begin
    result:=round(((i*j) / 72) * scal);
  end;
begin
  xWidth:=printer.PageWidth;
  //while StringgridWidth<xWidth do
  //begin
  vZeile := 0;
  vSpalte := 0;
  bZeile := grd.rowcount - 1;
  bSpalte := grd.colcount - 1;
  if (scal > 0and
     (vZeile < grd.rowcount) and
     (vSpalte < grd.colcount) then
  begin
    if farbig then
    begin
      fix := grd.fixedcolor;
      grund := grd.color;
      schrift := grd.font.color;
    end
    else
    begin
      fix := clsilver;
      grund := clwhite;
      schrift := clblack;
    end;
    waag := GetDeviceCaps(Printer.Handle, LogPixelSX);
    senk := GetDeviceCaps(Printer.Handle, LogPixelSY);
    links := rech(links, waag);
    oben := rech(oben, senk);
    li := GetDeviceCaps(Printer.Handle, PhysicalOffsetX) + 1 + links;
    a := rech(3, waag);
    with Printer do
    begin
      Title := 'Filial-Listen';
      Orientation := poLandscape;
      BeginDoc;
      if grd.gridlinewidth > 0 then
      begin
        Canvas.Pen.color := $333333;
        Canvas.Pen.width := 1;
        Canvas.Pen.Style := psSolid
      end
      else
        Canvas.Pen.Style := psClear;
      Canvas.Font := Grd.Font;
      Canvas.Font.Color := Schrift;
      Canvas.Font.Size := round((Grd.Font.Size / 0.72) * scal);
      ob := GetDeviceCaps(Printer.Handle, PhysicalOffsetY) + 1 + oben;
      for y := vZeile to bZeile do
      begin
        un := ob + rech(Grd.RowHeights[y]+1, senk);
        //neue Seite + Kopf
        //ArtDruck:=1;
        //AutoSignatur;
        if (un > Printer.PageHeight) and
           (Printing) then
        begin
          //EndDoc;
          //BeginDoc;
          ob := GetDeviceCaps(Printer.Handle, PhysicalOffsetY) + 1 + oben;
          un := ob + rech(Grd.RowHeights[y]+1, senk);
          for x := vSpalte to bSpalte do
          begin
            Canvas.Brush.Color := fix;
            re := li + rech(Grd.ColWidths[x] + 1, waag);
            Canvas.Rectangle(li, ob, re + 2, un + 2);
            r := rect(li + a, ob + 1, re - a, un - 2);
            DrawText(Canvas.Handle, PChar(Grd.Cells[x,0]), length(Grd.Cells[x,0]), r, DT_SINGLELINE or DT_VCENTER);
            li := re;
          end;
          li := GetDeviceCaps(Printer.Handle, PhysicalOffsetX) + 1 + links;
          ob := un;
        end;
        un := ob + rech(Grd.RowHeights[y]+1, senk);
        for x := vSpalte to bSpalte do
        begin
          if (x < Grd.FixedCols) or
             (y < Grd.FixedRows) then
             Canvas.Brush.Color := fix
          else
            Canvas.Brush.Color := Grund;
            re := li + rech(Grd.ColWidths[x] + 1, waag);
            Canvas.Rectangle(li, ob, re + 2, un + 2);
            r := rect(li + a, ob + 1, re - a, un - 2);
            DrawText(Canvas.Handle, PChar(Grd.Cells[x,y]), length(Grd.Cells[x,y]), r, DT_SINGLELINE or DT_VCENTER);
            li := re;
          end;
            ob := un;
            li := GetDeviceCaps(Printer.Handle, PhysicalOffsetX) + 1 + links;
        end;
        if Printing then
          EndDoc;
        //StringgridWidth:=grd.Width;
    end;
  end;
  //end;
end//GridDruck

....hierbei druckt er mit den Stringgrid mit Kopfzeile und das zwar auf jede neue Seite,jetzt will ich aber das ganze auf einem Blatt drucken...
ich habe geguckt aber habe nix gefunden,könte ihr mir vllt helfen ?

Jagg

Moderiert von user profile iconTino: Code- durch Delphi-Tags ersetzt.
Blutiger-Anfänger
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35

Win XP
D3 Prof
BeitragVerfasst: Fr 10.12.04 19:52 
Hi jagg
dass problem hatte ich auch mal,
das drucken in delphi ist nämlich nicht so einfach, trotdem hättest du die suche im forum benutzen sollen.

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
//Es wird ein Stringgrid an den Drucker geschickt. Der Einfachheit halber  
// sowie aus Platzgründen werden die Trennstriche zwischen den einzelnen Zellen  
// stets nur 1 Pixel breit gezeichnet. Es kann ein Offset von der linken  
// und/oder der oberen Druckkante angegeben werden. Diese Werte entsprechen der  
// Pixelzahl auf dem Bildschirm, d.h. wenn z.B. das Grid 10 Pixel vom Rand  
// der Form liegt, werden diese zehn Pixel proportional in die Anzahl der  
// Pixel auf dem Drucker umgerechnet, um den gleichen Abstand vom Rand zu  
// gewährleisten wie auf dem Schirm. Mit scal kann die Größe der Ausgabe  
// beeinflußt werden. Bei scal=1 erscheint es auf dem Papier in der selben  
// Größe, wie auf einem 800x600 Bildschirm.  
// Durch Werte in vSpalte (erste zu druckende Spalte), bSpalte (letzte zu  
// druckende Spalte), vZeile (erste zu druckende Zeile) und bZeile (letzte  
// zu druckende Zeile) erreicht man Teilausdrucke (Zählung beginnt bei 0!).  
// Haben diese Variablen negative Werte, wird das gesamte Grid ausgedruckt.  
// Zusätzlich kann man angeben, ob das Grid in der Farbe wie auf dem Schirm  
// (farbig=true) oder in Schwarz/Weiss (farbig=false) gedruckt werden soll.  
// Siehe auch Stringgrids speichern und laden  
// Getestet mit D4 unter Win98  [/color]procedure GridDruck(grd:TStringGrid; links,oben, vSpalte,bSpalte,vZeile,bZeile:integer; scal:double; farbig:boolean);  
var  
  x,y,li,ob,re,un,waag,senk,a:integer;  
  fix,grund,schrift:TColor;  
  r:Trect;  
  function rech(i,j:integer):integer;  
  begin  
    result:=round(((i*j) / 72) * scal);  
  end;  

 
begin  
  if vZeile < 0 then vZeile:=0;  
  if vSpalte < 0 then vSpalte:=0;  
  if (bZeile >= grd.rowcount)or(bZeile < 0then  
    bZeile:=grd.rowcount - 1;  
  if (bSpalte >= grd.colcount)or(bSpalte < 0then  
    bSpalte:=grd.colcount - 1;  
  if vZeile > bZeile then  
  begin  
    a:=vZeile;vZeile:=bZeile;bZeile:=a;  
  end;  
  if vSpalte > bSpalte then  
  begin  
    a:=vSpalte;vSpalte:=bSpalte;bSpalte:=a;  
  end;  

 
  if (scal > 0)and(vZeile < grd.rowcount)and(vSpalte < grd.colcount) then  
  begin  
    if farbig then  
    begin  
      fix:=grd.fixedcolor;  
      grund:=grd.color;  
      schrift:=grd.font.color;  
    end  
    else  
    begin  
      fix:=clsilver;  
      grund:=clwhite;  
      schrift:=clblack;  
    end;  
    waag:=getdevicecaps(printer.handle,logpixelsx);  
    senk:=getdevicecaps(printer.handle,logpixelsy);  
    links:=rech(links,waag);  
    oben:=rech(oben, senk);  
    li:=getdevicecaps(printer.handle,physicaloffsetx)+1+links;  
    a:=rech(3,waag);  
    with printer do begin  
    title:='Grid-Druck';  
    BeginDoc;  
    if grd.gridlinewidth > 0 then  
    begin  
      canvas.pen.color:=$333333;  
      canvas.pen.width:=1;  
      canvas.pen.style:=pssolid  
    end  
    else  
      canvas.pen.style:=psclear;  
      canvas.font:=grd.font;  
      canvas.font.color:=schrift;  
      canvas.font.size:=round((grd.font.size / 0.72) * scal);  
      for x:=vSpalte to bSpalte do  
      begin  
        ob:=getdevicecaps(printer.handle,physicaloffsety)+1+oben;  
        re:=li+rech(grd.ColWidths[x]+1,waag);  
        for y:=vZeile to bZeile do  
        begin  
          un:=ob+rech(grd.RowHeights[y]+1,senk);  
          if (x < grd.fixedcols)or(y < grd.fixedrows) then  
            canvas.brush.color:=fix  
          else  
            canvas.brush.color:=grund;  
          canvas.rectangle(li,ob,re+2,un+2);  
          r:=rect(li+a,ob+1,re-a,un-2);  
          drawtext(canvas.handle,pchar(grd.Cells[x,y]),length(grd.Cells[x,y]),  
          r,DT_SINGLELINE or DT_VCENTER);  
          ob:=un;  
        end;  
        li:=re;  
      end;  
      enddoc;  
    end;  
  end;  
end;  
// Beispielaufrufe  
// Ein Grid wird an der äußersten Druckkante in Originalgröße ausgegeben  
procedure TForm1.Button1Click(Sender: TObject);  
begin  
  griddruck(stringgrid1,0,0,-1,-1,-1,-1,1,true);  
end;  
// Die ersten 3 x 3 Zellen werden mit Randabstand wie auf der Form ausgegeben  
procedure TForm1.Button2Click(Sender: TObject);  
begin  
  griddruck(stringgrid1,stringgrid1.left,stringgrid1.top,0,2,0,2,1,true);  
end;  
// Ein Grid wird in halber Größe und schwarz/weiss ausgegeben  
procedure TForm1.Button1Click(Sender: TObject);  
begin  
  griddruck(stringgrid1,0,0,0,0,-1,-1,0.5,false);  
end;  
// von einem Stringgrid wird je ein Viertel  
// auf einer eigenen Seite gedruckt  
procedure TForm1.Button1Click(Sender: TObject);  
var  
  s,z:integer;  
begin  
  s:=stringgrid1.ColCount-1;  
  z:=stringgrid1.RowCount-1;  
  griddruck(stringgrid1,25,30,0,s div 2,0,z div 2,1,true);  
  griddruck(stringgrid1,25,30,s div 2 + 1,s,0,z div 2,1,true);  
  griddruck(stringgrid1,25,30,0,s div 2,z div 2 + 1,z,1,true);  
  griddruck(stringgrid1,25,30,s div 2 + 1,s,z div 2 + 1,z,1,true);  
end;


als aufruf würde ich den zweiten nehmen (3*3Zeilen) und ihn entsprechend modifiezieren.
m.f.g.
Blutiger-Anfänger :beer:

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.