ich verwende TAChart zur Darstellung von Vektorberechnungen.
Die Darstellung der Pfeile usw. erfolgt mit Hilfe von AfterCustomDrawBackWall. Alles wird am Bildschirm einwandfrei dargestellt, jedoch beim Versuch die Grafik auszudrucken oder als SVG zu exportieren erhalte ich jedoch nur einen "leeren Chart"
Hier ist mein Beispielsprojekt.
Code: Alles auswählen
procedure TForm1.Chart1AfterCustomDrawBackWall(ASender: TChart;
ADrawer: IChartDrawer; const ARect: TRect);
var
Xmin,Xmax,Ymin,Ymax : integer;
Lx, Ly : integer;
begin
// Nur als Beispielscode:
ADrawer.Pen.Width := 2; {-> Ergibt eine Fehlermeldung}
// Zuweisen von bereit von Chartwerten auf Pixel umgerechneten Werte:
Xmin := 50;
Ymin := 50;
Xmax := 250;
Ymax := 150;
Lx := (Xmax - Xmin) div 2;
Ly := (Ymax - Ymin) div 2;
ADrawer.Rectangle(Xmin,Ymin,Xmax,Ymax);
ADrawer.Ellipse(Xmin,Ymin,Xmax,Ymax);
ADrawer.Line(Xmin + Lx,Ymin,Xmin + Lx,Ymax);
ADrawer.Line(Xmin,Ymin + Ly,Xmax ,Ymin + Ly);
end;
procedure TForm1.ButtonSVGClick(Sender: TObject);
begin
Chart1.SaveToSVGFile(GetFilename('svg'));
end;
procedure TForm1.ButtonPrintClick(Sender: TObject);
const
MARGIN = 10;
var
r: TRect;
d: Integer;
begin
if not PrintDialog1.Execute then exit;
Printer.BeginDoc;
try
r := Rect(0, 0, Printer.PageWidth, Printer.PageHeight div 2);
d := r.Right - r.Left;
r.Left += d div MARGIN;
r.Right -= d div MARGIN;
d := r.Bottom - r.Top;
r.Top += d div MARGIN;
r.Bottom -= d div MARGIN;
Chart1.Draw(TPrinterDrawer.Create(Printer,False), r);
finally
Printer.EndDoc;
end;
end;
function TForm1.GetFileName(const AExt: String): String;
begin
with SaveDialog1 do begin
FileName := '';
DefaultExt := AExt;
if not Execute then Abort;
Result := FileName;
end;
end;
Gibt es eine Möglichkeit diese Grafiken zu exportieren oder zu drucken? Wie müsste der Code dafür aussehen? Ich vermute, es ist spezieller IChartDrawer notwendig, habe aber keine Ahnung, wie dieser zu implementieren ist.
Zudem möchte ich gerne auch die Strichweite des Pens verändern, erhalte jedoch bei der Zuweisung nur eine Fehlermeldung "No member is provided to access property".
Code: Alles auswählen
ADrawer.Pen.Width := 2; {-> Ergibt eine Fehlermeldung}