Zmiana koloru czcionki w StringGrid

dział ogólny

Zmiana koloru czcionki w StringGrid

Nowy postprzez kade1982 » sobota, 2 stycznia 2010, 23:12

Witam,

Jest na forum nowy, zatem witam forumowiczów.
Przeczytałem artykuł dział: porady StringGrid (jak i wiele innych). I mam problem ze zmianą kolorów w obiekcie StringGrid.
nie za bardzo chce mi działać funkcja:

Kod: Zaznacz cały
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
StringGrid1->Canvas->Brush->Color = StringGrid1->Canvas->Brush->Color;
StringGrid1->Canvas->FillRect(Rect);

if(ACol == 2 && ARow == 1)
    {
     StringGrid1->Canvas->Font->Color = clRed;
    }
StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
}


To tak przykładowo przeklejene z FAQ. Potrzebuje zmieniac kolor w zaleznosci od danych wyświetlanych w tabeli, z tymże nawet powyższy przykład mi nie działa. Nie rozumiem tez co to jest zdarzenie OnDrawCell (sorry moze to lamerskie pytanie, ale nie doczytałem się nigdze na te temat).
Avatar użytkownika
kade1982
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 2 stycznia 2010, 23:01
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Zmiana koloru czcionki w StringGrid

Nowy postprzez usermaw » sobota, 2 stycznia 2010, 23:45

Przyklad zmiany z Twojego kodu, zmiana 2 komórek - czerwony i granatowy

Kod: Zaznacz cały
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
      TRect &Rect, TGridDrawState State)
{
StringGrid1->Canvas->Brush->Color = StringGrid1->Canvas->Brush->Color;
StringGrid1->Canvas->FillRect(Rect);

if(ACol == 2 && ARow == 2)
    {
     StringGrid1->Canvas->Font->Color = clRed;
    }
    if(ACol == 3 && ARow == 2)
    {
     StringGrid1->Canvas->Font->Color = clBlue;
    }
StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
}


Wklej do button1 ponizszy kod i po kliknieciu beda 2 rózne kolory, Nie wiem, Co w Twoim przykladzie nie dziala, ja tylko do niego dodałem drugi if, tak na jednej nodze
Kod: Zaznacz cały
void __fastcall TForm1::Button1Click(TObject *Sender)
{
StringGrid1->Cells[2][2]="RED";
StringGrid1->Cells[3][2]="BLUE";
}
Avatar użytkownika
usermaw
Homos antropiczny
Homos antropiczny
 
Posty: 55
Dołączył(a): piątek, 2 stycznia 2009, 20:43
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Zmiana koloru czcionki w StringGrid

Nowy postprzez Pitek » sobota, 2 stycznia 2010, 23:51

Funkcja podana przez ciebie jak najbardziej działa tylko odnosi się do jednej komórki musisz w pętli podać jakąś przstrzeń tabeli jeżeli chcesz zastosować zmianę koloru na jakimś obszarze.
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Zmiana koloru czcionki w StringGrid

Nowy postprzez kade1982 » sobota, 2 stycznia 2010, 23:56

Nie działa mi ani przykład ze strony, ani to co podał kolega usermaw.
Rozumiem że w pliku nagłówka tez musze dodac nazwe funkcji ? Bo bez tego w ogóle nie moge skompilowac programu. Ale i tak nie zmienia mi kolorów textu w tabeli.
Avatar użytkownika
kade1982
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 2 stycznia 2010, 23:01
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Zmiana koloru czcionki w StringGrid

Nowy postprzez kade1982 » niedziela, 3 stycznia 2010, 00:00

Dodam ze zmiane chciałbym dokonac na podstawie, warunku w zaleznosci od danych w tabeli, porównuje dwa źródła w przypadku gdy są różnice w danych chciałbym żeby były zaznaczone kolorem. Deklarując kolory wcześniej (jak sugeruje przykład0 nie rozumiem też do końca jak to zrobić.
Avatar użytkownika
kade1982
Bladawiec
Bladawiec
 
Posty: 7
Dołączył(a): sobota, 2 stycznia 2010, 23:01
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows XP Pro SP2
Kompilator: C++ Builder
    NieznanyNieznana

Re: Zmiana koloru czcionki w StringGrid

Nowy postprzez Pitek » niedziela, 3 stycznia 2010, 00:02

Myśle sobie że nie wrzucasz kodu do zdarzenia tylko tak poprostu.
Musisz dać kod do zdarzenia OnDrawCell obiektu StringGrid w tym celu StringGrid->Event->OnDrawCell i kliknij dwa razy oraz wrzuć kod tak gdzie cię przeniesie środowisko a poniżej pokazuje kod który działa w zakresie od 1 do 5 kolumny i od 1 do 5 wiersza i daje czerwoną czcionke :
Kod: Zaznacz cały
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
      int ARow, TRect &Rect, TGridDrawState State)
{
StringGrid1->Canvas->Brush->Color = StringGrid1->Canvas->Brush->Color;
StringGrid1->Canvas->FillRect(Rect);

if( (ACol >= 1 && ACol <= 5) && (ARow >= 1 && ARow <= 5) )
    {
     StringGrid1->Canvas->Font->Color = clRed;
    }
StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
}
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl

Za ten post autor Pitek otrzymał podziękowanie od:
kade1982
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
PodziÄ™kowaÅ‚ : 43
OtrzymaÅ‚ podziÄ™kowaÅ„: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    NieznanyNieznana

Re: Zmiana koloru czcionki w StringGrid

Nowy postprzez usermaw » niedziela, 3 stycznia 2010, 00:17

Heh, a juz mialem to samo napisac :-)

Zauważ, że w pliku *.h projektu w sekcji published zostanie automatycznie dodana linijka:
Kod: Zaznacz cały
    void __fastcall StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
          TRect &Rect, TGridDrawState State);


Jest to deklaracja metody w klasie, inaczej zwana prototypem.
Kod z sieci wklejaj zawsze po kliknieciu w zdarzenie, a wklejaj jedynie kod w nim sie znajdujÄ…cy.

Nie musisz sie martwic o usuniecie powyższej linijki. Jesli wyczyscisz zawartośc zdarzenia w pliku, gdzie piszesz kod, kompilator sam wykasuje prototyp po komppilacji, lub gdy zapiszesz zmiany w projekcie. Z reszta w ogóle do tej sekji nie ma co zaglądać. Tam wszystko dodaje i kasuje srodowisko automatycznie
Avatar użytkownika
usermaw
Homos antropiczny
Homos antropiczny
 
Posty: 55
Dołączył(a): piątek, 2 stycznia 2009, 20:43
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


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

cron