![]() |
Zellen vom StringGrid drucken
Schönen abend
habe mal ne fRage zu meiner überschrift und zwar kann ich den Inhalt vom StringGrid mit hilfe dieses Codes den ich hier im Forum gefunden habe drucken aber nur den inhalt kann mir einer vielleicht helfen wie ich noch meine lienen reinbekomme
Delphi-Quellcode:
procedure TForm7.PrintStringGrid(stringGrid1: 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 //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen HeaderSize := 100; FooterSize := 200; ZeilenSize := 36; FontHeight := 36; //Printer initializieren Printer.Orientation := Orientation; Printer.Title := Title; Printer.BeginDoc; //Druck auf mm einstellen 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); //Zeilenanzahl festlegen Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize; //Seitenanzahl ermitteln if stringGrid1.RowCount mod Zeilen <> 0 then AnzSeiten := stringGrid1.RowCount div Zeilen + 1 else AnzSeiten := stringGrid1.RowCount div Zeilen; Seite := 1; //Grid Drucken for P := 1 to AnzSeiten do begin //Kopfzeile Printer.Canvas.Font.Height := 48; 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); //Fußzeile Printer.Canvas.MoveTo(0, - VertSize + FooterSize); Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize); Printer.Canvas.Font.Height := 36; Footer := 'Seite: ' + IntToStr(Seite) + ' von ' + 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; for I := 1 to Zeilen do begin if stringGrid1.RowCount >= I + (Seite - 1) * Zeilen then begin XPos := 0; for J := 0 to stringGrid1.ColCount - 1 do begin Printer.Canvas.TextOut(XPos, - YPos, stringGrid1.Cells[J, I + (Seite - 1) * Zeilen - 1]); XPos := XPos + stringGrid1.ColWidths[J] * 3; end; YPos := YPos + ZeilenSize; end; end; //Seite hinzufügen Inc(Seite); if Seite <= AnzSeiten then Printer.NewPage; end; Printer.EndDoc; end; Wäre echt nett Gruss sascha |
Re: Zellen vom StringGrid drucken
Hallo,
versuche es mal so:
Delphi-Quellcode:
procedure TForm1.PrintStringGrid(stringGrid1: 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 Printer.Canvas.Brush.Style:= bsClear; //Kopfzeile, Fußzeile, Zeilenabstand, Schriftgröße festlegen HeaderSize := 100; FooterSize := 200; ZeilenSize := 36; FontHeight := 36; //Printer initializieren Printer.Orientation := Orientation; Printer.Title := Title; Printer.BeginDoc; //Druck auf mm einstellen 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); //Zeilenanzahl festlegen Zeilen := (VertSize - HeaderSize - FooterSize) div ZeilenSize; //Seitenanzahl ermitteln if stringGrid1.RowCount mod Zeilen <> 0 then AnzSeiten := stringGrid1.RowCount div Zeilen + 1 else AnzSeiten := stringGrid1.RowCount div Zeilen; Seite := 1; //Grid Drucken for P := 1 to AnzSeiten do begin //Kopfzeile Printer.Canvas.Font.Height := 48; 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); //Fußzeile Printer.Canvas.MoveTo(0, - VertSize + FooterSize); Printer.Canvas.LineTo(HorzSize, - VertSize + FooterSize); Printer.Canvas.Font.Height := 36; Footer := 'Seite: ' + IntToStr(Seite) + ' von ' + 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; for I := 1 to Zeilen do begin if stringGrid1.RowCount >= I + (Seite - 1) * Zeilen then begin XPos := 0; for J := 0 to stringGrid1.ColCount - 1 do begin Printer.Canvas.MoveTo(Xpos, -YPos); Printer.Canvas.LineTo(Xpos+ stringGrid1.ColWidths[J] * 3, -YPos); Printer.Canvas.MoveTo(Xpos, -YPos); Printer.Canvas.LineTo(Xpos, -(YPos+ ZeilenSize)); Printer.Canvas.TextOut(XPos, - YPos,stringGrid1.Cells[J, I + (Seite - 1) * Zeilen - 1]); XPos := XPos + stringGrid1.ColWidths[J] * 3; end; YPos := YPos + ZeilenSize; Printer.Canvas.MoveTo(0, -YPos); Printer.Canvas.LineTo(Xpos, -YPos); end; end; //Seite hinzufügen Inc(Seite); if Seite <= AnzSeiten then Printer.NewPage; end; Printer.EndDoc; end; |
Re: Zellen vom StringGrid drucken
Ja das war schon so wie ich es mir vorgestellt hatte aber ist keine schöne lösung.
kann man eigenlich bei dem
Delphi-Quellcode:
noch die genaue Position bestimmen z.b 20 Pixel weite nach rechts und vielleicht noch Label1 oben drüber??
Form7.Print;
|
Re: Zellen vom StringGrid drucken
Zitat:
Delphi-Quellcode:
var
FormImage : TBitmap; iLeft, iTop: integer; const z= 8; begin iTop:= 10; iLeft:= 20; FormImage := GetFormImage; try printers.Printer.BeginDoc; SetStretchBltMode(Printer.Canvas.Handle, STRETCH_HALFTONE); SetBrushOrgEx(Printer.Canvas.Handle, 0, 0, nil); StretchBlt(Printer.Canvas.Handle, iLeft* z, iTop* z, (FormImage.Width+ iLeft)* z, (FormImage.Height+ iTop)* z, FormImage.Canvas.Handle, 0, 0, FormImage.Width, FormImage.Height, SRCCOPY); printers.Printer.EndDoc; finally FormImage.Free; end; |
Re: Zellen vom StringGrid drucken
Ich möchte wirklich nicht nerven aber ich kenne mich mit drucken überhaupt nicht aus.
Aber die Form wird jetzt größer gedruckt als mit Form7.print Kann mann das auch noch einstellen wäre echt net. |
Re: Zellen vom StringGrid drucken
Delphi-Quellcode:
ein bisschen kleiner machen.
const z= 5;
Oder sich den Sourcecode von Print ansehen und so abändern, dass das Fenster weiter nach rechts gedruckt wird. |
Re: Zellen vom StringGrid drucken
Aja
Das sieht doch ganz gut aus Drucken ist eine kunst für sich aber da du scheinst ja ein Profi zu sein Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz