Ich habe mir das Demo von TAChart genommen, wo mit Lazreport gedruckt wird. Dabei ist mir aufgefallen, das die Erkennung was gedruckt werden soll nicht korrekt ist, weil es wird der Inhalt der Überschrift genommen und nicht auf das korrekte Objekt. Das habe ich einmal im angehängten Beispiel korrigiert. Könnte man auch für das Demo übernehmen.
Weiters habe ich versucht auch die Legende zu drucken, nur arbeitet die Druckroutine die ich gefunden habe, komplett anders als die der Chart selbst. Es kommt mir vor, als wenn das übergebene Rechteck in das gezeichet werden soll, nicht passt.
Vielleicht einen Tip dazu.
Das schwarze Feld rechts hat ganz rechts, ganz winzig die Legende. Obwohl 1675*2400 übergeben werden, also so groß die Bitmap ist.
TAChart Lazreport - Legende mitdrucken
- af0815
- Lazarusforum e. V.
- Beiträge: 7119
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
TAChart Lazreport - Legende mitdrucken
- Dateianhänge
-
lazreportdemo.zip- (5.04 KiB) 185-mal heruntergeladen
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- af0815
- Lazarusforum e. V.
- Beiträge: 7119
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart Lazreport - Legende mitdrucken
Es sieht schon besser aus, wenn man nicht skaliert
Der schwarze Bereich ist nicht schön. Es wird also nicht die ganze Legende gezeichnt, sondern nur die einzelne Legende, bzw. wird der Hintergrund nicht mitgezeichnet, weil beim Chart sieht man ja auch, das ein Hintergrund vorhanden ist (grau). Das Legendenpanel selbst kann man nicht direkt drucken. Zumindest habe ich keine funktion dafür gefunden.
Code: Alles auswählen
if (View is TfrPictureView) and (TfrPictureView(View).Name = 'PicLegend') then begin
pv := TfrPictureView(View);
bmp := TBitmap.Create;
try
bmp.Width := Round(pv.Width);
bmp.Height := Round(pv.Height);
r.Top:= 0;
r.Left:= 0;
r.Right:= round(pv.Width);
r.Bottom:= round(pv.Height);
Chart1.DrawLegendOn(bmp.Canvas,r);
pv.Picture.Bitmap.Assign(bmp);
finally
bmp.Free;
end;
end;
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: TAChart Lazreport - Legende mitdrucken
Wenn du ein TBitmap erzeugst ist der Hintergrund defaultmäßig schwarz (anders als in Delphi). Also: übermale das Legenden-Bitmap per Canvas.FillRect mit der gewünschten Hintergrundfarbe, und der schwarze Hintergrund ist weg.
Generell scheint mir das Legend-Panel noch nicht komplett in die Drawer-Infrastruktur integriert zu sein. Daher würde ich für eine Legende in einem Report überhaupt kein LegendPanel verwenden, sondern einfach die im TChart eingebaute Legende anzeigen lassen (Chart.Legend.Visible := true). Insbesondere warum beim Legend-Panel der Vergrößerungsfaktor weg muss, erschließt sich mir nicht.
Generell scheint mir das Legend-Panel noch nicht komplett in die Drawer-Infrastruktur integriert zu sein. Daher würde ich für eine Legende in einem Report überhaupt kein LegendPanel verwenden, sondern einfach die im TChart eingebaute Legende anzeigen lassen (Chart.Legend.Visible := true). Insbesondere warum beim Legend-Panel der Vergrößerungsfaktor weg muss, erschließt sich mir nicht.
- af0815
- Lazarusforum e. V.
- Beiträge: 7119
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart Lazreport - Legende mitdrucken
Ok, das erklingt logisch. Schau ich mir an.wp_xyz hat geschrieben: Mi 28. Jan 2026, 14:56 Wenn du ein TBitmap erzeugst ist der Hintergrund defaultmäßig schwarz (anders als in Delphi). Also: übermale das Legenden-Bitmap per Canvas.FillRect mit der gewünschten Hintergrundfarbe, und der schwarze Hintergrund ist weg.
Bingo - nur verwende ich das für den Report ? Da muss ich eine externe Bitmap erzeugen. Das Legend Panel erzeugt in Prepare (von der Legende) leider seinen eigenen Drawer. Leider kann man den nicht direkt bestimmen. So geshen ist das schon in den Drawer eingebunden, nur unflexibel.wp_xyz hat geschrieben: Mi 28. Jan 2026, 14:56 Generell scheint mir das Legend-Panel noch nicht komplett in die Drawer-Infrastruktur integriert zu sein. Daher würde ich für eine Legende in einem Report überhaupt kein LegendPanel verwenden, sondern einfach die im TChart eingebaute Legende anzeigen lassen (Chart.Legend.Visible := true).
Mal sehen ob man da was aufbohren muss, damit es kompatibel zum Chart wird.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
- af0815
- Lazarusforum e. V.
- Beiträge: 7119
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: TAChart Lazreport - Legende mitdrucken
Stimmt und passt, wird aber durch die folgende Lösung eigentlich wieder obsolete.
Stimmt, geht auch für den Report zur Laufzeit. Ich habe immer die Legende extra gemacht - Macht der Gewohnheit - das man das gleich mit dem Chart miterledigen kann, war ausserhalb des Fokus.
Danke für die Ideen und die richtigen Schubser.
Mein aktueller Kampf ist, ich habe Memoryleaks, aufgezeigt durch HeapTrace in lr_class, aber nur wenn ich den Laz_Report verwende und der sitzt in einem DatenModul (Zur Laufzeit erzeugt). Mal sehen was ich da finde.
Schaut fürs erste einmal ganz passabel aus.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).