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; Zeilen:= ((anzs div anzs) *50); 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; |