Chart für Druck

Rund um die LCL und andere Komponenten

Chart für Druck

Beitragvon Vbxler » 31. Aug 2015, 19:46 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.
Vbxler
-------------------------
Vbxler
 
Beiträge: 102
Registriert: 25. Mai 2013, 06:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1) | 
CPU-Target: 32Bit
Nach oben

Beitragvon wp_xyz » 31. Aug 2015, 19:56 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 31. Aug 2015, 21:52, insgesamt 1-mal geändert.
wp_xyz
 
Beiträge: 2907
Registriert: 8. Apr 2011, 08:01

Beitragvon Komoluna » 31. Aug 2015, 21:40 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
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.
Komoluna
 
Beiträge: 565
Registriert: 26. Aug 2012, 08:03
OS, Lazarus, FPC: Windows(7, 10), Linux(Ubuntu, Kali) | 
CPU-Target: 64Bit
Nach oben

Beitragvon Vbxler » 1. Sep 2015, 07:13 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.
Vbxler
-------------------------
Vbxler
 
Beiträge: 102
Registriert: 25. Mai 2013, 06:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Michl » 1. Sep 2015, 08:12 Re: Chart für Druck

Vbxler hat geschrieben:Kann man den Chart als Grafik (png oder jpg) speichern?
Das geht problemlos:
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;   

TestProjekt anbei
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Code: Alles auswählen
type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 
Michl
 
Beiträge: 2320
Registriert: 19. Jun 2012, 11:54
OS, Lazarus, FPC: Win7 Laz 1.7 Trunk FPC 3.1.1 Trunk | 
CPU-Target: 32Bit/64bit
Nach oben

Beitragvon Vbxler » 1. Sep 2015, 09:48 Re: Chart für Druck

Danke für die Hilfe,

das werde ich gleich mal testen.
Vbxler
-------------------------
Vbxler
 
Beiträge: 102
Registriert: 25. Mai 2013, 06:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1) | 
CPU-Target: 32Bit
Nach oben

Beitragvon Christian » 1. Sep 2015, 17:08 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
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Christian
 
Beiträge: 6102
Registriert: 21. Sep 2006, 06:51
Wohnort: Dessau
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z) | 
CPU-Target: AVR,ARM,x86(-64)
Nach oben

Beitragvon Vbxler » 1. Sep 2015, 18:43 Re: Chart für Druck

Super,

danke für den Link!
Vbxler
-------------------------
Vbxler
 
Beiträge: 102
Registriert: 25. Mai 2013, 06:43
OS, Lazarus, FPC: Win7_x64 (FPC:4.7.1) | 
CPU-Target: 32Bit
Nach oben

Beitragvon ErnstVolker » 10. Apr 2019, 21:50 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:

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;


oder auch

Code: Alles auswählen
procedure TFrm_GUI.ToolBtnSpeichClick(Sender: TObject);
begin
   Frm_WZ.Chart1.SaveToFile(TJPEGImage, GetFileName('jpg'));
end;


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
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
ErnstVolker
 
Beiträge: 212
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 10. Apr 2019, 21:57 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.
wp_xyz
 
Beiträge: 2907
Registriert: 8. Apr 2011, 08:01

Beitragvon ErnstVolker » 11. Apr 2019, 05:49 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.
ErnstVolker
 
Beiträge: 212
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon ErnstVolker » 11. Apr 2019, 06:15 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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
ErnstVolker
 
Beiträge: 212
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 11. Apr 2019, 10:18 Re: Chart für Druck

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.

Nein, es liegt an dem schwarzen Loch, das gestern entdeckt wurde.

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')
wp_xyz
 
Beiträge: 2907
Registriert: 8. Apr 2011, 08:01

Beitragvon ErnstVolker » 11. Apr 2019, 19:29 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
Code: Alles auswählen
Chart1.PaintOnCanvas(Image1.Picture.Bitmap.Canvas, Rect(0, 0, Chart1.Width, Chart1.Height));
geändert werden. Aber Frm hat kein PaintOnCanvas.
Wie macht man das?

Danke
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
ErnstVolker
 
Beiträge: 212
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

Beitragvon wp_xyz » 11. Apr 2019, 22:10 Re: Chart für Druck

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.

Stimmt, das muss ich mir bei Gelegenheit ansehen.

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 Zeile
Code: Alles auswählen
Chart1.PaintOnCanvas(Image1.Picture.Bitmap.Canvas, Rect(0, 0, Chart1.Width, Chart1.Height));
geändert werden. Aber Frm hat kein PaintOnCanvas.

Aber TForm hat ein PaintTo:
Code: Alles auswählen
    procedure PaintTo(ACanvas: TCanvas; X, Y: Integer); 
wp_xyz
 
Beiträge: 2907
Registriert: 8. Apr 2011, 08:01

» Weitere Beiträge siehe nächste Seite »
Nächste

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 3 Gäste

porpoises-institution
accuracy-worried