Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zellen vom StringGrid drucken (https://www.delphipraxis.net/105194-zellen-vom-stringgrid-drucken.html)

SaFu 17. Dez 2007 20:10


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

bitsetter 17. Dez 2007 23:47

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;

SaFu 18. Dez 2007 19:46

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:
Form7.Print;
noch die genaue Position bestimmen z.b 20 Pixel weite nach rechts und vielleicht noch Label1 oben drüber??

bitsetter 18. Dez 2007 21:07

Re: Zellen vom StringGrid drucken
 
Zitat:

Zitat von fuknersascha
Delphi-Quellcode:
Form7.Print;
noch die genaue Position bestimmen z.b 20 Pixel weite nach rechts und vielleicht noch Label1 oben drüber??

Wenn man es einfach machen möchte so etwa:
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;

SaFu 19. Dez 2007 16:58

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.

bitsetter 19. Dez 2007 17:08

Re: Zellen vom StringGrid drucken
 
Delphi-Quellcode:
const z= 5;
ein bisschen kleiner machen.
Oder sich den Sourcecode von Print ansehen und so abändern, dass das Fenster weiter nach rechts gedruckt wird.

SaFu 19. Dez 2007 17:27

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 07:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz