Takie rzeczy można robić tylko w TStringGrid. DBGrid jest przewidziany do pracy z Data Base Engine DBE.
Do tworzenie takich efektów niezbędne jest zdarzenie OnDrawCell, które umożliwia wogóle modyfikację tabeli. Problem w tym, że DBGrid takiego zdarzenia nie posiada, ma za to zdarzenie OnDrawDataCell, ale w pomocy jest napisane:
Do not write an OnDrawDataCell event handler. OnDrawDataCell is obsolete and included for backward compatibility. Instead, write an OnDrawColumnCell event handler.
Więc nic z tego, nie można z tego zdarzenie skorzystać.
Sprawa jest nawet bardziej skomplikowana, gdyż DBGrid nie zwraca numeru wiersza, wiec nawet gdyby odwołać się do Canvas tego obiektu, to nie ma jak pobrać tekstu z poszczególnych komórek.
Jedyne co udało mi się zrobić to pokolorować całą kolumnę korzystając ze zdarzenie OnDrawColumnCell:
- Kod: Zaznacz cały
void __fastcall TForm1::DBGrid1DrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State)
{
if(Column->Index == 1)
{
Column->Color = clYellow;
}
}
Pobranie adresu kolumny nie jest wiec problemem, ale nie znalazłem funkcji zwracającej adres wiersza, ani takiej która by zwracała adres wybranej komórki, więc nie wiem jak pokolorować pojedynczą komórkę. Nie przesądzam oczywiście sprawy, być może istnieje jakaś funkcja zwracająca numery komórek, jeżeli tak, to pokolorowanie takiej komórki nie będzie problemem.