Chart für Druck
-
- Beiträge: 129
- Registriert: Sa 25. Mai 2013, 07:43
- OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
- CPU-Target: 32Bit
Chart für Druck
Hallo an Alle,
ich versuche gerade ein Programm zu schreiben, bei dem ich Messwerte aus einer Datenbank auslese,
sie in einem Stringgrid und in einem TAChart darzustellen und evtl. Ausgeben in eine PDF-Datei.
Datenbank und Stringgrind ist kein Problem und für das TAChart
gibt es jede menge Beispiele, das werde ich sicher hinbekommen.
Meine Frage:
Kann ich, wenn ich den Chart gezeichnet habe, diesen dann auch für einen
Ausdruck in eine PDF-Datei verwenden?
Wenn Nein, wie könnte ich das lösen, wenn ich einen Chart zeichne, den auch für
die Ausgabe zu verwenden.
Danke für jede Hilfe.
ich versuche gerade ein Programm zu schreiben, bei dem ich Messwerte aus einer Datenbank auslese,
sie in einem Stringgrid und in einem TAChart darzustellen und evtl. Ausgeben in eine PDF-Datei.
Datenbank und Stringgrind ist kein Problem und für das TAChart
gibt es jede menge Beispiele, das werde ich sicher hinbekommen.
Meine Frage:
Kann ich, wenn ich den Chart gezeichnet habe, diesen dann auch für einen
Ausdruck in eine PDF-Datei verwenden?
Wenn Nein, wie könnte ich das lösen, wenn ich einen Chart zeichne, den auch für
die Ausgabe zu verwenden.
Danke für jede Hilfe.
Vbxler
-------------------------
-------------------------
Re: Chart für Druck
Nein, PDF-Export ist bei TAChart nicht drin, soviel ich weiß. Im Prinzip könnte es mit Hilfe des fpvectorial-Packages, für das es einen TAChart-Drawer gibt, gehen, aber da hat noch keiner die Schreibroutinen für pdf geschrieben. Ich bin jetzt bei pdf-Erstellung nicht so drin, aber vielleicht kann man svg, wmf oder Bitmap-Dateien in pdf einfügen? Zu diesen Formaten gäbe es Beispiele in den Ordnern "fpvectorial", "save", "wmf" des Demo-Verzeichnisses von TAChart.
Zuletzt geändert von wp_xyz am Mo 31. Aug 2015, 22:52, insgesamt 1-mal geändert.
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: Chart für Druck
Vbxler schrieb was von Druck für PDF. Es gibt Programme die sich als Drucker anmelden, aber die Daten einfach als PDF speichern. Ich glaube das war gemeint.
MFG
Komoluna
MFG
Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
-
- Beiträge: 129
- Registriert: Sa 25. Mai 2013, 07:43
- OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
- CPU-Target: 32Bit
Re: Chart für Druck
Kann man den Chart als Grafik (png oder jpg) speichern?
Das wäre für mich eine gute Lösung, dann könnte ich die Grafik in ein PDF einbinden.
Ich möchte jedenfalls das PDF aus der Anwendung heraus erstellen.
Das wäre für mich eine gute Lösung, dann könnte ich die Grafik in ein PDF einbinden.
Ich möchte jedenfalls das PDF aus der Anwendung heraus erstellen.
Vbxler
-------------------------
-------------------------
Re: Chart für Druck
Das geht problemlos:Vbxler hat geschrieben:Kann man den Chart als Grafik (png oder jpg) speichern?
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Image1.Picture.Bitmap.Width := ClientWidth;
Image1.Picture.Bitmap.Height := ClientHeight;
Chart1.PaintOnCanvas(Image1.Picture.Bitmap.Canvas, ClientRect);
Image1.Picture.SaveToFile('Chart.jpg');
end;
- Dateianhänge
-
TestTAChartToJPG.zip
- (3.31 KiB) 111-mal heruntergeladen
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 129
- Registriert: Sa 25. Mai 2013, 07:43
- OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1)
- CPU-Target: 32Bit
Re: Chart für Druck
Danke für die Hilfe,
das werde ich gleich mal testen.
das werde ich gleich mal testen.
Vbxler
-------------------------
-------------------------
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Chart für Druck
https://github.com/cutec-chris/promet-b ... cframe.pas
Zeile 940-964 erzeugt selbständig ein Pdf und bettet das Jpeg darin ein
Zeile 940-964 erzeugt selbständig ein Pdf und bettet das Jpeg darin ein
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 353
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Chart für Druck
Guten Abend,
ich klinke mich mal hier ein, denn ich bin auch dabei mein Chart als Bild (jpg) zu speichern. Ich habe den Quelltext aus dem Beispiel hier sowie auch aus dem Beispielprojekt verwendet, aber das Chart wird nicht vollständig gespeichert.
Die Achsen an den Rändern sowie die Achsenbeschriftung fehlen.
Also:
oder auch
speichern kein vollständiges chart. Siehe Bilder.
Die Statusleiste sowie der Fenstertitel gehören natürlich nicht zum Chart sondern zur Form. Die brauchen nicht auf dem Bild zu erscheinen.
Danke
ich klinke mich mal hier ein, denn ich bin auch dabei mein Chart als Bild (jpg) zu speichern. Ich habe den Quelltext aus dem Beispiel hier sowie auch aus dem Beispielprojekt verwendet, aber das Chart wird nicht vollständig gespeichert.
Die Achsen an den Rändern sowie die Achsenbeschriftung fehlen.
Also:
Code: Alles auswählen
procedure TFrm_GUI.ToolBtnSpeichClick(Sender: TObject);
begin
Frm_WZ.Image1.Picture.Bitmap.Width := Frm_WZ.Chart1.ChartWidth;
Frm_WZ.Image1.Picture.Bitmap.Height := Frm_WZ.Chart1.ChartHeight;
Frm_WZ.Chart1.PaintOnCanvas(Frm_WZ.Image1.Picture.Bitmap.Canvas, ClientRect);
Frm_WZ.Image1.Picture.SaveToFile(GetFileName('jpg'));
end;
Code: Alles auswählen
procedure TFrm_GUI.ToolBtnSpeichClick(Sender: TObject);
begin
Frm_WZ.Chart1.SaveToFile(TJPEGImage, GetFileName('jpg'));
end;
Die Statusleiste sowie der Fenstertitel gehören natürlich nicht zum Chart sondern zur Form. Die brauchen nicht auf dem Bild zu erscheinen.
Danke
Re: Chart für Druck
Du machst das Bitmap zu klein. Hattest du vor kurzem dich nicht nach dem Unterschied zwischen Chart.ChartWidth und Chart.ChartHeight auf der einen Seite und Chart.Width und Chart.Height auf der anderen Seite erkundigt? Hier siehst du es: .ChartWidth und .ChartHeight entsprechen dem von dem Achsen eingeschlossenen Rechteck, .Width und .Height entsprechen der gesamten Größe des Chart. Nimm für die Bitmap-Größe Chart.Width und .Height (also ohne des zweite "Chart" im Namen), oder das ClientRect des Fensters (wenn der Chart client-aligned ist), dann geht's.
Den zweiten Punkt mit dem direkten SaveToFile kann ich nicht nachvollziehen. Hier müsstest du ein Demo-Projekt hochladen.
Den zweiten Punkt mit dem direkten SaveToFile kann ich nicht nachvollziehen. Hier müsstest du ein Demo-Projekt hochladen.
-
- Beiträge: 353
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Chart für Druck
Ich hatte auch schon Breite und Höhe der Form verwendet. Die Bildgröße scheint zu passen. Es wird außen herum schwarzer Rand (wo eigentlich Achse mit Titel sein sollte) dargestellt.
Ich probiere weiter.
Ich probiere weiter.
-
- Beiträge: 353
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Chart für Druck
So Sieht's aus, wenn ich Chart.Width bzw. Chart.Height verwende.
Es hat mit der Hintergrundfarbe der Diagrammfarbe zu tun. Ich hatte beides auf weiß gestellt.
Wenn ich clScrollbar nehme sieht's aus wie Bild4.jpg im Anhang. Jetzt ist rechts zu viel schwarz.
Nehme ich den Befehl Frm_WZ.Chart1.SaveToFile(TJPEGImage, GetFileName('jpg')); ist es so wie's sein soll (Bild5.jpg).
Man darf die Diagrammfarbe nicht auf clwhite stellen und sollte den Einzeiler mit SaveToFile verwenden.
Es hat mit der Hintergrundfarbe der Diagrammfarbe zu tun. Ich hatte beides auf weiß gestellt.
Wenn ich clScrollbar nehme sieht's aus wie Bild4.jpg im Anhang. Jetzt ist rechts zu viel schwarz.
Nehme ich den Befehl Frm_WZ.Chart1.SaveToFile(TJPEGImage, GetFileName('jpg')); ist es so wie's sein soll (Bild5.jpg).
Man darf die Diagrammfarbe nicht auf clwhite stellen und sollte den Einzeiler mit SaveToFile verwenden.
Re: Chart für Druck
Nein, es liegt an dem schwarzen Loch, das gestern entdeckt wurde.ErnstVolker hat geschrieben:Es hat mit der Hintergrundfarbe der Diagrammfarbe zu tun. Ich hatte beides auf weiß gestellt.
[...]
Man darf die Diagrammfarbe nicht auf clwhite stellen und sollte den Einzeiler mit SaveToFile verwenden.
Im Ernst: es hat natürlich nichts mit den Farben zu tun, sondern man muss es nur richtig machen:
Code: Alles auswählen
Image1.Picture.Bitmap.Width := Chart1.Width;
Image1.Picture.Bitmap.Height := Chart1.Height;
Chart1.PaintOnCanvas(Image1.Picture.Bitmap.Canvas, Rect(0, 0, Chart1.Width, Chart1.Height));
Image1.Picture.SaveToFile('test-img.jpg');
-
- Beiträge: 353
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Chart für Druck
Ich gebe Dir Recht. Nachdem ich JETZT wieder (das hatte ich heute Morgen noch nicht gemacht weil ich auf die Arbeit musste) auf clWhite zurückgestellt habe funktioniert das auch bei mir.
Ich halte mich zwar schon für doof aber ich hätte es nicht geschrieben, wenn es nicht so gewesen wäre. Nachdem ich im Objektinspector Color und BackColor auf ein grau geändert hatte
wurde das Diagramm ordentlich gespeichert. Also dachte ich dass die Farbe was damit zu tun hat. Hhm...
Allerdings habe ich jetzt zwei Zusatzprobleme:
1. Mit dem DistanceTool erzeugte Linien werden nicht mitgespeichert. Die von vorneherein vorhandenen TConstantLine-Linien schon. Die Vermaßungen würde ich gerne mit auf's Bild bringen.
2. Ich hatte hier ja das Beispiel bekommen wo eine PaintBox am unteren Rand des Diagrammes mitwanderte. Ich habe die Paintbox durch ein TextEdit ersetzt, weil das auf dem Chart zu sehen ist, die Paintbox nicht.
Wenn ich jetzt alles auf dem Bild haben möchte müsste ich vermutlich das komplette Fenster speichern. Also mit Frm.width und Frm.height.
Hierfür muß vermutlich die Zeile geändert werden. Aber Frm hat kein PaintOnCanvas.
Wie macht man das?
Danke
Ich halte mich zwar schon für doof aber ich hätte es nicht geschrieben, wenn es nicht so gewesen wäre. Nachdem ich im Objektinspector Color und BackColor auf ein grau geändert hatte
wurde das Diagramm ordentlich gespeichert. Also dachte ich dass die Farbe was damit zu tun hat. Hhm...
Allerdings habe ich jetzt zwei Zusatzprobleme:
1. Mit dem DistanceTool erzeugte Linien werden nicht mitgespeichert. Die von vorneherein vorhandenen TConstantLine-Linien schon. Die Vermaßungen würde ich gerne mit auf's Bild bringen.
2. Ich hatte hier ja das Beispiel bekommen wo eine PaintBox am unteren Rand des Diagrammes mitwanderte. Ich habe die Paintbox durch ein TextEdit ersetzt, weil das auf dem Chart zu sehen ist, die Paintbox nicht.
Wenn ich jetzt alles auf dem Bild haben möchte müsste ich vermutlich das komplette Fenster speichern. Also mit Frm.width und Frm.height.
Hierfür muß vermutlich die Zeile
Code: Alles auswählen
Chart1.PaintOnCanvas(Image1.Picture.Bitmap.Canvas, Rect(0, 0, Chart1.Width, Chart1.Height));
Wie macht man das?
Danke
Re: Chart für Druck
Stimmt, das muss ich mir bei Gelegenheit ansehen.ErnstVolker hat geschrieben:1. Mit dem DistanceTool erzeugte Linien werden nicht mitgespeichert. Die von vorneherein vorhandenen TConstantLine-Linien schon. Die Vermaßungen würde ich gerne mit auf's Bild bringen.
Aber TForm hat ein PaintTo:ErnstVolker hat geschrieben:2. Ich hatte hier ja das Beispiel bekommen wo eine PaintBox am unteren Rand des Diagrammes mitwanderte. Ich habe die Paintbox durch ein TextEdit ersetzt, weil das auf dem Chart zu sehen ist, die Paintbox nicht.
Wenn ich jetzt alles auf dem Bild haben möchte müsste ich vermutlich das komplette Fenster speichern. Also mit Frm.width und Frm.height.
Hierfür muß vermutlich die Zeilegeändert werden. Aber Frm hat kein PaintOnCanvas.Code: Alles auswählen
Chart1.PaintOnCanvas(Image1.Picture.Bitmap.Canvas, Rect(0, 0, Chart1.Width, Chart1.Height));
Code: Alles auswählen
procedure PaintTo(ACanvas: TCanvas; X, Y: Integer);