TChart + sortowanie

dział ogólny

TChart + sortowanie

Nowy postprzez techew » wtorek, 3 lutego 2009, 16:58

Mam problem, chce posortowac wartosci w Tchart, na osi x znajduja sie nazwy typu string, na osi y wartosci (double), po zastosowaniu kodu: (np. obiekt1 - 33.8, obiekt2 - 15.3 itd.)

void __fastcall TMAmain::Button1Click(TObject *Sender)
{
Chart1->Series[0]->YValues->Order=loDescending;
Chart1->Series[0]->YValues->Sort();
}

kompletnie nic sie nie dzieje :(

przy czym po zastosowaniu:


void __fastcall TMAmain::Button1Click(TObject *Sender)
{
Chart1->Series[0]->SortByLabels(loAscending);
}

sortuje ladnie, tyle ze wg. nazw (obiekt1, obiekt2) a nie o to mi chodzi.
Czy ktos mial moze podobny problem?
Bede wdzieczna za jakiekolwiek pomysly :)
Avatar użytkownika
techew
Bladawiec
Bladawiec
 
Posty: 40
Dołączył(a): piątek, 26 września 2008, 10:07
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: TChart + sortowanie

Nowy postprzez Witold » Å›roda, 4 lutego 2009, 01:44

techew napisał(a):void __fastcall TMAmain::Button1Click(TObject *Sender)
{
Chart1->Series[0]->YValues->Order=loDescending;
Chart1->Series[0]->YValues->Sort();
}

kompletnie nic sie nie dzieje :(

Wydaje mi się że dzieje się tak jak być powinno. Ważne że sortujesz jakby pary X,Y. Gdy posortowałaś wg. Y, wartości X (myślę że oznaczają kolejność) zostały niezmienione. Uaktualnij je (X), wtedy powinno być ok.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: TChart + sortowanie

Nowy postprzez techew » Å›roda, 4 lutego 2009, 10:28

Spróbowalam na samym poczatku zarówno X jak i Y :| ten sam rezultat :?
Avatar użytkownika
techew
Bladawiec
Bladawiec
 
Posty: 40
Dołączył(a): piątek, 26 września 2008, 10:07
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: TChart + sortowanie

Nowy postprzez Witold » Å›roda, 4 lutego 2009, 12:24

techew napisał(a):Spróbowalam na samym poczatku zarówno X jak i Y :| ten sam rezultat :?

Pewnie nie to o czym pisałem.

Jeżeli dobrze myślę, to załóżmy żę masz pary punktów (X,Y)
(1,5), (2,1),(3,2)

Gdy je przesortujesz wg. Y otrzymasz:
(2,1),(3,2)(1,5)

Gdy umieścisz te punkty na współrzędnych , mimo że są posortowane, dalej będą w tych samych miejscach, zmieni się tylko kolejność rysowania. Uaktualnij (zmień) wartości X, by otrzymać:
(1,1),(2,2),(3,5).

Nie wiem czy sama ustawiałaś X czy zostały zmienione automatycznie.

Najlepiej jeżeli sprawdzisz sobie, wartości X,Y przed sortowaniem , i po sortowaniu. Zobaczysz że wartości są sortowane.
Kod: Zaznacz cały
  for(int i=0; i<Chart1->Series[0]->YValues->Count(); ++i)
  {
    Memo1->Lines->Add(AnsiString(Chart1->Series[0]->YValue[i])+":"+Chart1->Series[0]->XValue[i]);
  }


Jeszcze pewnie przydało by się ustawić dla: XValues->Order=loNone ; a na koniec Chart1-> Refresh (); (tak widziałem w przykładzie dla Delphi)
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: TChart + sortowanie

Nowy postprzez techew » Å›roda, 4 lutego 2009, 18:01

Tak masz racje.
Teraz dopiero mi sie rozjasnilo :)) az mi glupio, ze tak sie 'ograniczylam' w swoim rozumowaniu :oops:
Troche sie zasugerowalam tym, ze kiedy sortuje wykres w fazie projektowania bcb (dwukrotnie klikam na wykres,
i wybieram karte Series, nastepnie General w lewym dolnym rogu jest lista rozwijana z etykieta sort i moge z niej wybrac czy rosnaca, malejaco lub wcale)
wykres sortuje sie pieknie w jedna i w druga strone - oczekiwalam takiego samego efektu poprzez wywolanie tej funkcji dynamicznie.

Wykres wykorzystuje w programie 'Analizy finansowe' wykazujacy dochody/straty w oparciu o np. konkretnego klienta (w rozbiciu na kupowane produkty) Wartosci zarowno x jak i y ustawiane sa w trakcie dzialania progamu (pobieram wartosci z bazy danych, dziele wszystkie rekordy
na grupy i sprawdzam wartosc sprzedazy dla kazdej z grup w danym okresie, dla danego klienta i tak otrzymuje wartosci: (TH LID(x), 1.1(y)), R RANGE(x), 1.2(y)) , (SM POT(x), 2.2(y)) itd.
nastepnie chce po kliknieciu na przycisk 'przerysowac' wykres tak aby produkt sprzedajacy sie najlepiej byl na samym poczatku itd., czyli:
(SM POT(x), 2.2(y)), (R RANGE(x), 1.2(y)), (TH LID(x), 1.1(y)) czyli po prostu fizycznie pozamieniac je miejscami :))
co w praktyce oznacza zmienic kolejnosc dodawania poszczegolnych elementow series, nastepnie wylaczyc jakiekolwiek sortowanie (XValues->Order=loNone)
i mozna jeszcze odswiezyc (Chart1-> Refresh (); )

Dzieki raz jeszcze za rozjasnienie :)

Pozdrawiam :)
Avatar użytkownika
techew
Bladawiec
Bladawiec
 
Posty: 40
Dołączył(a): piątek, 26 września 2008, 10:07
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

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 6 gości