Discussion:
DBGrid drucken - viele Wege nach Rom
(zu alt für eine Antwort)
Nicole Wagner
2011-04-09 10:17:47 UTC
Permalink
Hallo User,


mein naechstes Thema hat ganz viele Loesungen:
Ich moechte mein DBGrid ausdrucken / an eine Datei schicken.

Die einzige, die ich sofort nachprogrammieren koennte, ist ganz
grauslich. Welche Loesung habt Ihr?

Diese Loesungen gibt es im Netz:


1)
Die grausliche, die ich frueher oder spaeter auch zusammenbraechte:

Man greift auf die einzelnen Felder des DGGrids zu und liest die Werte
einzeln aus. - Themenwechsel.

2)
Mit Rave Report: Da soll es ein "Preview" geben und danach kann man
drucken. Leider zeigt mein Preview-Form kein DBGrid, sondern ist grau.
Das wundert mich nicht, denn ich habe nicht herausgefunden, wie ich
Preview mit DBGrid verbinde. Geht das leicht? Wenn ja, bitte langsam
sprechen.

3)
Im Grunde interessiert mich mein DBGrid nicht, sondern dessen Inhalt.
D.h. ich brauche nicht die Grid, sondern das IBQuery dahinter. Leider
nicht nur die SQL-Abfragen, sondern inkl. aller berechneter und Look-Up
Felder. D.h. incl der Verarbeitung im OnCalc-Ereignis.
Gibt es hier eine elegante Methode, das IBQuery wohin zu schicken? Wie
und wohin?

4)
Mein DBGrid hat zur Zeit keine Tabelle dahinter. Im Netz gibt es
Hinweise, dass es hier Druckloesungen geben koennte. Weiss jemand hier
ein Link und Naeheres? Ich habe noch nie mit Tabellen gearbeitet und
moechte es nicht wirklich lernen, wenn es vermeidbar ist. Ich moechte
es nur machen, wenn es danach superkomfortabel wird.

5)
Theoretisch muesste es noch eine Mercedes Loesung geben. Und zwar mit
TChart oder TChart Pro. Praktisch weiss ich kaum, wo ich zu suchen
beginnen soll. Ich braeuchte hier ein Schritt-fuer-Schritt Tutorial.
Meines Erachtens muesste es in TChart (Version 8) moeglich sein,
irgendeine (Text?)komponente (welche?) mit der IBQuery (aber auch mit
dem oncalc-event?) zu verbinden und danach Wahnsinnsausdrucke mit allen
Konfigurationen zu erstellen. So rein theoretisch.

6)
Wie sieht es mit anderen Texteditoren aus? Ist es hier sinnvoll zu
graben zu beginnen? Sowas wie TDBMemo? etc.


Danke fuer Hinweise und Links!

Nicole
Joe Galinke
2011-04-11 08:56:35 UTC
Permalink
Hallo Nicole,
Post by Nicole Wagner
Ich moechte mein DBGrid ausdrucken / an eine Datei schicken.
Nein, das möchtest Du nicht. Zwar korrigierst du Dich später, aber
scheinbar hast Du Dich noch nicht vollständig davon lösen können, das Grid
als Quelle Deiner Daten anzusehen.
Post by Nicole Wagner
Die einzige, die ich sofort nachprogrammieren koennte, ist ganz
grauslich.
Welche wäre das?
Post by Nicole Wagner
Welche Loesung habt Ihr?
Ich verwende dafür einen Reportgenerator, am liebsten Fast Report. Rave
Report wirst Du sicherlich ebenso gut dafür einsetzen können, nur habe ich
mit dem keinerlei Erfahrung.
Post by Nicole Wagner
2)
Mit Rave Report: Da soll es ein "Preview" geben und danach kann man
drucken. Leider zeigt mein Preview-Form kein DBGrid, sondern ist grau.
Das wundert mich nicht, denn ich habe nicht herausgefunden, wie ich
Preview mit DBGrid verbinde. Geht das leicht? Wenn ja, bitte langsam
sprechen.
Diese Preview ist eine Vorschau, nicht der eigentlich Report. In diesem
Report stellst Du eine Verbindung zu Deiner Datenmenge her (nicht zu Deinem
Grid), platzierst die Komponenten zu Darstellung eines Feldinhaltes auf
einem Datenband. Ob dann gedruckt oder die Vorschau (Preview) bemüht wird,
das ist unerheblich.
Post by Nicole Wagner
3)
Im Grunde interessiert mich mein DBGrid nicht, sondern dessen Inhalt.
D.h. ich brauche nicht die Grid, sondern das IBQuery dahinter.
Endlich!
Post by Nicole Wagner
Leider
nicht nur die SQL-Abfragen, sondern inkl. aller berechneter und Look-Up
Felder. D.h. incl der Verarbeitung im OnCalc-Ereignis.
Gibt es hier eine elegante Methode, das IBQuery wohin zu schicken? Wie
und wohin?
Diese Daten sind doch dann schon Bestandteil deiner Datenmenge.
Hast Du mal meine Prozedur zum Speichern eines Datasets in eine Datei
ausprobiert? Mache das mal.
Post by Nicole Wagner
Mein DBGrid hat zur Zeit keine Tabelle dahinter. Im Netz gibt es
Hinweise, dass es hier Druckloesungen geben koennte. Weiss jemand hier
ein Link und Naeheres? Ich habe noch nie mit Tabellen gearbeitet und
moechte es nicht wirklich lernen, wenn es vermeidbar ist. Ich moechte
es nur machen, wenn es danach superkomfortabel wird.
Weißt Du was Tabellen sind? Ich fürchte, nein.
Deine Datenbank besteht aus 1-n Tabellen. Mit einer Tabellenkomponente
TIBTable, TTable etc. erhälst Du eine Sicht auf diese Daten, mit allen
Spalten und Zeilen. Per Filter können nun bestimmte _Zeilen_
herausgefiltert werden. Letztendlich erhälst Du eine Datensammlung mit 2
Dimensionen, ähnlich einem Excelblatt. Über eine Datasource kannst Du diese
TIBTable nun mit einem Grid verinden.

Wo ist der Unterschied zu TIBQuery? Die Query erlaubt Dir eine komplexere
Abfrage, die sich evtl. aus den Daten mehrerer Tabellen zusammensetzt. Die
berechneten Felder sind kein Merkmal der Query, die könntest Du auch der
TIBTable gönnen.

Aber was hast Du letztendlich? Letztendlich erhälst Du eine Datensammlung
mit 2 Dimensionen, ähnlich einem Excelblatt. Öhm, das hatten wir doch
schon.

Wenn es um das Lesen und Drucken geht, kannst Du die Tabellen und IBQuery
durchaus gleich ansehen.

Wenn ich Dich in Deiner Bemerkung nicht vollkommen falsch verstanden habe,
dann empfehle ich Dir dringend eine einfache Einführung Delphis
Datenbankkonzept. Demnach hast Du dieses nämlich ganz und gar nicht
verstanden. Dieses ist aber wichtiger zu kennen (zumindest in Grundzügen),
als zu überlegen ob Firebird 2.5 schneller ist als 2.,1 und dadurch
Vorteile zu erwarten sind. Ich erinnere mich an eine diesbezügliche Frage
deinerseits.
Post by Nicole Wagner
5)
Theoretisch muesste es noch eine Mercedes Loesung geben. Und zwar mit
TChart oder TChart Pro. Praktisch weiss ich kaum, wo ich zu suchen
beginnen soll. Ich braeuchte hier ein Schritt-fuer-Schritt Tutorial.
Meines Erachtens muesste es in TChart (Version 8) moeglich sein,
irgendeine (Text?)komponente (welche?) mit der IBQuery (aber auch mit
dem oncalc-event?) zu verbinden und danach Wahnsinnsausdrucke mit allen
Konfigurationen zu erstellen.
Du kennst Diese Komponentne weitaus besser als ich, aber sind diese nicht
dafür gedacht, _Charts_ darzustellen? Ich ging bisher davon aus, dass Du
Deine Daten ähnlich einem Excelblatt ausgedruckt haben möchtest.

Kann das TChart? Die Möglichkeit, ein Dataset (TIBQuery, TTable etc) an
TChart oder TDbChart zu hängen ist doch dafür gedacht, die für
Chartdarstellung notwendigen Werte bereitzustellen.

Dann stolperte ich noch hierüber:

| mit der IBQuery (aber auch mit
| > dem oncalc-event?)

Was meinst Du damit? Fragst Du Dich, ob das OnCalcFields-Event auch
funktionert wenn die IBQuery "irgendwo anders als im Grid" verwendet wird?
Post by Nicole Wagner
6)
Wie sieht es mit anderen Texteditoren aus? Ist es hier sinnvoll zu
graben zu beginnen? Sowas wie TDBMemo? etc.
Was erwartest Du von einem Texteditor wenn Du dee Inhalt eines Datasets
darstellen willst? Die Erwähnung von TDbMemo bestätigt meinen Eindruck der
Notwendigkeit das Datenbankkonzept und den Sinn der Komponenten zu
verstehen.

Ein TDbMemo ist wie ein TDbEdit für nichts anderes da, als den Inhalt eines
bestimmten Feldes des gerade aktiven Datensatzes einer geöffneten
Datenmenge anzuzeigen oder zu bearbeiten. Für nichts mehr. Gar nichts.
Punkt.

Zusätzlich gibt es noch für bestimmte Datentypen spezialisierte
TDbxxxx-Komponenten. So kann man auch TDateTime in einem TDbEdit
darstellen, aber ein TDbDateEdit wäre halt für die Darstellung und
besonders Bearbeitung besser geeignet.


Zurück zum Drucken:

Lerne einen Reportgenerator zu nutzen. Rave Report wird mitgeliefert und
damit sollten sich hier auch einige Leute auskennen. Fast Report kostet, ob
der kostenlose Free Report mit aktuellen Delphis funktioniert, weiß ich
nicht.

Du erwähntest aber das Schicken der Daten an eine Datei als Alternative.
Wie so oft frage ich mich, was Du überhaupt vor hast. Geht es Dir nur um
die Kontrolle von Daten? Dafür wäre als einfache und schnelle Lösung meine
Routine geeignet.

Funktioniert sie nicht? Dann solltest Du es erwähnen.

Reicht das nicht oder geht es um etwas anderes?



Gruß, Joe
--
Nicole Wagner
2011-04-11 10:48:00 UTC
Permalink
Joe Galinke wrote:


....

Danke fuer Deine Antwort.
Werde sie dann durcharbeiten.
Post by Joe Galinke
Funktioniert sie nicht? Dann solltest Du es erwähnen.
Die Routine?
Die hatte ich schon ganz vergessen. Ich habe sie heruntergeladen und in
ToDo verschoben. Dort liegt sie noch immer. Ich muss sie mir mal
ansehen.



TChart:
TChart kann nicht nur zeichnen, sondern TChart kann auch jegliche
Informationen verarbeiten, die es zum Zeichnen braucht. Und das
punktgenau oder als Serie.

D.h. es kann so rein theoretisch (praktisch weiss ich nicht, wie) auf
den dritthoechsten Punkt von links einen Pfeil setzen. Diesen Pfeil
kann es von giftgruen auf zuckerlrosa verlaufend einfaerben und Dir die
gewuenschten Zahlen aus Deiner DB danebendrucken. Und die Hoehe erst
zur Laufzeit bestimmen. Das alles kann auch in die Legende geschickt
werden. Druckdialog kennt TChart sowieso.

Daraus folgt, dass TChart auch DBGrids drucken koennen muss.
Und das mit fast unbegrenzten Konfigurationsmoeglichkeiten.

Die TChart Hilfe gibt auch viele Treffer zu DBGrid. Die Hilfe ist auch
gut. Allerdings ist TChart so maechtig, dass ich gehofft haette, jemand
sagt mir, wo ich anfangen soll. Alleine das herauszufinden wird mich
Stunden kosten.

Am besten werde ich mir zuerst mal Deine Datei ansehen.
Ist auf jeden Fall weniger Arbeit.



Nicole
Joe Galinke
2011-04-11 12:48:23 UTC
Permalink
Hallo Nicole Wagner,
Post by Nicole Wagner
TChart kann nicht nur zeichnen, sondern TChart kann auch jegliche
Informationen verarbeiten, die es zum Zeichnen braucht. Und das
punktgenau oder als Serie.
Du hast meine Annahme gelesen, dass ich von einer tabellenartigen
Darstellung ausgehe? Ohne mir TChart nochmal angesehen zu haben, zweifele
ich doch recht stark daran, dass es dazu in der Lage ist. Die von Dir
genannten Fähigkeiten stellen jedenfalls keinen Hinweis darauf dar.

Aber ich lasse mich gerne eines Besseren belehren.
Post by Nicole Wagner
Daraus folgt, dass TChart auch DBGrids drucken koennen muss.
Und das mit fast unbegrenzten Konfigurationsmoeglichkeiten.
Nein, das folgt nicht daraus, jedenfalls nicht in der von mir angenommenen
Form.
Post by Nicole Wagner
Die TChart Hilfe gibt auch viele Treffer zu DBGrid. Die Hilfe ist auch
gut.
Ich gehe noch immer davon aus, dass es sich um die Darstellung der Daten in
einer Chartform handelt - und natürlich sollte es dann nicht um das Grid,
sondern um irgendein Dataset gehen.


Gruß, Joe
--
Nicole Wagner
2011-04-12 13:48:20 UTC
Permalink
Post by Joe Galinke
Du hast meine Annahme gelesen, dass ich von einer tabellenartigen
Darstellung ausgehe? Ohne mir TChart nochmal angesehen zu haben,
zweifele ich doch recht stark daran, dass es dazu in der Lage ist.
Die von Dir genannten Fähigkeiten stellen jedenfalls keinen Hinweis
darauf dar.
Aber ich lasse mich gerne eines Besseren belehren.
Ich wuenschte, ich koennte!

Die neue Version von TChartPro hat, - so ich die Hilfe richtig
verstanden habe, - sogar eine eigene Komponente, die ein TDBGrid mit
einem TChart verbinden kann (TChartDataSet).

Du hast richtig gelesen: Mit einem CONTROL, nicht mit der Query. Es
waren einige Controls, an die es andocken kann, nicht nur TDBGrid. Ich
glaube auch TTable und andere mehr.

Aber ob Control oder Query, daran soll es nicht (mehr) scheitern.

Zusaetzlich wirbt Steema damit, dass die neue Legende ausgegeben werden
kann in der Optik eines StringGrids. Es sah "in der Werbung" perfekt
aus wie ein Excel Sheet. Also nicht nur tabellarisch, sondern auch die
Tabellengitter gezeichnet.

Normalerweise schickt TChart alles an druckbare Schnittstellen, was es
malen kann. Also ich hoffe auch dies.


Warum ich es noch nicht im Layout-Himmel schwebe?
Gestern(?) ist eine neue TChartPro-Version herausgekommen. Ich wollte
die sofort installieren. Und bin damit so gewaltig auf die Nase
gefallen, dass ich die VM auf den letzten Snapshot zurueckgefahren habe.

Es ging gar nichts mehr. Die DB konnte nicht mehr zugegriffen werden!
Gar nicht mehr. Auch nicht via IBExperts. Frage mich nicht, wie das
eine mit dem anderen was zu tun haben kann.

Als Kind habe ich gerne Monopoly gespielt. Da gab es ein Feld, "zurueck
an den Start". ;-(


Nicole
Joe Galinke
2011-04-12 20:21:25 UTC
Permalink
Hallo Nicole,
Post by Nicole Wagner
Die neue Version von TChartPro hat, - so ich die Hilfe richtig
verstanden habe, - sogar eine eigene Komponente, die ein TDBGrid mit
einem TChart verbinden kann (TChartDataSet).
Du hast richtig gelesen: Mit einem CONTROL, nicht mit der Query. Es
waren einige Controls, an die es andocken kann, nicht nur TDBGrid. Ich
glaube auch TTable und andere mehr.
Nun, TTable ist in dieser Hinsicht TQuery gleichzusetzen. Es handelt sich
um Datasets, Datenmengen.

Ich bin auch bereit zu wetten, dass sie sich einfach vom TDbGrid zum
Dataset hangeln, also letztendlich doch damit arbeiten. TDbGrid hat eine
Property Datasource, die gesetzt sein muss damit das Grid etwas anzeigen
kann. Die Datasource verweist auf ein Dataset, eben jene Datenmenge. Der
Weg ist also sehr kurz und gut ausgeschildert.
Post by Nicole Wagner
Normalerweise schickt TChart alles an druckbare Schnittstellen, was es
malen kann. Also ich hoffe auch dies.
Aber das sagt doch nichts aus.


Nochmal: Natürlich mag trotz all meiner Zweifel TChart zu all dem von Dir
benötigten in der Lage sein.

Aber in der Zeit die Du darauf verwendet hast darin weiterzukommen, hättest
Du mit einer der Billiglösungen schon ein Ergebnis erzielt oder Dich
zumindest in einen Reportgenerator eingearbeitet. Das von Dir benötigte ist
damit nicht sehr schwer und sowas wirst Du sicher später noch brauchen
können.



Gruß, Joe
--
Nicole Wagner
2011-04-13 11:14:38 UTC
Permalink
Post by Joe Galinke
Ich bin auch bereit zu wetten, dass sie sich einfach vom TDbGrid zum
Dataset hangeln, also letztendlich doch damit arbeiten.
... also DA wette ich nicht mehr dagegen.
Aber wie gesagt, ich bin da noch nicht tiefer eingedrungen.

Das letzte gestern war, dass mir der Compiler akzeptierte:
DBChart1.Print;
aber danach rein gar nichts passiert.
Vielleicht ist das print aber auch ein Show-Synonym.

Dort mache ich heute einmal weiter und auch mit der Anleitung von Frank.

(mein DBChart brauche ich sowieso und habe es deshalb auf meinem Form)
Post by Joe Galinke
Post by Nicole Wagner
Normalerweise schickt TChart alles an druckbare Schnittstellen, was
es malen kann. Also ich hoffe auch dies.
Aber das sagt doch nichts aus.
Warum nicht?
Wenn die Legende wunderschoen dargestellt wird und ich sie an die
Druckschnittstelle schicken kann, dann haette ich meinen Ausdruck und
wenn ich ihn mit Rect holen muesste.
Post by Joe Galinke
Aber in der Zeit die Du darauf verwendet hast darin weiterzukommen,
hättest Du mit einer der Billiglösungen schon ein Ergebnis erzielt
Das Weib ist schwach:
Statt gezielt die Arbeit zu machen, freut es sich an bunten
Tortencharts, die auf einmal Positionsgroessen in allen Farben
darstellen. ;-)

Spass beiseite: Ich hoffe, auch mit meinem Wuehlen in TChart ein
Lernergebnis zu erzielen, das ich mittelfristig wieder einsetzen kann.

Weisst Du, wie billig meine Lösung zur Zeit ist?
Ich schreibe es mit der Hand ab. Es sind im Schnitt 20 Zeichen am Tag.
Unter dem Strich gehoert es aber protokolliert und das dann auch
gedruckt.

Seit diesen Montag teste ich meine Software-Schnittstellen endlich
zeitnah. Es war ein sehr weiter Weg. Danke fuer Deine Begleitung.


Nicole
Joe Galinke
2011-04-13 11:39:15 UTC
Permalink
Hallo Nicole,
Post by Nicole Wagner
Post by Joe Galinke
Post by Nicole Wagner
Normalerweise schickt TChart alles an druckbare Schnittstellen, was
es malen kann. Also ich hoffe auch dies.
Aber das sagt doch nichts aus.
Warum nicht?
Wenn die Legende wunderschoen dargestellt wird und ich sie an die
Druckschnittstelle schicken kann, dann haette ich meinen Ausdruck und
wenn ich ihn mit Rect holen muesste.
Da Du andere gern raten lässt mag ich natürlich eine falsche Vorstellung
davon haben, was Du eigentlich bezweckst. Ich wiederhole nochmal, wie ich
es verstanden habe.

Du hast ein DbGrid, eine 2-dimensionale Datendarstellung mit mehr als 2
Spalten oder Zeilen. Diese Daten möchtest Du auf Papier sehen.

Du hast als Legende in TChart so etwas schon gesehen?
Post by Nicole Wagner
Weisst Du, wie billig meine Lösung zur Zeit ist?
Ich schreibe es mit der Hand ab. Es sind im Schnitt 20 Zeichen am Tag.
Unter dem Strich gehoert es aber protokolliert und das dann auch
gedruckt.
20 Zeichen am Tag? Das klingt nun gar nicht nach einer Tabelle
(Griddarstellung) mit mehreren Zeilen und Spalten. Aber genau von so etwas
ging ich von Anfang an aus und habe das auch deutlich gemacht. Lag ich
falsch?


Gruß, Joe
--
Nicole Wagner
2011-04-13 18:40:17 UTC
Permalink
Post by Joe Galinke
Du hast ein DbGrid, eine 2-dimensionale Datendarstellung mit mehr als
2 Spalten oder Zeilen. Diese Daten möchtest Du auf Papier sehen.
Du hast als Legende in TChart so etwas schon gesehen?
ja klar!
Aber nicht nur das, sondern mit Superkomfort: Schriftgroesse, Farbe,
Layout, alles verstellbar. Und Events dazu, mit denen man noch mal
reinschreiben kann.

Sorry, ich finde die Grafik aus meiner Hilfe nicht im Netz.
Sieht genau aus wie ein StringGrid. Mit allem bunt.

das ist der Text:
"The new Custom Legend tool allows to draw a customizable Grid, as if
it was a TStringGrid component, having some more options like draw,
resize, etc..."
Post by Joe Galinke
Post by Nicole Wagner
Weisst Du, wie billig meine Lösung zur Zeit ist?
Ich schreibe es mit der Hand ab. Es sind im Schnitt 20 Zeichen am
Tag. Unter dem Strich gehoert es aber protokolliert und das dann
auch gedruckt.
20 Zeichen am Tag? Das klingt nun gar nicht nach einer Tabelle
(Griddarstellung) mit mehreren Zeilen und Spalten. Aber genau von so
etwas ging ich von Anfang an aus und habe das auch deutlich gemacht.
Lag ich falsch?
Nein.
Das Grid ist vom nicht-zeitnahen Test bereits derart umfangreich, dass
ich meiner Query ein Datumsfilter verpasst habe.

Wie passt das zu 20 Zeichen?
Im Grid stehen Geschaefte, die abgeschlossen sind, die ueberwaeltigende
Mehrheit. Die liegen gut in meiner DB und wenn ich sie erst in 5 Wochen
drucken kann, kann ich damit leben.

Dann stehen im Grid offene Positionen. Die ändern sich ohnehin jeden
Tag und ich interessiere mich nur, was dabei herauskommt. Kein Druck.

Dann kann meine Query ausrechnen, wieviel Geld zum Investieren frei ist
und wieviel man lieber in Cash halten soll. Das aendert sich auf jeden
Klick und wird nicht gedruckt.

Dann haelt mein Grid - aufgepasst - jene Positionen, die zur
Schnittstelle an den Broker gehen sollen (die bin uebrigens ich). Die
Query braucht hier sehr viele Informationen, um die monetaeren Posten
zu rechnen bzw. die Zahlen zu kumulieren.
Einzeln (also nicht kumuliert) kenne ich diese Infos auswaendig. Zudem
kenne ich die Boersenkuerzel auswaendig und benutze sie. Ein Buchstabe
fuer eine hochkomplexe Anweisung. Fuer den Ungeuebten unlesbar wie
Perl. Mir sagt das was und ich kann es schnell auf einen Zettel
kritzeln. Mit 20 Zeichen komme ich also durch.

Allerdings kann und werde ich beim Abschreiben / Selektieren Fehler
machen. Die Frage ist nicht ob, sondern wann.
Daher wird mein Computer das fuer mich drucken. Auf dass ich nur mehr
falsch ablesen kann, ;-)




Doch zurueck zum Druck.
Die alten Versionen von TChart bieten das an:
Drucken via div Druck-Formate, mit oder ohne SKalierung und
Randbreitensteuerung. Drucken mit Blattvorschub und ohne, sowie
Ausschnittsdrucken und Zeichnen "waehrend" des Druckens.

Details hier:
http://www.berneda.com/publicnews/public/teechart6/general/files/How%20t
o%20Print%20Better.txt


Doch das ist nicht der Weisheit letzter Schluss.
Zur Zeit teste ich das: TTeePreviewPanel, das ab 2010 drin ist.
Dem Ding (bzw. seinem Property Panel) kann man in einer
Programmier-Zeile zur Laufzeit jedes beliebige Chart oder einen
Ausschnitt davon hinschieben und den Druckbereich mit der Maus
festlegen.

Ich bin zur Zeit noch in der Suchphase, die Eckdaten des Dings sind
aber die:

ererbt aus TCustomPanel

Description:
The TTeePreviewPanel is a panel that may be inserted on a dialogue form
to show WYSIWYG printable output of a Chart. The Panel
includes option buttons to change print characteristics.


Methoden:
("Partial" heisst mE ohne Blattvorschub, Rect sollte der Ausschnitt
sein, auch jener der Legende)

Print

DrawZoomRectangle
HasBackImage
UndoZoom

CalcMetaBounds
CalcProportionalMargins
CanClip
CanvasChanged
ChartPrintRect
CopyToClipboardBitmap
CopyToClipboardMetafile
Draw
DrawPanelBevels
DrawToMetaCanvas
GetCursorPos
GetRectangle
Invalidate
IsScreenHighColor
PrintLandscape
PrintOrientation
PrintPartial
PrintPartialCanvas
PrintPortrait
PrintRect
ReCalcWidthHeight
SaveToBitmapFile
SaveToMetafile
SaveToMetafileEnh
SaveToMetafileRect
SetBrushCanvas
SetInternalCanvas
TeeCreateBitmap
TeeCreateMetafile


Nicole
André Kanisch
2011-05-26 11:37:13 UTC
Permalink
Hi Nicole,

ich glaube, Du hast das mit den Datenbanken wirklich einfach noch
nicht begriffen. Da solltest Du ansetzen und einfach mal ein gutes
Buch dazu lesen.
TChart kann sicher auch eine Tabelle drucken. Man kann damit auch
Autos malen. Aber für beide Sachen gibt es einfachere und schnellere
Lösungen. Die von Dir erwähnte Komponente TChartDataSet arbeitet genau
anders herum als von Dir vermutet. Hast Du es mal probiert? Wie der
Name schon vermuten läßt, stellt TChartDataSet eine Verbindung
zwischen einem Chart und einer TDataSource-Komponente her. Der Inhalt
des Charts stellt also Deine Datenquelle dar (statt einer Table/Query)
und Du kannst über die TChartDataSet diese an einen TDataSource
weiterreichen und die Daten dann darstellen. Im besten Fall hast Du
halt hinterher genau die Daten wieder, mit denen Du TChart gefüllt
hast.
Mit der von Dir erwähnten Legende meinst Du vermutlich TDataTableTool.
Damit kannst Du die Werte der Datenreihen unter dem Chart anzeigen.
Dieses ChartTool ist nicht wirklich geeignet, um eine Tabelle zu
drucken.
Ich empfehle Dir dringendst, mal ein Buch zum Thema Delphi &
Datenbanken zu lesen. Aus meiner Sicht glänzt Du mit Halbwissen und
Annahmen, die Dich ständig in eine Sackgasse manövrieren. Du brauchst
wirklich Basics zum Thema und die bekommst Du wirklich schneller, wenn
Du mal ein Buch liest, in dem das Thema zusammenhängend erklärt wird.

Gruß,
André
Post by Nicole Wagner
Post by Joe Galinke
Du hast meine Annahme gelesen, dass ich von einer tabellenartigen
Darstellung ausgehe? Ohne mir TChart nochmal angesehen zu haben,
zweifele ich doch recht stark daran, dass es dazu in der Lage ist.
Die von Dir genannten Fähigkeiten stellen jedenfalls keinen Hinweis
darauf dar.
Aber ich lasse mich gerne eines Besseren belehren.
Ich wuenschte, ich koennte!
Die neue Version von TChartPro hat, - so ich die Hilfe richtig
verstanden habe, - sogar eine eigene Komponente, die ein TDBGrid mit
einem TChart verbinden kann (TChartDataSet).
Du hast richtig gelesen: Mit einem CONTROL, nicht mit der Query. Es
waren einige Controls, an die es andocken kann, nicht nur TDBGrid. Ich
glaube auch TTable und andere mehr.
Aber ob Control oder Query, daran soll es nicht (mehr) scheitern.
Zusaetzlich wirbt Steema damit, dass die neue Legende ausgegeben werden
kann in der Optik eines StringGrids. Es sah "in der Werbung" perfekt
aus wie ein Excel Sheet. Also nicht nur tabellarisch, sondern auch die
Tabellengitter gezeichnet.
Normalerweise schickt TChart alles an druckbare Schnittstellen, was es
malen kann. Also ich hoffe auch dies.
Warum ich es noch nicht im Layout-Himmel schwebe?
Gestern(?) ist eine neue TChartPro-Version herausgekommen. Ich wollte
die sofort installieren. Und bin damit so gewaltig auf die Nase
gefallen, dass ich die VM auf den letzten Snapshot zurueckgefahren habe.
Es ging gar nichts mehr. Die DB konnte nicht mehr zugegriffen werden!
Gar nicht mehr. Auch nicht via IBExperts. Frage mich nicht, wie das
eine mit dem anderen was zu tun haben kann.
Als Kind habe ich gerne Monopoly gespielt. Da gab es ein Feld, "zurueck
an den Start". ;-(
Nicole
Frank Rothweiler
2011-04-13 04:03:10 UTC
Permalink
Vor einigen Jahren hatte ich mal ein kurzes Tutorial zu TChart verfaßt:

Kleines Tutorial zur Verwendung von Teechart v8.05

Einige Tage intensive Suche nach einem verständlichen Tutorials über die
Verwendung von Teechart, das den Einstieg in die Erstellung von
Statistikdiagrammen erleichtert, haben außer der Erkenntnis, daß es wohl
keine brauchbaren Texte gibt, nicht viel erbracht. Immerhin hab ich dann
doch diese Seite gefunden:

http://www.teechart.net/reference/articles/Database.htm

Zwar in Englisch, doch was ein guter Delphi-Programmierer sein will,
darf sich davon nicht einschüchtern lassen. Hab ich also mein altes
Babylon irgendwo wieder rausgekramt und mir die Seite mühsam erarbeitet.
Ich wollte wissen, wie das geht, um (fast) jeden Preis, und nun weiß ich
ein wenig mehr und kann tatsächlich Diagramme mit wunderschönen Farben
erscheinen lassen.

Erste Schritte

Gegeben ist eine Datenbank mit den Tabellen Umsatz und Käufer. In der
Umsatztabelle sind zwei Felder relevant: Datum des Verkaufs und Betrag.
Wir wollen nun ein Diagramm sehen, das den monatlichen, den
quartalsbezogenen und den jährlichen Umsatz anzeigt. Dabei gehen wir
folgendermaßen vor:

1. Wir setzen die Active-Eigenschaft jenes Datasets, das für die
Umsatztabelle verantwortlich ist, auf TRUE, damit wir beim Werkeln auch
gleich sehen können, was wir angerichtet haben.
2. Wir setzen eine TDBChart-Komponente auf unser Formular.
3. Mit einem Doppelklick auf die Komponente erscheint der
Komponenten-Editor von Teechart.
4. Links in der Baumstruktur gehen wir auf den Punkt Series und fügen
eine neue Serie mit dem Plus-Button ganz rechts hinzu.
5. Es erscheint die TeeChart-Gallery, wo wir uns ein Chart-Modell
aussuchen können. Der Einfachheit halber wählen wir das Bar-Modell.
6. Unten können wir uns noch einen Stil aussuchen. Danach drücken wir OK.
7. Die neue Serie erscheint unter dem namen Series1. Mit dem
Title-Button rechts weisen wir Ihr einen neuen Namen zu, damit wir immer
gleich wissen, wozu diese Serie gut ist: Jahresumsatz.
8. Nun gehen wir in der Baumstruktur links auf die neue Serie. Es
erscheint der Serien-Editor.
9. Im oberen Pagecontrol wählen wir Data Source aus.
10. In der oberen Combobox wählen wir Summary aus, weil wir
Umsatz-Summen anzeigen lassen wollen.
11. Als Dataset wählen wir unsere Dataset-Kompenente, die für die
Umsatz-Tabelle steht und deren Active-Property wir anfangs auf TRUE
gesetzt haben.
12. Nun stehen uns alle Felder der Umsatztabelle zur Verfügung.
13. Aus der Combo Calc wählen wir den Eintrag Sum.
14. Die Combo of gibt an, von welchem Feld die Summe berechnet werden
soll. Bei mir ist das die Spalte Endpreis.
15. In der zweiten Combo der Zeile Group by wählen wir das Feld, das
unser Verkaufsdatum beinhaltet.
16. Nun können wir in der ersten Combo von Group by auswählen, ob wir
jährliche, vierteljährliche, monatliche usw. Auswertungen wünschen. Wir
wählen hier erst einmal Year.
17. Unten rechts Close drücken. Die Frage Apply? mit ja beantworten. Fertig.

Ziemlich viele Einstellungen, nicht? Wir können uns diese
Einstellungsarbeit aber sparen: Wenn wir nun die nächsten Series
hinzufügen, machen wir das mit dem Clone-Button. Die neue Serie nennen
wir Quartal und stellen nur noch Quarter statt Year ein. Bei der Anzeige
für den Monat (Series 3) machen wir das ebenso, stellen Month statt Year
ein.

Mittels einer ComboBox oder einer Radiogroup können wir nun vom Anwender
steuern lassen, welche Statistik angezeigt werden soll. In die
Ereignisbehandlung der ComboBox (hier: ComboFlat_Statistik) mit den
Einträgen

Jahres-Verkaufs-Statistik in Euro
Quartals-Verkaufs-Statistik in Euro
Monats-Verkaufs-Statistik in Euro

schreiben wir folgenden Code:

procedure TFormMain.ComboFlat_StatistikChange(Sender: TObject);
begin
{Titelzeile des Diagramms zuweisen}
DBChart1.Title.Text[0] := ComboFlat_Statistik.Text;

{Die letzte angezeigte Statistik = die letzte angezeigte Serie
deaktivieren}
DBChart1.Series[LastStatistik].Active := FALSE;

{Die nun ausgewählte Serie aktivieren}
DBChart1.Series[ComboFlat_Statistik.ItemIndex].Active := TRUE;

{Der Variablen LastStatistik den nun ausgewählte Serien-Index
zuweisen}
LastStatistik := ComboFlat_Statistik.ItemIndex;
end;

Wie ihr seht, benötigen wir hier noch eine globale Integer-Variable
LASTSTATISTIK, um die zuvor angezeigte Serie ausblenden zu können. Das
Ausblenden entspricht dem Entfernen des Häkchens im TeeChart-Editor
unter Serien. Natürlich dürfen wir nicht vergessen, beim Programmstart
der Variablen LASTSTATISTIK die aktuelle Einstellung zuzuweisen.

Wenn ihr nun beim Starten eurer Anwendung bemerkt, daß die Jahre, Monate
und Quartale völlig durcheinander erscheinen, liegt das an der aktuellen
Sortierung eures Datasets. Die Lösung besteht darin, einfach nach
Verkaufsdatum sortieren zu lassen, bevor das Diagramm angezeigt wird.
Frank Rothweiler
2011-04-13 04:13:47 UTC
Permalink
Vor einigen Jahren hatte ich mal ein kurzes Tutorial zu TChart verfaßt:

Kleines Tutorial zur Verwendung von Teechart v8.05

Einige Tage intensive Suche nach einem verständlichen Tutorials über die
Verwendung von Teechart, das den Einstieg in die Erstellung von
Statistikdiagrammen erleichtert, haben außer der Erkenntnis, daß es wohl
keine brauchbaren Texte gibt, nicht viel erbracht. Immerhin hab ich dann
doch diese Seite gefunden:

http://www.teechart.net/reference/articles/Database.htm

Zwar in Englisch, doch was ein guter Delphi-Programmierer sein will,
darf sich davon nicht einschüchtern lassen. Hab ich also mein altes
Babylon irgendwo wieder rausgekramt und mir die Seite mühsam erarbeitet.
Ich wollte wissen, wie das geht, um (fast) jeden Preis, und nun weiß ich
ein wenig mehr und kann tatsächlich Diagramme mit wunderschönen Farben
erscheinen lassen.

Erste Schritte

Gegeben ist eine Datenbank mit den Tabellen Umsatz und Käufer. In der
Umsatztabelle sind zwei Felder relevant: Datum des Verkaufs und Betrag.
Wir wollen nun ein Diagramm sehen, das den monatlichen, den
quartalsbezogenen und den jährlichen Umsatz anzeigt. Dabei gehen wir
folgendermaßen vor:

1. Wir setzen die Active-Eigenschaft jenes Datasets, das für die
Umsatztabelle verantwortlich ist, auf TRUE, damit wir beim Werkeln auch
gleich sehen können, was wir angerichtet haben.
2. Wir setzen eine TDBChart-Komponente auf unser Formular.
3. Mit einem Doppelklick auf die Komponente erscheint der
Komponenten-Editor von Teechart.
4. Links in der Baumstruktur gehen wir auf den Punkt Series und fügen
eine neue Serie mit dem Plus-Button ganz rechts hinzu.
5. Es erscheint die TeeChart-Gallery, wo wir uns ein Chart-Modell
aussuchen können. Der Einfachheit halber wählen wir das Bar-Modell.
6. Unten können wir uns noch einen Stil aussuchen. Danach drücken wir OK.
7. Die neue Serie erscheint unter dem namen Series1. Mit dem
Title-Button rechts weisen wir Ihr einen neuen Namen zu, damit wir immer
gleich wissen, wozu diese Serie gut ist: Jahresumsatz.
8. Nun gehen wir in der Baumstruktur links auf die neue Serie. Es
erscheint der Serien-Editor.
9. Im oberen Pagecontrol wählen wir Data Source aus.
10. In der oberen Combobox wählen wir Summary aus, weil wir
Umsatz-Summen anzeigen lassen wollen.
11. Als Dataset wählen wir unsere Dataset-Kompenente, die für die
Umsatz-Tabelle steht und deren Active-Property wir anfangs auf TRUE
gesetzt haben.
12. Nun stehen uns alle Felder der Umsatztabelle zur Verfügung.
13. Aus der Combo Calc wählen wir den Eintrag Sum.
14. Die Combo of gibt an, von welchem Feld die Summe berechnet werden
soll. Bei mir ist das die Spalte Endpreis.
15. In der zweiten Combo der Zeile Group by wählen wir das Feld, das
unser Verkaufsdatum beinhaltet.
16. Nun können wir in der ersten Combo von Group by auswählen, ob wir
jährliche, vierteljährliche, monatliche usw. Auswertungen wünschen. Wir
wählen hier erst einmal Year.
17. Unten rechts Close drücken. Die Frage Apply? mit ja beantworten. Fertig.

Ziemlich viele Einstellungen, nicht? Wir können uns diese
Einstellungsarbeit aber sparen: Wenn wir nun die nächsten Series
hinzufügen, machen wir das mit dem Clone-Button. Die neue Serie nennen
wir Quartal und stellen nur noch Quarter statt Year ein. Bei der Anzeige
für den Monat (Series 3) machen wir das ebenso, stellen Month statt Year
ein.

Mittels einer ComboBox oder einer Radiogroup können wir nun vom Anwender
steuern lassen, welche Statistik angezeigt werden soll. In die
Ereignisbehandlung der ComboBox (hier: ComboFlat_Statistik) mit den
Einträgen

Jahres-Verkaufs-Statistik in Euro
Quartals-Verkaufs-Statistik in Euro
Monats-Verkaufs-Statistik in Euro

schreiben wir folgenden Code:

procedure TFormMain.ComboFlat_StatistikChange(Sender: TObject);
begin
{Titelzeile des Diagramms zuweisen}
DBChart1.Title.Text[0] := ComboFlat_Statistik.Text;

{Die letzte angezeigte Statistik = die letzte angezeigte Serie
deaktivieren}
DBChart1.Series[LastStatistik].Active := FALSE;

{Die nun ausgewählte Serie aktivieren}
DBChart1.Series[ComboFlat_Statistik.ItemIndex].Active := TRUE;

{Der Variablen LastStatistik den nun ausgewählte Serien-Index
zuweisen}
LastStatistik := ComboFlat_Statistik.ItemIndex;
end;

Wie ihr seht, benötigen wir hier noch eine globale Integer-Variable
LASTSTATISTIK, um die zuvor angezeigte Serie ausblenden zu können. Das
Ausblenden entspricht dem Entfernen des Häkchens im TeeChart-Editor
unter Serien. Natürlich dürfen wir nicht vergessen, beim Programmstart
der Variablen LASTSTATISTIK die aktuelle Einstellung zuzuweisen.

Wenn ihr nun beim Starten eurer Anwendung bemerkt, daß die Jahre, Monate
und Quartale völlig durcheinander erscheinen, liegt das an der aktuellen
Sortierung eures Datasets. Die Lösung besteht darin, einfach nach
Verkaufsdatum sortieren zu lassen, bevor das Diagramm angezeigt wird.

Ein Bild des Resultats findet ihr dort:
Loading Image...
Nicole Wagner
2011-04-13 11:26:45 UTC
Permalink
Post by Frank Rothweiler
Vor einigen Jahren hatte ich mal ein kurzes Tutorial zu TChart
Kleines Tutorial zur Verwendung von Teechart v8.05
Einige Tage intensive Suche nach einem verständlichen Tutorials über
die Verwendung von Teechart, das den Einstieg in die Erstellung von
Statistikdiagrammen erleichtert, haben außer der Erkenntnis, daß es
wohl keine brauchbaren Texte gibt, nicht viel erbracht. Immerhin hab
http://www.teechart.net/reference/articles/Database.htm
danke fuer das Link!



Also wie man an Tutorials kommt, das weiss ich schon:

Es gibt eine Datei, die heisst irgenwas mit *New*.exe.
Diese Datei ist in der TChart-Hilfe und auch irgendwo im Netz bei
Steema zum Download.

Die rufe man auf gebe ein "Tutorials". Dann kommen 12 Stueck oder noch
mehr. Sie liegen bei mir ausgedruckt auf meinem ToDo-Stapel. Mein
Drucker hat wie bei jedem 3. mal wieder alle paar Zeilen ausgelassen
(ein Epson).

Die Tutorials sind zwar sehr gut, doch auch lange und ich wuerde Tage,
wenn nicht Wochen brauchen, sie durchzuarbeiten. - Wenn ich sie
komplett lesen koennte.

Ich finde also wieder mal die Loesung vor lauter Hilfetext nicht.
Post by Frank Rothweiler
Zwar in Englisch, doch was ein guter Delphi-Programmierer sein will,
darf sich davon nicht einschüchtern lassen.
sicher nicht.
Ich bin eher allergisch auf irrefuehrende Uebersetzungen ins Deutsche.




[.....]

Ganz lieben Dank fuer Deine Anleitung!!
Die Grafik sieht ganz toll aus!!
Ich habe mir alles einmal auf den Desktop kopiert und werde es Schritt
fuer Schritt durcharbeiten. Wenigstens weiss ich, dass in der richtigen
Anleitung bin.

Und sie bleibt im Netz stehen. Darueber freut sich noch nach Jahren
jemand.



Nicole
Loading...