CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - funkcja Delete (int) w TChart

funkcja Delete (int) w TChart

dział ogólny

funkcja Delete (int) w TChart

Nowy postprzez majden » czwartek, 7 kwietnia 2011, 07:18

Gdy chcę usunąć jakiś trend z wykresu to robię Series1->Delete(int), gdzie int to liczba oznaczająca kolejność dodania trendu. Czyli jak najpierw dodam trend o nazwie "2" a później trend o nazwie "1" i zrobię Series1->Delete(1) to nie skasuje mi tego samego trendu co w momencie gdy trendy będę dodawał do wykresu w odwrotnej kolejności. Co mam zrobić jeśli mam np 5 trendów na wykresie i chcę usunąć konkretny a nie wiem jako który został dodany? Czy to można jakąś funkcją sprawdzić?
Avatar użytkownika
majden
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): piątek, 1 kwietnia 2011, 12:14
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: funkcja Delete (int) w TChart

Nowy postprzez Cyfrowy Baron » czwartek, 7 kwietnia 2011, 09:49

Funkcja Series->Delete kasuje wybrany element wykresu licząc od pierwszego elementu, czyli od 0. Przy kasowaniu elementy nie są identyfikowane po kolejności dodawania, lecz po kolejności w jakiej znajdują się na liście, czyli kasowany jest element o zadanym indeksie liczonym od 0. Jeżeli wybierzesz element o numerze 3:

KOD cpp:     UKRYJ  
 Series1->Delete(3);


Skasowany zostanie 4 węzeł wykresu, gdyż jak już wspomniałem indeksy elementów są liczone o 0. Series to zwykła lista zawierająca wartość elementu, jego nazwę i kolor. Elementy tej listy kasuje się jak elementy każdej innej listy wskazując numer elementu.




Jeżeli chcesz usunąć konkretny element z listy to musisz go jakoś zidentyfikować, czyli odnaleźć numer jego indeksu na liście. Szukać możesz po nazwie elementu:

KOD cpp:     UKRYJ  
 int idx = Series1->Labels->IndexOfLabel("Nazwa elementu listy", false); /* true - rozróżnia wielkość liter, false - nie rozróżnia */
 if(idx >= 0) Series1->Delete(idx);


Jeżeli na liście występuje więcej niż jeden element o tej samej nazwie to funkcja i tak zatrzyma się na pierwszym znalezionym.
Nie znalazłem żadnej funkcji wyszukującej elementy po ich wartości, ale to pewnie dlatego, że elementów o identycznej wartości może być dużo i ich wyszukiwanie nie miałoby sensu.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: funkcja Delete (int) w TChart

Nowy postprzez majden » sobota, 9 kwietnia 2011, 11:31

Właśnie czegoś takiego potrzebuje, tylko że nie mam funkcji Series1->Labels->IndexOfLabel :( Mam tylko IndexOf(), tyle że funkcja ta oczekuje parametru typu void a nie AnsiString...
Avatar użytkownika
majden
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): piątek, 1 kwietnia 2011, 12:14
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Firefox

Re: funkcja Delete (int) w TChart

Nowy postprzez Cyfrowy Baron » sobota, 9 kwietnia 2011, 11:46

U mnie też jest IndexOf, nie wiem jednak do czego ta funkcja służy. Próbowałem tego użyć, ale bez sukcesu. Nic już na to nie poradzę, masz stary TChart, ale powinna tam być funkcja podobna do tej IndexOfLabel, musisz ja tylko zidentyfikować.

Jakiego rodzaju jest to wykres, gdyż ja testy przeprowadzałem na wykresie liniowym.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: funkcja Delete (int) w TChart

Nowy postprzez majden » sobota, 9 kwietnia 2011, 13:18

Wykres typu Gantt. Już poradziłem sobie z tym problemem. Trochę na około bo skorzystałem z funckji Series1->LegendString:

KOD cpp:     UKRYJ  
  TLegendTextStyle s= ltsPlain;
    for(int i=1;i<10;i++)
    if(StringGrid1->Cells[1][j]== Series1->LegendString(i,s))
    Series1->Delete(i);


Dzięki za ukierunkowanie :)
Avatar użytkownika
majden
Bladawiec
Bladawiec
 
Posty: 5
Dołączył(a): piątek, 1 kwietnia 2011, 12:14
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Windows 7
Kompilator: C++ Builder 6
Gadu Gadu: 0
    Windows 7Firefox


Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości