Discussion:
Stringgrid - Inhalt drucken?
(zu alt für eine Antwort)
Stefan Koschke
2007-02-07 15:12:49 UTC
Permalink
Hallo zusammen,

wie kann ich den Inhalt eines Stringgrid (TStringAlignGrid) einfach
ausdrucken, mit allen Formatierungen und Farben?
Das Canvas eines TImage bekommt man einfach mit

Printer.Canvas.Draw(0,0,Image1.Picture.Graphic);

gedruckt was aber beim Grid und dessen Canvas nicht funktioniert :-(

Ich möchte ungern alles händlisch programmieren wenn es einen besseren Weg
gibt, den ich nur noch nicht gefunden habe.

Danke
Ciao
Stefan
Marian Aldenhövel
2007-02-07 15:25:25 UTC
Permalink
Hallo,
Post by Stefan Koschke
Ich möchte ungern alles händlisch programmieren wenn es einen besseren Weg
gibt, den ich nur noch nicht gefunden habe.
Du kannst PaintTo() verwenden und den Druckercanvas als Ziel angeben. Bekommst
aber immer nur das angezeigte und nur in der Auflösung des Bildschirms. Das
ist nur für Minimalanforderungen genügend.

So bald die erste (erste!) Anfrage nach etwas mehr kommt, Schriftart,
Formatierung, Fußzeile, gehst Du sofort (sofort!) zu einem richtigen
Reportgenerator über. Alles andere wie "die Fußzeile kann ich noch selber
mit DrawText() ausprogrammieren" ist verschwendete Zeit.

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"Success is the happy feeling you get between the time you
do something and the time you tell a woman what you did."
Stefan Koschke
2007-02-08 07:06:10 UTC
Permalink
Hallo Marian,
Post by Marian Aldenhövel
Hallo,
Post by Stefan Koschke
Ich möchte ungern alles händlisch programmieren wenn es einen besseren
Weg gibt, den ich nur noch nicht gefunden habe.
Du kannst PaintTo() verwenden und den Druckercanvas als Ziel angeben. Bekommst
aber immer nur das angezeigte und nur in der Auflösung des Bildschirms. Das
ist nur für Minimalanforderungen genügend.
tja, da ist mein Grid jetzt ca. 0,5 * 1,5 cm groß auf dem gedruckten Blatt
Papier ;-)
Post by Marian Aldenhövel
So bald die erste (erste!) Anfrage nach etwas mehr kommt, Schriftart,
Formatierung, Fußzeile, gehst Du sofort (sofort!) zu einem richtigen
Reportgenerator über. Alles andere wie "die Fußzeile kann ich noch selber
mit DrawText() ausprogrammieren" ist verschwendete Zeit.
wie meinst Du das mit einem Reportgenerator?
Das war für mich immer ein Instrument, um Datenbankabfragen zu erstellen.
Ich kann mir momentan keinen Reim daraus machen, wie ich damit einen
Stringgridinhalt auf einen Drucker bekommen sollte?

Ciao
Stefan
Marian Aldenhövel
2007-02-08 08:54:01 UTC
Permalink
Hi,
Post by Stefan Koschke
tja, da ist mein Grid jetzt ca. 0,5 * 1,5 cm groß auf dem gedruckten
Blatt Papier ;-)
Dann malst Du eben auf die Canvas einer TBitmap und die dann skaliert auf
den Druckercanvas. Es bleibt technisch ein Screenshot.
Post by Stefan Koschke
wie meinst Du das mit einem Reportgenerator?
Ein Werkzeug wie FastReports oder ReportBuilder.
Post by Stefan Koschke
Das war für mich immer ein Instrument, um Datenbankabfragen zu erstellen.
Das ist ein Aspekt. Der andere, und viel interessantere, ist die formatierte
Ausgabe von Daten auf verschiedene Ausgabe"geräte" (Drucker, PDF).
Post by Stefan Koschke
Ich kann mir momentan keinen Reim daraus machen, wie ich damit einen
Stringgridinhalt auf einen Drucker bekommen sollte?
Ein ordentlicher Reportgenerator (die oben genannten fallen unter diese
Kategorie, aber es ist keine vollständige Liste) hat eine Schnittstelle über
die man die auszugebenden Daten "Just in Time" liefern kann.

Für den ReportBuilder könntest Du eine TJITPipeline einsetzen und deren
Ereignisse behandeln oder eine eigene Pipeline ableiten und der das Stringgrid
überreichen. Für Fastreports habe ich es nicht so flott parat.

Auf dem anderen Ende würdest Du angeben wo welche Spalte auf das Papier soll,
welche Schriften, welche Rahmen, Seitenränder, Seitenzahlen, Du bekämst eine
automatische Paginierung, es wäre wurscht wo das Grid gerade hingescrollt ist,
es gäbe eine Vorschau, und so weiter und so fort.

Ciao, MM
--
Marian Aldenhövel, Rosenhain 23, 53123 Bonn
http://www.marian-aldenhoevel.de
"Success is the happy feeling you get between the time you
do something and the time you tell a woman what you did."
Stefan Koschke
2007-02-08 10:43:55 UTC
Permalink
Hallo Marian,
Post by Marian Aldenhövel
Post by Stefan Koschke
tja, da ist mein Grid jetzt ca. 0,5 * 1,5 cm groß auf dem gedruckten
Blatt Papier ;-)
Dann malst Du eben auf die Canvas einer TBitmap und die dann skaliert auf
den Druckercanvas. Es bleibt technisch ein Screenshot.
stimmt, und daß da nur der gerade sichtbare bereich rauskommt, hatte ich
auch nicht bedacht :-(
Post by Marian Aldenhövel
Ein Werkzeug wie FastReports oder ReportBuilder.
ich werde mir beide mal ansehen, vielen Dank für den Tip!

Ciao
Stefan
Heiko Luettge
2007-02-08 14:37:12 UTC
Permalink
List & Label wäre auch noch ein Bsp.
Die haben eine wunderschöne Tabellen-Komponente.
Ist aber etwas teurer.


Heiko
Stefan Koschke
2007-02-08 15:29:50 UTC
Permalink
Hallo zusammen,
Post by Heiko Luettge
List & Label wäre auch noch ein Bsp.
Die haben eine wunderschöne Tabellen-Komponente.
Ist aber etwas teurer.
Wie das in einer Fa. immer so ist, kosten darf es erst mal nichts ;-)

Da ich schnell eine Lösung brauche, habe ich nun doch eine eigene Methode
geschrieben, der ich ein TStringAlignGrid übergeben kann sowie die Position
und gewünschte Breite auf dem Druckerblatt.
Rückgabe ist dann die nächste freie y-Position für die nächste Tabelle.
Waren insgesamt ca. 1h Arbeit und etwa 70 Zeilen Code.
Es werden die Zellenfarben, Textfarben, Schriftarten sowie Alignment in den
Zellen berücksichtigt.
Auf 3 Druckern mit verschiedensten Auflösungen und PDF-Drucker getestet,
funktioniert allerfeinstens :-)

Ciao
Stefan
Klaus Dewald
2007-03-04 19:38:00 UTC
Permalink
Post by Stefan Koschke
Hallo zusammen,
Post by Heiko Luettge
List & Label wäre auch noch ein Bsp.
Die haben eine wunderschöne Tabellen-Komponente.
Ist aber etwas teurer.
Wie das in einer Fa. immer so ist, kosten darf es erst mal nichts ;-)
Da ich schnell eine Lösung brauche, habe ich nun doch eine eigene Methode
geschrieben, der ich ein TStringAlignGrid übergeben kann sowie die Position
und gewünschte Breite auf dem Druckerblatt.
Rückgabe ist dann die nächste freie y-Position für die nächste Tabelle.
Waren insgesamt ca. 1h Arbeit und etwa 70 Zeilen Code.
Es werden die Zellenfarben, Textfarben, Schriftarten sowie Alignment in den
Zellen berücksichtigt.
Auf 3 Druckern mit verschiedensten Auflösungen und PDF-Drucker getestet,
funktioniert allerfeinstens :-)
Ciao
Stefan
So etwas gab es mal als Komponente GmPreview von Murtsoft. Ist zwar tot,
aber den Sourcecode habe ich hier noch rumliegen. Kost nix. Damit brauch
man das Grid nur einer Funktion übergeben und die Komponente macht den
Rest. Bei gewünschten Eingriffen kann man in einem Event die
entsprechenden Zellen manuell ändern.

Und Tschüss
Klaus Dewald
Nicole Wagner
2007-03-05 12:38:00 UTC
Permalink
On Sun, 04 Mar 2007 20:38:00 +0100, Klaus Dewald
Post by Klaus Dewald
So etwas gab es mal als Komponente GmPreview von Murtsoft. Ist zwar tot,
aber den Sourcecode habe ich hier noch rumliegen. Kost nix. Damit brauch
man das Grid nur einer Funktion übergeben und die Komponente macht den
Rest. Bei gewünschten Eingriffen kann man in einem Event die
entsprechenden Zellen manuell ändern.
Koenntest Du den wohl hier posten?
Auch ich quaele mich mit einer do-it-yourself Loesung und die Frage
kommt immer wieder.


Nicole
Klaus Dewald
2007-03-05 19:50:13 UTC
Permalink
Post by Nicole Wagner
On Sun, 04 Mar 2007 20:38:00 +0100, Klaus Dewald
Post by Klaus Dewald
So etwas gab es mal als Komponente GmPreview von Murtsoft. Ist zwar tot,
aber den Sourcecode habe ich hier noch rumliegen. Kost nix. Damit brauch
man das Grid nur einer Funktion übergeben und die Komponente macht den
Rest. Bei gewünschten Eingriffen kann man in einem Event die
entsprechenden Zellen manuell ändern.
Koenntest Du den wohl hier posten?
Auch ich quaele mich mit einer do-it-yourself Loesung und die Frage
kommt immer wieder.
Nicole
Hallo Nicole,
posten iss nicht. Sind 28 .pas Dateien. Das Teil kann halt auch noch
Serienetiketen drucken und Druckvorschau mit Zooming etc. machen.
Eigentlich schade, das es nicht mehr weiter gepflegt wird.

Ich versuch mal temp11 zu erreichen und häng eine Sfx Datei mit allem
was dabei war dran.

Schöne Woche

Klaus Dewald
Nicole Wagner
2007-03-07 10:45:29 UTC
Permalink
On Mon, 05 Mar 2007 20:50:13 +0100, Klaus Dewald
Post by Klaus Dewald
Ich versuch mal temp11 zu erreichen und häng eine Sfx Datei mit allem
was dabei war dran.
danke!
temp11 ist korrekt.

Es ist allerdings nichts angekommen - und "sfx"?
Ich kenne rar, zip,.... etc.


Nicole
Klaus Dewald
2007-03-07 11:02:20 UTC
Permalink
Post by Nicole Wagner
On Mon, 05 Mar 2007 20:50:13 +0100, Klaus Dewald
Post by Klaus Dewald
Ich versuch mal temp11 zu erreichen und häng eine Sfx Datei mit allem
was dabei war dran.
danke!
temp11 ist korrekt.
Es ist allerdings nichts angekommen - und "sfx"?
Ich kenne rar, zip,.... etc.
Nicole
Hallo Nicole,
benutzt Du evtl. Outlook? Eine .EXE und eine .ZIP Datei hängen an der Mail.
SFX heißt übrigens _S_el_f_-E_x_tract
Ich habe gerade noch einmal an temp11 gesendet.

Viele Grüße
Klaus Dewald
Nicole Wagner
2007-03-07 12:19:32 UTC
Permalink
On Wed, 07 Mar 2007 12:02:20 +0100, Klaus Dewald
Post by Klaus Dewald
Post by Nicole Wagner
On Mon, 05 Mar 2007 20:50:13 +0100, Klaus Dewald
Post by Klaus Dewald
Ich versuch mal temp11 zu erreichen und häng eine Sfx Datei mit allem
was dabei war dran.
danke!
temp11 ist korrekt.
Es ist allerdings nichts angekommen - und "sfx"?
Ich kenne rar, zip,.... etc.
Nicole
Hallo Nicole,
benutzt Du evtl. Outlook? Eine .EXE und eine .ZIP Datei hängen an der Mail.
SFX heißt übrigens _S_el_f_-E_x_tract
Ich habe gerade noch einmal an temp11 gesendet.
Nein, nein, ich bin Outlook Hasser.

ui, sorry, habe den Fehler gerade gefunden: temp11 war falsch.
Sie haben mir die Adresse verbrannt und sie lautet mittlerweile
temp12. Ich vergass es auszubessern.



Nicole
Klaus Dewald
2007-03-07 12:35:31 UTC
Permalink
Post by Nicole Wagner
ui, sorry, habe den Fehler gerade gefunden: temp11 war falsch.
Sie haben mir die Adresse verbrannt und sie lautet mittlerweile
temp12. Ich vergass es auszubessern.
OK, ist noch einmal an temp12 unterwegs.
Und Tschüss
Klaus Dewald

Loading...