Ok.
Code:
procedure PrintStringGrid(Grid: TStringGrid; Title: string);
var
P, I, J, YPos, XPos: Integer;
AnzSeiten, Seite, Zeilen, ZeilenSize, FontHeight: Integer;
HorzSize, VertSize, HeaderSize, FooterSize: Integer;
Varmmx, Varmmy: Extended;
Footer: string;
begin
//Koptekst, Voettekst, Zeilenabstand, Schriftgröße festlegen
HeaderSize := 100;
FooterSize := 200;
ZeilenSize := 78; //36; aangepast - spatie tussen lijnen
FontHeight := 68; //36; //aangepast
Printer.Title := Title;
Printer.BeginDoc;
//Druck auf mm einstellen
Varmmx := GetDeviceCaps (TWinPrinter(Printer).Handle, PHYSICALWIDTH) /
GetDeviceCaps(TWinPrinter(Printer).Handle, LOGPIXELSX) * 25.4;
Varmmy := GetDeviceCaps(TWinPrinter(Printer).Handle, PHYSICALHEIGHT) /
GetDeviceCaps(TwinPrinter(Printer).Handle, LOGPIXELSY) * 25.4;
VertSize := Trunc(Varmmy) * 10;
HorzSize := Trunc(Varmmx) * 10;
SetMapMode(TwinPrinter(Printer).Handle, MM_LOMETRIC);
//Zeilenanzahl festlegen
Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize;
//Seitenanzahl ermitteln
if Grid.RowCount mod Zeilen <> 0 then
AnzSeiten := Grid.RowCount div Zeilen + 1
else
AnzSeiten := Grid.RowCount div Zeilen;
Seite := 1;
//Grid Drucken
for P := 1 to AnzSeiten do
begin
//Koptekst
Printer.Canvas.Font.Name := 'Arial';
Printer.Canvas.Font.Style :=[fsBold];
Printer.Canvas.Font.Height := 68; //48; //aangepast
Printer.Canvas.TextOut((HorzSize div 2 -
(Printer.Canvas.TextWidth(Title) div 2)),- 20,Title);
Printer.Canvas.Pen.Width := 5;
Printer.Canvas.MoveTo(0, - HeaderSize);
Printer.Canvas.LineTo(HorzSize, - HeaderSize);
//Voettekst
Printer.Canvas.MoveTo(0, - VertSize + FooterSize);
Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize);
Printer.Canvas.Font.Height := 56; //36; // aangepast
Footer := 'Pagina: ' + IntToStr(Seite) + ' van ' + IntToStr(AnzSeiten);
Printer.Canvas.TextOut((HorzSize div 2 - (Printer.Canvas.TextWidth(Footer) div 2)),
- VertSize + 150,Footer);
//Zeilen drucken
Printer.Canvas.Font.Height := FontHeight;
YPos := HeaderSize + 10;
// *** volgende dient om op tweede pagina ook de hoofding (namen) te zetten ***
XPos := 0;
for J := 0 to Grid.ColCount - 1 do
begin
Printer.Canvas.TextOut(XPos, - YPos, Grid.Cells[J, 0]); // <-- dit zou dan je eerste regel printen
XPos := XPos + Grid.ColWidths[J] * 3;
end;
YPos := YPos + ZeilenSize;
// ***
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;
//Seite hinzufügen
Inc(Seite);
if Seite <= AnzSeiten then Printer.NewPage;
end;
Printer.EndDoc;
end;
Alleen print ie dan op de eerste pagina de eerste regel 2 keer.
Als je dat niet wilt zul je in de "1 to Zeilen" loop bij de "I + (Seite - 1) * Zeilen - 1" één op moeten tellen.
Dit is voor mij niet duidelijk, sorry. Welk/waar cijfer moet er aangepast worden?
Bookmarks