@Linkat:
Probier's mal damit:
Delphi-Quellcode:
procedure TForm1.Chart1Resize(Sender: TObject);
var
nMinSize: integer;
begin
// Chart neu positionieren, dabei Verhältnis fix lassen!
nMinSize := Min(Chart1.Height, chart1.Width);
Chart1.ChartRect := Rect( 50, 50, nMinSize - 50 , nMinSize- 50 );
// Legende per Hand positionieren
Chart1.Legend.Left := chart1.ChartWidth + 75;
Chart1.Legend.Top := chart1.ChartRect.Top;
Chart1.Legend.Height := chart1.ChartHeight;
// Titel neu positionieren
Chart1.Title.Left := nMinSize div 2;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i: Integer;
begin
// Daten setzen
Series1.Clear;
for i := 1 to 100 do
Series1.AddXY(Random(1200) - 600, Random(1200) - 600);
// hier geht ich nun davon aus, daß die beiden Achen fixierte Wertebereiche von -600 bis 600 haben!
// Eigene Chartpositionierung
Chart1.CustomChartRect := True; // damit wird das automatische anpassen unterbunden!
Chart1.ChartRect := Rect( 50, 50, 300, 300 );
// Titel per Hand positioneren
Chart1.Title.Caption := 'Streubesitz';
Chart1.Title.Top := 20;
// Achsen zentrieren im Ursprung (Min/Max Werte von -600 bis 600)
Chart1.LeftAxis.PositionUnits := muPercent;
Chart1.LeftAxis.PositionPercent := 50;
Chart1.BottomAxis.PositionUnits := muPercent;
Chart1.BottomAxis.PositionPercent := 50;
// Legende
Chart1.Legend.Left := chart1.ChartWidth + 75;
Chart1.Legend.Top := chart1.ChartRect.Top;
Chart1.Legend.Height := chart1.ChartHeight;
end;
Jede Größenänderung des Formulars paßt nun den Chart so an, daß das Größenverhältnis gewahrt bleibt (vor dem ersten Resize ist Legende noch falsch positioniert, hab das nur grad nicht korrigiert --> selbst schauen). Zudem sind die Achsen im Koordinatenursprung angesiedelt (können wie schon beschreiben in der Strichstärke angepaßt werden)
Grüße,
Uli