![]() |
AW: TChart Achsenkreuz hervorheben;
Zitat:
|
AW: TChart Achsenkreuz hervorheben;
:wall:So schwer ist das doch nicht:
Sei pnChartContainer das Panel, in dem sich der Chart befindet. Das TChart ist mit Alignment=alNone eingestellt, das Panel jedoch mit alClient. So, im OnResize des Panels nun noch:
Delphi-Quellcode:
Unjetestet.
Begin
chart.Width := Min (pnChartContainer.Width, pnChartContainer.Height); chart.Height := chart.Width; End; |
AW: TChart Achsenkreuz hervorheben;
Entschuldigung Linkat habe erst eben deine private
Mail gesehen. Ich werde mir wenn es recht ist morgen das Problem verinnerlichen |
AW: TChart Achsenkreuz hervorheben;
Delphi-Quellcode:
;
Chart1.BottomAxis.Axis.Width := 10;
Sowas ? Und was einst du mit 1:1 |
AW: TChart Achsenkreuz hervorheben;
@Linkat:
Probier's mal damit:
Delphi-Quellcode:
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)
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; Grüße, Uli |
AW: TChart Achsenkreuz hervorheben;
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Alzaimar,Martin und Uli,
vielen Dank für die Hilfe. Wie bereits erwähnt habe ich zur Zeit Urlaub und habe zu Hause kein Windows-PC. Ich arbeite zuhause nur noch mit Linux und programmiere mit Lazarus/FPC. Was übrigens hervorragend funktioniert. Ich habe also ein kleines Programm in Lazarus nachgebildet. Der Hinweis, in dem onResize-Ereignis Höhe und Breite gleichzusetzen, ist sehr gut. Der Einheitskreis ist hinreichend rund. Hier die Form samt Einheitskreis: s. Anhang Hier das Programm:
Delphi-Quellcode:
Es sei noch erwähnt, dass hier die Chart-Komponente in einem Panel eingebettet ist, was natürlich nicht unbedingt sein muss.
unit charttestu;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ExtCtrls, TAGraph, TASeries, Math; type { TForm1 } TForm1 = class(TForm) BitBtn1: TBitBtn; btStart: TButton; Chart1: TChart; Chart1LineSeries1: TLineSeries; Panel1: TPanel; procedure btStartClick(Sender: TObject); procedure FormResize(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation { TForm1 } procedure TForm1.FormResize(Sender: TObject); begin Panel1.Height:=Form1.Height-40; Panel1.Width:=Panel1.Height; end; procedure TForm1.btStartClick(Sender: TObject); var i :integer; x,y :double; begin i:=0; Chart1LineSeries1.Clear; while i<360 do begin x:=cos(pi*i/180); y:=sin(pi*i/180); Chart1LineSeries1.AddXY(x,y); inc(i,15); end; end; initialization {$I charttestu.lrs} end. Soweit bin ich zufrieden. Jetzt fehlt nur noch das hervorgehobene Achsenkreuz durch den Ursprung. Wer hat noch einen Tipp? Gruß, Linkat |
AW: TChart Achsenkreuz hervorheben;
Zitat:
Delphi-Quellcode:
Es gibt ansonsten noch die Möglichkeit, direkt auf den Canvas des Charts zu zeichnen:
// 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;
Delphi-Quellcode:
Könntest Dir also die Achsenkreuze zur Not selbst zeichnen (Position müßt Du halt dann auch dem ChartRect heraus bestimmen)
procedure TForm1.Chart1AfterDraw(Sender: TObject);
begin Chart1.Canvas.Pen.Color := clRed; Chart1.Canvas.MoveTo(100,100); Chart1.Canvas.LineTo(300,100); end; Grüße, Uli |
AW: TChart Achsenkreuz hervorheben;
Hallo Uli,
vielen Dank für deine Anregungen. Die Methoden aus #17 Zitat:
mit deinem Beispiel-Code Zitat:
Ich habe gehofft, dass eine eingebaute Methode von Chart existiert, mit der man das Achsenkreuz hervorheben kann. Ich werde nach meinem Urlaub noch ein bischen mit Delphi experimentieren. Vielleicht setze ich einen 'dezenten' Kreis um den Ursprung. Mal sehen. So nun wünsche ich allen (aktiven und passiven) Delphi-Praxis-Nutzern eine schöne Slvester-Party und ein gutes neues Jahr. Gruß, Linkat |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz