Chart für Druck

Rund um die LCL und andere Komponenten

Re: Chart für Druck

Beitragvon ErnstVolker » 12. Apr 2019, 17:46 Re: Chart für Druck

Wenn ich die Form speichere

Code: Alles auswählen
  Frm_WZ.Image1.Picture.Jpeg.Width  := Frm_WZ.Width;
  Frm_WZ.Image1.Picture.Jpeg.Height := Frm_WZ.Height;
  Frm_WZ.PaintTo(Frm_WZ.Image1.Picture.Jpeg.Canvas,-10,-10);
  Frm_WZ.Image1.Picture.SaveToFile(BekommeDateiname('jpg'));


dann sind auch die mit dem DistanceToll erzeugten Linien bei. Nur die TextEdit an den Linienenden der hellgrünen Constant-Linien fehlen.

Muß ich anstelle von TextEdit doch eine PaintBox nehmen?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
ErnstVolker
 
Beiträge: 211
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 » 12. Apr 2019, 18:07 Re: Chart für Druck

TextEdit? Meinst du TEdit? Sollte aber egal sein, Form.PaintTo gibt ja den gesamten Formularinhalt aus, nicht nur den Chart. Könnte es sein, dass das Feld ausgeblendet wird, wenn die Maustaste nach dem Verschieben losgelassen wird?
wp_xyz
 
Beiträge: 2862
Registriert: 8. Apr 2011, 08:01

Beitragvon ErnstVolker » 12. Apr 2019, 20:38 Re: Chart für Druck

Entschuldigung. Ich meine natürlich TEdit.

Ausgeblendet werden die TEdit nur zusammen mit den Linien, wenn in einer TChartListBox das Häkchen rausgenommen wird. Nach dem Verschieben bleiben die TEdit stehen. Der Betrachter des Diagramms soll ja gerade durch die somit hervorgehobene Position (Weg oder Zeit) der Linie die Info bekommen wo sie steht. Es sind sozusagen Hilfslinien für Konstruktionen.
ErnstVolker
 
Beiträge: 211
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 » 12. Apr 2019, 21:37 Re: Chart für Druck

In einem Bild weiter oben befinden sich die Edits ziemlich weit innerhalb. Schiebe sie mal heraus, dass sie nicht mehr mit dem Chart überlappen. Evt werden die Controls beim Schreiben auf dem Bitmap-Canvas in anderer Reihenfolge gezeichnet, so dass der Chart die Edits übermalt. Wenn das so ist und die Edits unbedingt innerhalb der Chartfläche liegen müssen, dann bleibt wahrscheinlich nichts anderes übrig, als nach dem Loslassen der Maus die Edits unsichtbar zu schalten und die Werte im OnAfterDraw-Event and dieselbe Position direkt auf den Chart zu malen.
wp_xyz
 
Beiträge: 2862
Registriert: 8. Apr 2011, 08:01

Beitragvon ErnstVolker » 13. Apr 2019, 08:09 Re: Chart für Druck

Ja dem ist so. Ich habe das Chart mal etwas kleiner gemacht, sodass ein TEdit auf der Form, nicht auf dem Chart zum liegen kommt, da wird das TEdit gespeichert. Auch ein TEdit auf der Statusbar wird zwar zur Laufzeit angezeigt, aber nicht gespeichert.

Eine Paintbox auf dem Chart bekomme ich schon zur Laufzeit (auch wenn ich "Visible:=True", "Enabled:=True", "BringToFront" etc. verwende) bzw. beim Design im Objecinspector nicht zu sehen.
Auf der Form hingegen ist die Paintbox sichtbar.

Zur Not verzichte ich auf die Speichern Routine und mach es mit Bildschirmkopien.
ErnstVolker
 
Beiträge: 211
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 » 13. Apr 2019, 10:05 Re: Chart für Druck

Die aktuelle Version von TAChart in Laz-trunk zeigt auch beim SaveToFile die Ausgabe der ChartTools an. Wird allerdings nochmals überarbeitet. Das TEdit, das nicht zum Chart gehört, wird natürlich nicht ins gespeicherte Bild übernommen.

Der folgende Event-Handler für TChart.OnAfterDraw zeichnet an der Position der ConstantLine den entsprechenden Text direkt in den Chart, also ohne TPaintbox oder TEdit, so dass dieser auch im gespeicherten Bild erscheint.
Code: Alles auswählen
procedure TForm1.Chart1AfterDraw(ASender: TChart; ADrawer: IChartDrawer);
const
  LabelAtTop = false;
var
  R: TRect;
  s: String;
  P: TPoint;
begin
  ADrawer.Font := Chart1.BottomAxis.Marks.LabelFont;
  s := Format('%.3f', [Chart1ConstantLine1.Position]);
  R.TopLeft := Point(0, 0);
  R.BottomRight := ADrawer.TextExtent(s);
  InflateRect(R, 2, 2);
  P.X := Chart1.XGraphToImage(Chart1ConstantLine1.Position);
  if LabelAtTop then
    P.Y := Chart1.ClipRect.Top
  else
    P.Y := Chart1.ClipRect.Bottom;
  OffsetRect(R, P.X - (R.Right - R.Left) div 2, P.Y - (R.Bottom - R.Top) div 2);
 
  if R.Left < Chart1.ClipRect.Left then begin
    R.Right := Chart1.ClipRect.Left + (R.Right - R.Left);
    R.Left := Chart1.ClipRect.Left;
  end;
  if R.Right > Chart1.ClipRect.Right then begin
    R.Left := Chart1.ClipRect.Right - (R.Right - R.Left);
    R.Right := Chart1.ClipRect.Right;
  end;
  if R.Top < 0 then begin
    R.Bottom := R.Bottom - R.Top;
    R.Top := 0;
  end;
  ADrawer.SetBrushParams(bsSolid, clYellow);
  ADrawer.SetPenParams(psSolid, clGray);
  ADrawer.Rectangle(R);
  OffsetRect(R, 2, 2);
  ADrawer.TextOut.Pos(R.TopLeft).Alignment(taCenter).Text(s).Done;
end
wp_xyz
 
Beiträge: 2862
Registriert: 8. Apr 2011, 08:01

Beitragvon ErnstVolker » 14. Apr 2019, 19:14 Re: Chart für Druck

Vielen vielen Dank für die Hilfe.

Mal eine Frage am Rande zum Thema Speichern. Gibt wahrscheinlich ein neues Thema.

Kann man den Inhalt eines Chart abspeichern, sodass man es wieder laden kann? Sozusagen wie eine Zeichnung oder ein Dokument an dem man nach erneutem Laden weiterarbeitet.
ErnstVolker
 
Beiträge: 211
Registriert: 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z) | 
CPU-Target: xxBit
Nach oben

• Themenende •
Vorherige

Zurück zu Komponenten und Packages



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste

porpoises-institution
accuracy-worried