![]() |
TCharts in der Druckvorschau
Hallo,
ich habe bspw. in Form1 mehrere Charts, die ich in unterschiedlichen Layouts (1, 2, 3 oder 4 Charts auf einer Seite, dazu noch Hoch- oder Querformat) ausdrucken möchte. Dazu soll vorher eine Druckvorschau möglich sein. Ich habe es bisher so gelöst, dass ich in einem neuen Form ein Shape platziert habe und darin im Prinzip alles entweder auf dem Shape oder auf dem Drucker (drucker.canvas) nochmal neu zeichne, sowohl den Text, als auch die Charts. Langsam wächst mir der Aufwand aber über den Kopf, die eigentlich fertigen Charts aus Form1 nochmal Strich für Strich in einer ansprechenden Form zu zeichnen. Gibt es eine Möglichkeit, so ein Chart in das Shape gezielt (gemäß notwendiger Koordinaten) zu kopieren und anschließend auszudrucken ? Ich habe auch schon versucht, im Shape ein TChart zu setzen und in dieses die Daten aus Form1 nochmal reinzuschreiben (series1.addxy(...). Doch dann liegt das Chart immer hinter dem Shape. Ich hoffe, es gibt da eine elegante Lösung und ich muss nicht tatsächlich nochmal alles selbst zeichnen. Vielen Dank im Voraus |
AW: TCharts in der Druckvorschau
Verwendest du ein Reportsystem ( RAVE, QR, FR, ...)?
|
AW: TCharts in der Druckvorschau
Nein, die Daten werden alle aus einer Datei eingelesen und entsprechend eines Berechnungsalgorithmus verarbeitet und die Ergebnisse in Charts dargestellt. Ich weis nicht, ob sich dafür ein Reportsystem anbieten würde ?
MfG |
AW: TCharts in der Druckvorschau
Hi,
ich benutze TChart und Quickreport zusammen. Im Ordner vom TChart ist eine QRChart-Komponente. Funktioniert super. Mehrere Seiten kann man mit einen Compositereport zusammenfassen. |
AW: TCharts in der Druckvorschau
@Darlo,
Danke, werde ich mal probieren. Habe aber meine Bedenken, ob ich da meine verschiedenen Layouts gestalten kann und vor allem, ob man so ein TChart auch um 90 bzw. 270° drehen kann, wenn man eine Ausgabe im Querformat benötigt. Aber Versuch macht klug... MfG |
AW: TCharts in der Druckvorschau
Quickreport unterstützt Hoch- und Querformat. Alternative kannst Du ja die TCharts als Bild exportieren, drehen und einfügen.
|
AW: TCharts in der Druckvorschau
Hi,
ich bin schon fleißig am Experimentieren. Aber schon sind erste Fehler da: Ich bekomme beim Erstellen der Series im QRChart mit z.B:
Code:
eine Fehlermeldung: 'Listenindex überschreitet das Maximum (1)'.
for z:=1 to 50 do begin
qrchart1.Chart.Series[1].addxy(z,z*z,'',clBlack); end; Keine Ahnung, was da gemeint ist. Bezieht sich das auf die series ? Muß ich da noch was voreinstellen ? MfG Zusätzlich habe ich auch das OnNeedData-Ereignis wie folgt gesetzt:
Code:
MfG
procedure TForm13.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean); begin MoreData:=(z < 50); inc(z); end; |
AW: TCharts in der Druckvorschau
Vielleicht Series[0] statt Series[1]?
Code:
qrchart1.Chart.Series[0].addxy(z,z*z,'',clBlack);
|
AW: TCharts in der Druckvorschau
Nee,
mit series[0] macht er den Report garnicht mehr auf... Nun sehe ich, dass im OI die Eigenschaft QRChart1.Chart auf (TQRDBChart) gesetzt ist. Könnte es daran liegen, dass irgendwie immer Werte aus einer Datenbank erwartet werden ? Wie kann ich das änder? |
AW: TCharts in der Druckvorschau
Erstmal gelöst:
Habe das OnNeedData-Ereignis wieder rausgenommen und das Füllen des Charts in das Ereignis QuickRep1.BeforePrint gesetzt:
Code:
Vllt. geht es auch noch eleganter. Aber ich bin erstmal zufrieden...
procedure TForm13.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean); var i: integer; begin for i:=1 to anz_mw do qrchart1.Chart.Series[1].AddXY(i,messwerte[messkanal-1,i],'',clBlack); end; Danke an alle |
AW: TCharts in der Druckvorschau
Hi,
ein neuer Anlauf: Habe inzwischen den Gedanken mit Quickreport wieder verworfen und mich mal an das riesige Paket TeeChart von Steema gewagt. Habe mir dazu die Trial-Version (TeeChartPro 2011 VCL)runtergeladen und ich muss schon sagen, da ergeben sich 'ne Menge Möglichkeiten, um ansprechende Charts zu produzieren. Aber speziell zu meinem Problem habe ich noch keine Lösung ansatzweise gefunden. Es soll in einer Art Preview angezeigt werden, wie der Druck aussehen wird. Dazu habe ich mir bspw. in Form1 ein TeePreviewPanel1 (Orientation ist ppoPortrait) und auf die weiße 'Papierfläche' eine TChart-Komponente eingefügt . Hier beginnt das eigentliche Problem. Ich möchte nun das komplette TChart um 90 Grad drehen (incl. Title, Legende, etc.) um bei einem Ausdruck im Hochformat das Diagramm auf dem Blatt quer zu legen. Das ganze hätte den großen Vorteil, das ich dann nur das Chart drehen müßte und nicht alle möglichen Texte in Kopf- oder Fußzeilen. Ich finde einfach keine Möglichkeit, dies über irgenwelche Chart-Eigenschaften oder Methoden zu realisieren. Eine andere und sicher aufwendigere Lösung wäre wohl die von Darlo vorgeschlagene Zitat:
Hoffentlich habt ihr einpaar gute Ideen, die mir das Leben nicht allzu schwer machen werden. Vielen Dank delphinewbie |
AW: TCharts in der Druckvorschau
Tach,
Zitat:
Code:
Gruß
chart1.SaveToBitmapFile([filename]);
|
AW: TCharts in der Druckvorschau
Der Beitrag kann gelöscht werden...
|
AW: TCharts in der Druckvorschau
So, nun bin ich tatsächlich so weit gekommen, dass ich also ein Chart als Bild in die Zwischenablage lege, es anschließend in ein Image schiebe und anschließend drehe. Das ganze in einem Quickreport (Form16) mit QRImage.
Code:
Das Problem liegt jetzt aber in der Bildqualität. Offensichtlich treten bei meinem Vorgehen Qualitätsverluste auf, sodass der Ausdruck nicht sonderlich gut aussieht. Insbesondere wird das bei den Achsenbeschriftungen des Charts deutlich, wo hier plötzlich grüne Schatten auftreten.
FJpeg : TJPEGImage;
clip: TClipboard; form1.Chart1.CopyToClipboardBitmap; clip:=Clipboard; form16.QRImage1.Picture.bitmap.LoadFromClipboardFormat(CF_Bitmap,clip.GetAsHandle(CF_Bitmap),0); FJpeg:=TJPEGImage.Create; FJpeg.Assign(form16.QRImage1.Picture.bitmap); FJpeg.Transform(TJpegTransform(jt_ROT_270)); form16.QRImage1.Picture.Assign(FJpeg); FJpeg.Free; clip.Clear; Liegt das in der Natur des Verfahrens (FJpeg.Transform) begründet oder gibt es etwa noch einen Parameter, den man setzen muss ? Hat noch jemand dieses Phänomen bemerkt ? Der Effekt tritt übrigens auch auf, wenn das Image nicht gedreht wird, also ohne 'FJpeg.Transform(TJpegTransform(jt_ROT_270));' Lege ich dagegen ein QRChart auf den QuickReport, das dann mit Werten gefüllt wird, ergibt das einen sauberen Ausdruck. Wo treten die Verluste ein ? Hat jemand eine Idee ? Danke, delphinewbie |
AW: TCharts in der Druckvorschau
bessere(einstellbare) Ergebnisse bekommst Du mit z.B.
Delphi-Quellcode:
Chart1.TeeCreateMetafile(true,Rect(0,0,1000,1000)); //WMF
//oder Chart1.Draw(DestCanvas,Rect(0,0,1000,1000)); |
AW: TCharts in der Druckvorschau
Vielen Dank,
das werde ich gleich mal ausprobieren. |
AW: TCharts in der Druckvorschau
Ich habe es jetzt mal so gemacht :
Code:
Hatte aber leider keinen Erfolg damit. Sieht genau noch so bescheiden aus wie vorher...
form1.Chart1.Draw(form16.QRImage1.Canvas,Rect(0,0,form1.Chart1.Width,form1.Chart1.Height));
FJpeg:=TJPEGImage.Create; FJpeg.Assign(form16.QRImage1.Picture.bitmap); FJpeg.Transform(TJpegTransform(jt_ROT_180)); form16.QRImage1.Picture.Assign(FJpeg); FJpeg.Free; |
AW: TCharts in der Druckvorschau
wahrscheinlich pixelig?
nimm doch mal größere Breiten/Höhen |
AW: TCharts in der Druckvorschau
Liste der Anhänge anzeigen (Anzahl: 1)
Habe für das QRImage und auch fürs Chart schon größtmögliche Maße genommen, so dass es gerade auf eine A4-Seite passt.
Leider kein Erfolg. Zur Veranschaulichung habe ich den Quickreport in eine PDF-Datei (Siehe Angehängte Datei) gedruckt, damit ihr euch mal ein Bild von meinem Problem machen könnt. So wie es in der Datei aussieht, so wird es auch auf andere Drucker und auch im Preview dargestellt. Also ziemlich unbrauchbar. Hilfe-Hilfe-Hilfe |
AW: TCharts in der Druckvorschau
meinst Du die JPG-Artefakte?
|
AW: TCharts in der Druckvorschau
Keine Ahnung, wie das heißt, aber schön sieht es nicht aus, oder ?
|
AW: TCharts in der Druckvorschau
.. musst Du zwingend ein jpg nehmen um darauf zu zeichnen.
Die Artefakte könnten durch die jpg Kompression entstanden sein. Bei der eher monochromatischen Zeichnung sollten die Resultate mit einem bitmap (bmp) besser aussehen. Grüße Klaus |
AW: TCharts in der Druckvorschau
Die Grafik soll nicht monochrom bleiben, das war nur ein erster Versuch. Eigentlich sollen mehrere Series in unterschiedlichen Farben und Diagrammhintergrund dargestellt werden. Dazu kommt die Legende etc.
Kann man die Kompression irgendwie runter setzen, um die Artefakte zu vermeiden ? |
AW: TCharts in der Druckvorschau
kann man, aber nimm doch lieber gleich ein Bitmap ...
|
AW: TCharts in der Druckvorschau
Liste der Anhänge anzeigen (Anzahl: 1)
Anbei nur mal ein Beispiel mit TChart und Quickreport.
Gruß |
AW: TCharts in der Druckvorschau
@Bummi,an welcher Stelle sollte ich also ein Bitmap nehmen ? Ich befürchte nur, dass sich ein Bitmap nicht so einfach drehen lässt mit der Transform-Methode.
Könnte es trotzdem so klappen ? Bin im Moment nicht auf Arbeit und kann nicht testen.
Code:
@Darlo, Danke für dein Beispiel. Nur muss ich mich entscheiden, entweder die Charts zu drehen, um das Blatt mit den Kopfzeilen, Fusszeilen,etc. im Hochformat drucken zu können oder eben den Text in den Kopfzeilen, Fusszeilen etc. drehen, damit ich das Blatt im Querformat habe und die Charts nicht drehen muss. Ich hoffe, du verstehst, wie ich das meine. Meine test.pdf im Anhang von #19 zeigt ja, dass ich u.a auch einen Rahmen benötige, verschiedene Textzeilen. Und da empfinde ich es als leichter zu realisieren, wenn man dann nur die Charts dreht. Solange alles auf einem Blatt gleich ausgerichtet ist, gibt es keine Probleme, nur wenn bspw. der Text ungedreht, die Grafik aber um 270 Grad gedreht werden muss.
FJpeg: TBitmap;
form1.Chart1.CopyToClipboardBitmap; clip:=Clipboard; form16.QRImage1.Picture.bitmap.LoadFromClipboardFormat(CF_Bitmap,clip.GetAsHandle(CF_Bitmap),0); FJpeg:=TBitmap.Create; FJpeg.Assign(form16.QRImage1.Picture.bitmap); FJpeg.Transform(TJpegTransform(jt_ROT_270)); form16.QRImage1.Picture.Assign(FJpeg); FJpeg.Free; clip.Clear; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz