Zmiana koloru czcionki dla wybranej komórki obiektu StringGrid. >
http://programowanie.cal.pl/cyfbar/stri ... html#grid4Zmiana stylu czcionki dla wybranej komórki obiektu StringGrid. >
http://programowanie.cal.pl/cyfbar/stri ... html#grid5Określanie koloru dla wybranej komórki obiektu StringGrid. >
http://programowanie.cal.pl/cyfbar/stri ... html#grid6W przypadku zmiany koloru czcionki masz podany taki kod:
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]);
}
Teraz wystarczy niewielka modyfikacja, by pasował do twoich potrzeb:
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
if(ACol >= StringGrid1->FixedCols && ARow >= StringGrid1->FixedRows)
{
StringGrid1->Canvas->Brush->Color = StringGrid1->Canvas->Brush->Color;
StringGrid1->Canvas->FillRect(Rect);
}
int iColor = StringGrid1->Cells[ACol][ARow].ToIntDef(0);
TColor sColor;
switch(iColor)
{
case 1: sColor = (TColor)0x00CCDE85; break;
case 2: sColor = clBlue; break;
case 3: sColor = clYellow; break;
case 4: sColor = clNavy; break;
case 5: sColor = clRed; break;
case 6: sColor = clGreen; break;
default: sColor = clBlack;
}
StringGrid1->Canvas->Font->Color = sColor;
StringGrid1->Canvas->TextOut(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);
}
Jeżeli w C++Builder 6 nie występuje funkcja
ToIntDef zrób tak:
int iColor;
try{ iColor = StringGrid1->Cells[ACol][ARow].ToInt(); } catch(...){ iColor = 0; }
A z przerobieniem kodów już sam sobie poradzisz. Pamiętaj tylko, że zmiany koloru czcionki w zdarzeniu
OnDrawCell należy dokonywać przed innymi zadaniami np. przed wyrównywaniem tekstu w komórkach, czyli najpierw ustawiamy właściwości czcionki a dopiero potem określamy pozostałe działania. Dzieje się tak dlatego, że w zdarzeniu
OnDrawCell rysowany jest arkusz i tekst w poszczególnych komórkach, a rysowanie odbywa się za każdym razem gdy zostaną wprowadzone jakiekolwiek zmiany w tabeli StringGrid.