TChart

 

 

Komponent TChart nie jest w zasadzie komponentem lecz kontrolką ActiveX. Użytkownicy środowiska Borland C++ Builder w wersji Personal nie mogą cieszyć się w pełni ze wszystkich funkcji oferowanych przez tą kontrolkę ponieważ mają do użytku w zasadzie wersję demonstracyjną tej kontrolki, pełna wersja jest udostępniana dopiero w BCB w wersje Enterprise i Proffesional. Niemniej nawet w wersji demo kontrolka jest użyteczna.
Ten obiekt jest tak złożony i rozbudowany, iż nie jest możliwe opisanie go w kilku zdaniach, postaram się w tym dziale przybliżyć nieco możliwości tej kontrolki, aczkolwiek bardzo rzadko z niej korzystam więc moja wiedza na jej temat nie jest zbyt szeroka.

 

Menu

  1. Tworzenie prostego pojedynczego wykresu poprzez wypełnienie go danymi z tabeli.

 

 

Tworzenie prostego pojedynczego wykresu poprzez wypełnienie go danymi z tabeli.

    W tej poradzie pokaże jak zacząć pracę z kontrolką, bez zagłębiania się w szczegóły stworzymy prosty wykres, który zostanie wypełniony danymi z tabeli StringGrid1, efekt działania kodu uzmysłowi nam jak ta kontrolka funkcjonuje. Zanim zaczniemy kodowanie umieśćmy na formularzu kilka komponentów, więc przed wszystkim wstawiamy komponent Chart1, następnie przycisk Button1, komponent ColorDialog1 z palety Dialogs i StringGrid1.
    Klikamy prawym klawiszem myszy na kontrolce Chart1 i z menu kontekstowego wybieramy Edit Chart... w  oknie dialogowym, które wyskoczy naciskamy przycisk Add powinno pojawić się nowe okno w którym z zakładki Standard wybieramy interesujący nas typ wykresu, dla przykładu niech będzie to Pie. W oknie Editing Chart1, w tabeli Series Title pojawi się nowa seria o nazwie Series1. Nazwę serii możemy zmienić klikając na przycisk Title. W tej poradzie nie będziemy zmieniać ustawień wykresu lecz zdamy się na jego ustawienia domyślne. Na etapie programowania widzimy w kontrolce Chart1 jakiś tam wykres, ale jest to po prostu przykład, który po skompilowaniu projektu i uruchomieniu programu nie powinien być widoczny.

    Zmieniamy ustawienia komponentu StringGrid1 i tak w kolejności ustawiamy jego właściwość ColCount na 3, FixedCols i FixedRows na 0, Options->goEditing i Options->goAlwaysShowEditor na true, zaś w RowCount ustawiamy taką wartość jaka nam pasuje i jaka będzie odpowiadać liczbie elementów na wykresie.

    Komponenty w zasadzie są gotowe do pracy, więc przystępujemy do kodowania, w pierwszej kolejności w zdarzeniu OnClick dla obiektu StringGrid1 umieścimy kod wypełniający trzecią kolumnę tego obiektu wartościami koloru dla każdego wiersza, czyli po kliknięcie w dowolny wiersz w trzeciej kolumnie tego obiektu, zostanie wywołane okno dialogowe wyboru koloru, w którym będize można wybrać interesujący nas kolor dla poszczególnych elementów wykresu, wartość koloru będzie wpisywana do wybranego wiersza trzeciej kolumny tabeli:

 

// Plik źródłowy np. Unit1.cpp.
//--------------------------------
void __fastcall TForm1::StringGrid1Click(TObject *Sender)
{
 if(StringGrid1->Col == 2)
  if(ColorDialog1->Execute())
  {
   StringGrid1->Cells[2][StringGrid1->Row] = IntToStr((int)ColorDialog1->Color); // tutaj następuje najpierw konwersja koloru na wartość int, a potem na wartość typu AnsiString
  }
}
//--------------------------------

 

Teraz w zdarzeniu OnClick dla przycisku Button1 umieszczamy kod wypełniający wykres wartościami z tabeli:

 

// Plik źródłowy np. Unit1.cpp.
//--------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 for(int i = 0; i < StringGrid1->RowCount; i++)
 {
  double x = StringGrid1->Cells[0][i].ToDouble();
  String text = StringGrid1->Cells[1][i];
  TColor color = (TColor)StringGrid1->Cells[2][i].ToInt();
  Chart1->Series[0]->Add(x, text, color);
 }
}
//--------------------------------

 

Obiekt Chart jeden posiada właściwość Series, jest to właściwie obiekt, który został przez nas utworzony przy konfiguracji obiektu Char, ten obiekt widnieje w oknie Editing Chart1 w tabeli Series Title i nosi nazwę Series1 (jeśli nie dokonaliśmy zmiany nazwy). Właściwość Series wymaga podania numeru serii którą chcemy wypełnić wartościami. W tabeli Series Title może znaleźć się więcej niż jedna seria, a numery poszczególnych serii niezależnie od ich nazwy liczą się od 0. W przykładzie stworzyliśmy tylko jedną serię więc tylko na niej się skupimy. Właściwość Series posiada funkcję Add, funkcja ta pobiera trzy argumenty, pierwszy to wartość elementu wykresu, drugi to jego nazwa, a trzeci to kolor, w przykładowym kodzie funkcja ta pobiera poszczególne wartości z tabeli StringGrid1, a to oznacza, że przed kliknięciem w przycisk Button1 należy tą tabelę wypełnić wartościami i tak w pierwszej kolumnie wprowadzamy wartość liczbową, w drugiej nazwę elementu a w trzeciej wybieramy z okna dialogowego kolor tego elementu. Jeżeli chcemy uniemożliwić użytkownikowi ręczną zmianę zawartości wierszy w trzeciej kolumnie, należy dodać jeszcze prosty kod w zdarzeniu OnKeyDown dla obiektu StringGrid1:

 

// Plik źródłowy np. Unit1.cpp.
//--------------------------------
void __fastcall TForm1::StringGrid1KeyDown(TObject *Sender, WORD &Key,
        TShiftState Shift)
{
 StringGrid1Click(Sender);
}
//--------------------------------

 

I to by było tyle na początek...

...powrót do menu.