AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem bei StringGrid drucken

Ein Thema von mkpre · begonnen am 22. Mai 2008 · letzter Beitrag vom 22. Mai 2008
Antwort Antwort
mkpre

Registriert seit: 20. Mai 2008
19 Beiträge
 
Delphi 6 Personal
 
#1

Problem bei StringGrid drucken

  Alt 22. Mai 2008, 15:35
Wenn ich meine StringGrid mit dem Text, den ich hier im Forum gefunden habe über den Button ausdrucken möchte, sendet er es zwar an den Drucker, der mir aber nach ca. 10 min ein leeres Blatt ausdruckt.
Ein Word-Doc. auszudrucken geht aber --> Drucker funktioniert.
Meine Frage ist nun warum die Tabelle nicht zu drucken geht.
Ich hoffe mir kann jmd. helfen.
Delphi-Quellcode:
uses
  printers;

procedure TForm1.Drucken1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
  begin
    Printer.BeginDoc;
  end;
end;

//StringGrid-Inhalt ausdrucken
procedure PrintStringGrid(tab: 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 tab.RowCount mod Zeilen <> 0 then
    AnzSeiten := tab.RowCount div Zeilen + 1
  else
    AnzSeiten := tab.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 tab.RowCount >= I + (Seite - 1) * Zeilen then
      begin
        XPos := 0;

        for J := 0 to tab.ColCount - 1 do
        begin
          Printer.Canvas.MoveTo(Xpos, -YPos);
          Printer.Canvas.LineTo(Xpos+ tab.ColWidths[J] * 3, -YPos);

          Printer.Canvas.MoveTo(Xpos, -YPos);
          Printer.Canvas.LineTo(Xpos, -(YPos+ ZeilenSize));
          
          Printer.Canvas.TextOut(XPos, - YPos,tab.Cells[J, I + (Seite - 1) * Zeilen - 1]);
          XPos := XPos + tab.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;
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Problem bei StringGrid drucken

  Alt 22. Mai 2008, 16:13
Hi,

versuch es mal so.

Delphi-Quellcode:
uses
  printers;

procedure TForm1.Drucken1Click(Sender: TObject);
begin
if PrintDialog1.Execute then
  begin
    PrintStringGrid(<StringGrid>, <Title>, <Orientation>);
  end;
end;

//StringGrid-Inhalt ausdrucken
procedure PrintStringGrid(tab: 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.BeginDoc;
  //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 tab.RowCount mod Zeilen <> 0 then
    AnzSeiten := tab.RowCount div Zeilen + 1
  else
    AnzSeiten := tab.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 tab.RowCount >= I + (Seite - 1) * Zeilen then
      begin
        XPos := 0;

        for J := 0 to tab.ColCount - 1 do
        begin
          Printer.Canvas.MoveTo(Xpos, -YPos);
          Printer.Canvas.LineTo(Xpos+ tab.ColWidths[J] * 3, -YPos);

          Printer.Canvas.MoveTo(Xpos, -YPos);
          Printer.Canvas.LineTo(Xpos, -(YPos+ ZeilenSize));
         
          Printer.Canvas.TextOut(XPos, - YPos,tab.Cells[J, I + (Seite - 1) * Zeilen - 1]);
          XPos := XPos + tab.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;
  Mit Zitat antworten Zitat
mkpre

Registriert seit: 20. Mai 2008
19 Beiträge
 
Delphi 6 Personal
 
#3

Re: Problem bei StringGrid drucken

  Alt 22. Mai 2008, 16:20
Danke erstmal.
Sollte die Zeile so lauten, denn < und > will er nicht?
Außerdem ist Title undefiniert, als was soll ich das def. ?
PrintStringGrid(tab, Title, Orientation);
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:04 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