Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   C++ Zoom bei TChart (https://www.delphipraxis.net/88333-zoom-bei-tchart.html)

scma0158 14. Mär 2007 08:44


Zoom bei TChart
 
Hi ihr,

habe Probleme beim Zoom mit TChart. Normalerweise werden beide achsen größtmöglich skaliert. daher stimmt allerdings der maßstab d.h. das verhältnis der werte nicht. wie kann ich erreichen, dass beide achsen gleichmäßig skaliert werden und dabei eine achse die größtmögliche skalierung hat. die andere achse muss dabei die skalierung von der anderen bekommen.

danke für eure hilfe

Der_Unwissende 14. Mär 2007 09:50

Re: Zoom bei TChart
 
Hi und erstmal herzlich Willkommen in der DP :dp:

Wenn Du beide Achsen gleich skalierst, dann ist die Lösung für dein Problem recht einfach. Allerdings muss ich Dich vorwarnen, das was ich jetzt sage bezieht sich auf die Delphi-Version (die aber eigentlich komplett kompatibel sein sollte) und ist nicht getestet/nachgelesen (nicht über kleine Abweichungen wundern!).

Jedenfalls kannst Du zu jeder Achse des TChart-Objekts die Achsen als Eigenschaft abfragen. Eine Achse hat wiederum die Eigenschaft des maximalen Wertes. Hier musst Du dann einfach nur das Maximum aus den beiden Achsen-Maxima nehmen und setzen.
An sich hast Du bei dem beschriebenen Weg ein kleines Problem, möchtest Du die Skalierung vornehmen, musst Du den automatischen Modus natürlich ausschalten. Hier würde also die automatische Skalierung entfallen und Änderungen würdest Du natürlich nicht mitbekommen.

Den Maximalen Wert müsstest Du ungefähr so ermitteln können
Code:
TChart chart;
int value1, value2;

// Achtung, ist nicht Case-Sensitive, Namen stimmen auch nur bedingt!
value1 = chart->leftAxis->maximum;
value2 = chart->bottomAxis->maximum;
...
Hier hast Du zwei Möglichkeiten:
1. Du kannst einfach hin- und herschalten. Dazu kannst Du dann einfach vor dem Einfügen eines neuen Wertes die Automatik anschalten, das Maximum ermitteln, die Automatik abschalten und einen festen Wert (das Maximum) zuweisen. Alternativ ist es natürlich auch möglich, dass Du im Hintergrund ein TChart-Objekt (das nicht sichtbar ist) verwendest. Alles was Du dort einträgst wird automatisch skaliert, Du ermittelst den automatisch berechneten maximalen Wert und verwendest den.

2. Besser, einfacher und schöner dürfte es aber sein, dass Du die Skalierung einfach selbst berechnest. Dazu merkst Du Dir einfach in einer Variable den Größten Wert (nebenbei gehe ich die ganze Zeit davon aus, dass der kleinste Wert fest ist, sonst natürlich analog mit anpassen!). Jedenfalls speicherst Du für beide Achsen immer den maximalen Wert. Fügst Du einen neuen Wert in das TChart-Objekt ein, so musst Du nur prüfen ob es (für die entsprechende Achse) ein neues Maximum ist. Ist dies der Fall, so kannst Du einfach die Maximum-Eigenschaft der Achsen anpassen. Wichtig ist auch hier, dass die Eigenschaft Automatic (der Achsen) abgeschaltet ist.


Gruß Der Unwissende

scma0158 14. Mär 2007 10:19

Re: Zoom bei TChart
 
ja sowas hab ich auch schon gedacht. danke für deine ausführung.

ich hatte die hoffnung, dass man vielleicht auf einfachem weg irgendwo eine 1:1 verbindung der achsen setzen kann.

aber sowas gibt es wohl nicht.

grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz