Witam,
Czy w Delphi 10.3 CE jest komponent do obsługi wykresów jak w starych wersjach Delphi (TeeChart)?
Pozdrawiam.
Witam,
Czy w Delphi 10.3 CE jest komponent do obsługi wykresów jak w starych wersjach Delphi (TeeChart)?
Pozdrawiam.
Według informacji
powinny być ale potwierdzić musi ktoś kto posiada CE.
w Delphi Community 10.3 u3 nie ma, sprawdzałem też menadżerze pakietów.
Tools -> Manage Platforms
W zakładce "Additionals options..." powinno być.
Zgodnie z https://en.wikipedia.org/wiki/Teechart:
TeeChart has been included in most Delphi and C++Builder products since 1997[2], and TeeChart Standard currently is part of Embarcadero RAD Studio 10.4 Sydney
Sprawdziłem i w wersji 10.2 CE tego nie ma, natomiast o ile się nie mylę, to wersja CE nie różni się znacząco pod względem zawartości od wersji płatnej, główne różnice dotyczą możliwości komercyjnego wykorzystania.
Ok, jednak w 10.3 CE nie ma :/
http://docwiki.embarcadero.com/RADStudio/Rio/en/TeeChart
TeeChart is included with all RAD Studio versions except Starter;
Znacie zamiennik do wykresów?
Szukałem w internecie, ale ciągle nic nie znajduje.
@Markoni pewnie interesuje cię jakiś bezpłatny zamiennik?
Z płatnych jest sporo, np. TMS VCL Chart, TMS FMX Chart, LMD ChartPack, List & Label Enterprise Reporting Edition, TeeSuite, ProEssentials, Plotlab, SDL Chartpack.
Tak wolę bezpłatny, ponieważ nie programuję komercyjnie.
Komponent do tworzenia wykresów do jeden wieczór programowania. Jeśli jest potrzebny do prostych zastosowań to nie wiem czy jest sens poświęcać czas na poszukiwania.
Same statyczne wykresy to nie problem, nie wiem jak zrobić dynamiczne powiększanie/zmniejszanie zakresu podobnie jak w TChart.
Za mało szczegółów, żebym mógł cokolwiek doradzić.
Kontrolek TChart
nie miałem okazji używać, więc w razie czego napisz konkretnie z czym masz problem, a coś się doradzi.
Np. w X mam czas, a w Y wartości. Teraz wczytując z pliku chcę przybliżać wykres który z powodu np. rozdzielczości nie zmieściłby się na ekranie.
W tym przypadku widać też problem, jak zmieścić cały zakres na wykresie jeśli rozdzielczość danych jest większa od okna.
Mnożysz wartości przez zmiennoprzecinkową skalę, a następnie wyniku używasz do renderowania – nic trudnego.
Czyli najpierw pobierasz rozmiar obszaru dla wykresu i odejmujesz od tego stałe offsety (żeby punkty nie leżały na samym kraju obszaru), następnie wyznaczasz mnożnik(i) dzieląc szerokość/wysokość obszaru przez maksymalną dopuszczalną wartość dla punktu. W tym momencie masz małą liczbę zmiennoprzecinkową. Teraz czas na renderowanie. Po kolei bierzesz punkty z serii i mnożysz go przez ten wyliczony mnożnik – otrzymujesz współrzędną relatywną względem dostępnego obszaru, do której dodajesz offset i gotowe. I tak z każdym punktem, otrzymasz współrzędne Y
na wykresie.
Dla współrzędnych X
będzie podobnie, tyle że ów maksimum nie będzie maksymalną możliwą liczbą dla danego typu danych (lub dla typu liczb z serii do wyświetlenia), a po prostu ilością liczb mieszczących się w obszarze. Im więcej danych ma być widocznych, tym odległości między sąsiednimi punktami będą mniejsze. Tutaj też weź pod uwagę offsety, żeby pierwszy i ostatni punkt nie leżały na samych krajach obszaru.
Ewentualnie zamiast dodawania offsetów, najpierw pobierz rozmiar obszaru dla wykresu, a następnie zmniejsz go o te offsety. W ten sposób obliczenia będą krótsze, bo dotyczyć będą jedynie skalowania, czyli de facto samego mnożenia.
Dobrze by było wiedzieć jakie dane i w jaki sposób chcesz pokazać na wykresie. Jeśli np. masz serię liczb typu Integer
, mnożnik będzie bardzo mały, pokroju 0.000002843
, dla wartości typu UInt8
będzie pokroju 0.7982374876
, a jeśli obszar jest większy niż 255 pikseli, mnożnik będzie większy niż 1
.
W każdym razie to co opisałem wyżej pozwoli renderować dowolne wartości w dowolnie małym/dużym obszarze. W razie czego mogę przygotować małego PoC-a w Lazarusie, który zilustruje ww. obliczenia, tak żebyś dokładnie wiedział jak wygląda implementacja oraz dokładnie widział w oknie, jakie są rezultaty tych obliczeń. Coś prostego do zabawy, raczej w formie renderowania w PaintBox
– bo szybciej. A przeniesienie tego kodu do klasy kontrolki będzie banalne.