TAChart Lazreport - Legende mitdrucken

Rund um die LCL und andere Komponenten
Antworten
Benutzeravatar
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

Beitrag von af0815 »

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.
2026-01-28_Lazreportdemo.png
2026-01-28_Lazreportdemo.png (22.55 KiB) 278 mal betrachtet
Das schwarze Feld rechts hat ganz rechts, ganz winzig die Legende. Obwohl 1675*2400 übergeben werden, also so groß die Bitmap ist.
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).

Benutzeravatar
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

Beitrag von af0815 »

Es sieht schon besser aus, wenn man nicht skaliert

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;
2026-01-28_Lazreportdemo2.png
2026-01-28_Lazreportdemo2.png (19.62 KiB) 261 mal betrachtet
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.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

wp_xyz
Beiträge: 5367
Registriert: Fr 8. Apr 2011, 09:01

Re: TAChart Lazreport - Legende mitdrucken

Beitrag von wp_xyz »

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.

Benutzeravatar
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

Beitrag von af0815 »

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.
Ok, das erklingt logisch. Schau ich mir an.
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).
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.

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).

Benutzeravatar
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

Beitrag von af0815 »

af0815 hat geschrieben: Mi 28. Jan 2026, 18:19
wp_xyz hat geschrieben: Mi 28. Jan 2026, 14:56 ... Canvas.FillRect mit der gewünschten Hintergrundfarbe, und der schwarze Hintergrund ist weg.
Ok, das erklingt logisch. Schau ich mir an.
Stimmt und passt, wird aber durch die folgende Lösung eigentlich wieder obsolete.
af0815 hat geschrieben: Mi 28. Jan 2026, 18:19
wp_xyz hat geschrieben: Mi 28. Jan 2026, 14:56 sondern einfach die im TChart eingebaute Legende anzeigen lassen (Chart.Legend.Visible := true).
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.
2026-01-29GlucoReader.png
2026-01-29GlucoReader.png (98.19 KiB) 173 mal betrachtet
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten