AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid drucken

Ein Thema von s4sh81 · begonnen am 22. Mai 2019 · letzter Beitrag vom 22. Jun 2019
Antwort Antwort
s4sh81

Registriert seit: 11. Sep 2008
11 Beiträge
 
#1

Stringgrid drucken

  Alt 22. Mai 2019, 18:20
Hallo zusammen,

ich möchte ein Stringgrid drucken.
Dies funktioniert auch soweit ganz gut.

Sobald der Text in einer Zelle allerdings mit einem Zeilenumbruch dargestellt wird,
wird beim Drucken, dieser Text wieder ohne Zeilenumbrüche "gedruckt".

Wie kann ich also, die Funktion des Zeilenumbruchs auch in der Druckversion einfügen.

Danke vorab.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Stringgrid drucken

  Alt 22. Mai 2019, 18:26
Hallo,
wie sollen wir das beantworten, ohne das Du uns mal etwas Quellcode zeigst?
Heiko
  Mit Zitat antworten Zitat
s4sh81

Registriert seit: 11. Sep 2008
11 Beiträge
 
#3

AW: Stringgrid drucken

  Alt 22. Mai 2019, 18:31
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Stringgrid1.ColWidths[0] := 75;
Stringgrid1.ColWidths[1] := 510;
Stringgrid1.ColWidths[2] := 50;
Stringgrid1.ColWidths[3] := 30;

  StringGrid1.colcount := 4;
  StringGrid1.rowcount := 60;
  StringGrid1.Cells [0,0] := 'Datum';
  StringGrid1.Cells [1,0] := 'Arbeitsbeschreibung';
  StringGrid1.Cells [2,0] := 'Stunden';
  Stringgrid1.Cells [3,0] := 'PKW';
  Stringgrid1.Cells [0,2] := datetostr(now);
  Stringgrid1.Cells [1,2] := 'Hallo, das ist ein test, ob eer auch einen zeilenumbruch hinbegkommet, und dann kommt jede menge text und text und text noch mehr text um zu testen ob der zeilenumbruch funktionerit';
  stringgrid1.Cells [3,2] := '15';
end;


procedure TForm1.Button4Click(Sender: TObject);
begin
if PrintDialog1.execute then
begin
  PrintStringGrid(stringGrid1, '', poPortrait);
end;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.FillRect(Rect);
// Jetzt kommt was aus der WindowsAPI
DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[ACol, ARow]),
length(StringGrid1.Cells[ACol, ARow]),
Rect, DT_WordBreak)
end;

end.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Stringgrid drucken

  Alt 22. Mai 2019, 20:27
Hallo,
mein Compiler sagt
PrintStringGrid not found

Wenn ich das richtig erkenne, erfolgt der Ausdruck in PrintStringGrid, oder irre ich mich?

Warum versteckst du dann genau diesen Code vor uns ...
Heiko

Geändert von hoika (22. Mai 2019 um 20:30 Uhr)
  Mit Zitat antworten Zitat
s4sh81

Registriert seit: 11. Sep 2008
11 Beiträge
 
#5

AW: Stringgrid drucken

  Alt 24. Mai 2019, 20:30
Hallo,
mein Compiler sagt
PrintStringGrid not found

Wenn ich das richtig erkenne, erfolgt der Ausdruck in PrintStringGrid, oder irre ich mich?

Warum versteckst du dann genau diesen Code vor uns ...
So, hier der Code aus dem PrintStringgrid.

Delphi-Quellcode:
  //vertikale linien zeichnen

   Printer.Canvas.Pen.Width := 1;
   printer.Canvas.MoveTo(380, -headersize);
   printer.Canvas.LineTo(380, - VertSize + FooterSize);

   Printer.Canvas.Pen.Width := 1;
   printer.Canvas.MoveTo(1750, -headersize);
   printer.Canvas.LineTo(1750, - VertSize + FooterSize);

   Printer.Canvas.Pen.Width := 1;
   printer.Canvas.MoveTo(1890, -headersize);
   printer.Canvas.LineTo(1890, - VertSize + FooterSize);

    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+200, - 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;
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Stringgrid drucken

  Alt 24. Mai 2019, 23:11
Hallo,
TextOut kennt keine Umbrüche, da müsste man schon DrawText bemühen.

Das ganze ist aber überhaupt nicht trivial.
Besser eine fertige Bibliothek benutzen (z.B., QuickPDF, ist aber Löhnware).
Heiko
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.447 Beiträge
 
Delphi 7 Professional
 
#7

AW: Stringgrid drucken

  Alt 22. Mai 2019, 21:21
[DELPHI]
Stringgrid1.Cells [1,2] := 'Hallo, das ist ein test, ob eer auch einen zeilenumbruch hinbegkommet, und dann kommt jede menge text und text und text noch mehr text um zu testen ob der zeilenumbruch funktionerit';

DrawText(StringGrid1.Canvas.Handle,
PChar(StringGrid1.Cells[ACol, ARow]),
length(StringGrid1.Cells[ACol, ARow]),
Rect, DT_WordBreak)
Im Text ist kein Zelenumbruch.
DrawText ist nur für die Bildschirmanzeige.
Von daher ist es vollkommen ok, wenn beim Druck kein Zeilenumbruch erfolgt.

Das, was Du für die Bildschirmanzeige mit DrawText(...) machst, musst Du analog für die Druckausgabe implementieren, schließlich wird ja der Inhalt des StringGrids gedruckt und nicht die Bildschirmausgabe.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
678 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Stringgrid drucken

  Alt 23. Mai 2019, 09:44
Hallo zusammen,

ich möchte ein Stringgrid drucken.
Dies funktioniert auch soweit ganz gut.

Sobald der Text in einer Zelle allerdings mit einem Zeilenumbruch dargestellt wird,
wird beim Drucken, dieser Text wieder ohne Zeilenumbrüche "gedruckt".

Wie kann ich also, die Funktion des Zeilenumbruchs auch in der Druckversion einfügen.

Danke vorab.
Falls Du den Druck per Ausgabe auf dem Printer.Canvas machst verwende die TextRect-Methode, die kann Text umbrechen, allerdings mußt Du vorher rausfinden, wie groß das Ausgaberechteck werden muss. TextRect kann das auch.

Ein Grid zu drucken ist komplex, da sollte man sich schon mal überlegen, ob man das nicht delegieren kann. Ich erzeuge oft einfach ein HTML-File mit einer entsprechenden Tabelle und lasse das vom Browser drucken (per Shellexecute). Oder, wenn verfügbar, packe die Daten in ein Excel-File (per OLE automation) und lasse den Benutzer das nach seinen Vorlieben drucken.

Oder man verwendet einen Report, sowas kann man auch mit Daten aus anderen Quellen als einer Datenbank füttern, und die Reportkomponente hat üblicherweise auch eine Druckfunkion.
Peter Below
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:28 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