Autor Beitrag
perfojunky
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 23.01.09 15:35 
Also ich hoffe ich brings wenigstens jetzt über die Bühne meine Frage an der richtigen stelle rein zuposten.
Da ich erst seit drei Wochen mit Turbo Delphi angefangen hab,kann ich leider noch nicht grossartig damit umgehen. :oops:
So von meiner erfahrung her hab ich vor +-13 Jahren ein bisschen mit Turbo Pascal Herumexperimentiert.
Aber nun zu meinem Problem,ich will und kann eigentlich auch ein DBGrid mit Tclientdataset ausdrucken,aber egal was ich versuche beim Ausdruck kommen 66 Zeilen vollständig aufs Papier und dann kommt eine leere seite hinterher. :? :cry:
Nachdem ich nun schon seit einer Woche dran rumbastel und immer noch keine Lösung in sicht ist hier mal mein code,vielleicht und Hoffentlich kann mir hier jemand helfen.

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:
procedure DBGridDruck(grd: TDBGrid; tbl: TClientdataset;
  links, oben, vSpalte, bSpalte, vZeile, aZeile: word;
  scal: double);
var
  x, y, li, ob, re, un, waag, senk, a, anzs, anzw, Zeilen, Seite, Anzseiten: integer;
  r: Trect;
  s: string;

function rech(i, j: integer): integer;
begin
     result := round(((i * j)/ 55) * scal);
  end;

begin
  tbl.Active :=true;
  tbl.Last;
  anzs := tbl.Recordcount -1;
  if vZeile > anzs then exit;
  if aZeile > anzs then aZeile := anzs;
  anzw := grd.columns.Count -1 ;
  if vSpalte > anzw then exit;
  if bSpalte > anzw then bSpalte := anzw;
  tbl.DisableControls;
  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 := 'DVDdatabase';
    Printer.BeginDoc;
// Zeilenanzahl Festlegen:
    Zeilen:= ((anzs div anzs) *50);
// Seitenanzahl ermitteln
  if tbl.RecordCount mod Zeilen <> 0 then
  AnzSeiten := anzs div Zeilen +1
  else
  Anzseiten := anzs div Zeilen;
  Seite:= 1;

    Canvas.font := TStringgrid(grd).font;
    Canvas.Font.Size := trunc((TStringgrid(grd).font.Size / 0.50) * scal);
    for x := vSpalte to bSpalte do begin
      tbl.First;
      tbl.MoveBy(vZeile-1);
      ob := getdevicecaps(printer.Handle,physicaloffsety) + 1 + oben;
      re := li + rech(TStringgrid(grd).ColWidths[x] + 1,waag);
    for y := vZeile to aZeile do begin
      if (x = 0) or (y = 0) then canvas.Brush.Color := grd.FixedColor
      else canvas.Brush.Color := grd.Color;
      un := ob + rech(TStringgrid(grd).RowHeights[y] + 1, senk);
      Canvas.Rectangle(li, ob, re + 2, un + 2);
      r := rect(li + a, ob - 1, re - a, un - 2);
      if (x > 0) then begin
        if (y > 0) then
          s :=grd.DataSource.DataSet.Fields[x - 1].Asstring
        else
          s :=grd.DataSource.DataSet.Fields[x - 1].DisplayName;
        drawtext(Canvas.Handle, pchar(s), -1, r, DT_SINGLELINE or DT_VCENTER);
        tbl.Next;
      end;
      ob := un;
    end;
    li := re;
    end;
    Inc(seite);
    if (Seite <= AnzSeiten)then printer.NewPage;
end;
  printer.EndDoc;
  tbl.gotobookmark(bm);
  tbl.freebookmark(bm);
  tbl.EnableControls;
end;

procedure TForm2.Button7Click(Sender: TObject);
begin

DBGridDruck(DBgrid1, TClientDataSet(DBGrid1.datasource.dataset),15,15,0,5,0,90,0.5);

end;

ausblenden Delphi-Quelltext
1: