Registriert seit: 28. Dez 2006
69 Beiträge
|
String Grid drucken
2. Apr 2007, 19:17
Hi alle hab nochmal ein kleines Problem:
Hab folgede Prozdeur zum drucken von String Grids gefunden Quelle: www.dsdt.info
Delphi-Quellcode:
uses printers;
//StringGrid-Inhalt ausdrucken
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
//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 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
//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 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;
//Example
procedure TForm1.Button1Click(Sender: TObject);
begin
//Drucken im Querformat
PrintStringGrid(Grid,'StringGrid Print Landscape', poLandscape);
//Drucken im Hochformat
PrintStringGrid(Grid,'StringGrid Print Portrait', poPortrait);
end;
Naja klappt auch alles ganz gut nur Ich würde gerne das er auch die Linie mit druckt. Jetzt druckt er zwar alles aber ohne die tabelle. Und die Überschrift wprde ich auch gerne von StringGrid1 Landscape in was anderes ändern wäre sehr nett wenn mir jemand sagen könnte wie ich das am besten realiseiren kann.
Danke im Vorraus
Crazymodder
|
|
Zitat
|