Autor Beitrag
ConditionZero
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 190

Win XP
Delphi 7 PE, C++ (Dev-C++), HTML+PHP (Dreamweaver MX), JavaScript(MS FrontPage)
BeitragVerfasst: Di 12.09.06 18:01 
tag,

also ich habe folgendes problem: ich will ein StringGrid ausdrucken, welches sehr viele Zeilen hat. Aber der Seitemumbruch beim drucken will nicht so ganz, wenn eine Seite gedruckt ist nimmt der drucker die anderen blätter, also soviele wie der druck eigentlich noch bräuchte, lass sie durchlaufen aba druckt nicht mehr un tut sie leer ausspucken... :/ hier mein code für den die Druckprozdeur:

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:
procedure PrintStringGrid(Grid: TStringGrid; Title: String; Orientation:TPrinterOrientation);
var
  P, I, J, YPos, XPos, HorzSize, VertSize: Integer;
  AnzSeiten, Seite, Zeilen, HeaderSize, FooterSize, ZeilenSize, FontHeight: Integer;
  mmx, mmy: Extended;
  Footer: String;
begin
  HeaderSize := 100;
  FooterSize := 200;
  ZeilenSize := 96;
  FontHeight := 60;
  Printer.Orientation := Orientation;
  Printer.Title := Title;
  Printer.BeginDoc;
  mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
  mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
    GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;
  VertSize := Trunc(mmy)*10;
  HorzSize := Trunc(mmx)*10;
  SetMapMode(Printer.Canvas.Handle, MM_LOMETRIC);
  Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize;
  if Grid.RowCount mod Zeilen <> 0 then
    AnzSeiten := Grid.RowCount div Zeilen + 1
  else
    AnzSeiten := Grid.RowCount div Zeilen;

  Seite := 1;
  for P := 1 to AnzSeiten do
  begin
    Printer.Canvas.Font.Height := 48;
    Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Title) div 2)),
      -20'');
    Printer.Canvas.Pen.Width := 5;
    Printer.Canvas.MoveTo(0, -HeaderSize);
    Printer.Canvas.LineTo(HorzSize, -HeaderSize);
    Printer.Canvas.MoveTo(0, -VertSize+FooterSize);
    Printer.Canvas.LineTo(HorzSize, -VertSize+FooterSize);
    Printer.Canvas.Font.Height := 36;
    Footer := '';
    Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(''div 2)),
      -VertSize+150, Footer);
    Printer.Canvas.Font.Height := FontHeight;
    YPos := HeaderSize + 10;
    for I := 1 to Zeilen do
    begin
      if Grid.RowCount >= I + (Seite-1)*Zeilen then
      begin
        XPos := 0;
        for J := 0 to Grid.ColCount - 1 do
        begin
          Printer.Canvas.TextOut(XPos, -YPos, Grid.Cells[J,I+(Seite-1)*Zeilen-1]);
          XPos := XPos + Grid.ColWidths[J]*3;
        end;
        YPos := YPos + ZeilenSize;
      end;
    end;
    Inc(Seite);
    if Seite <= AnzSeiten then Printer.NewPage;
  end;
  Printer.EndDoc;
end;



Notiz: Der Code ist nur teilweiße von mir, weil ich mich noch nie mit solchen Prozeduren abgegeben hatte. Ich war also ein bisschen hilflos auf dem Themengebiet. d.h. ich kann euch nicht zu 100% sagen was in dem code was macht ich blick da nicht wirklich durch LOL

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt