Niestety nie ma prostego rozwiązania tego problemu. W zwykłym StringGrid nie ma możliwości zmiany koloru jednego wiersza za pomocą właściwości. Jest to możliwe tylko dla całego StringGrid.
W sieci są dostępne komponenty podobne do StringGrid które to umożliwiają. O ile mnie pamięć nie myli to było coś takiego jak TColorizedStringGrid.(ten lub podobny - jest ich kilka).
Co do drugiego rozwiązania - nie wyklucza ono kolorowania tylko określonych wierszy czy obszarów (i nieważne czy zawsze czy tylko po spełnieniu warunku).
Do procedury obsługi zdarzenia OnDrawGrid dostarczane są parametry:
- Sender : TObject - ten nas raczej nie intertesuje
- ARow : Integer - to jest numer wiersza który jest rysowany
- ACol : Integer - to jest numer kolumny która jest rysowana
- Rect : TRect - obszar w którym znajduje się komórka do narysowania
- State : TGridState - ten też raczej nie będzie potrzebny
Procedura ta jest wywoływana dla każdej widocznej komórki osobno przy każdej jej rysowaniu.
Więc jeżeli chcesz na przykład aby komórki w prostokącie o współrzędnych : lewy górny róg (2,2) , prawy dolny (3,5) były na czerwonym tle to procedura powinna wyglądać mniej więcej tak:
if warunek then
if (ACol >= 2 and ACol <= 3) and(ARow >=3 and ARow &gl= 5) then do begin
StringGrid1.Canvas.Brush.Color:= //tutaj ustaw kolor tła
StringGrid1.Canvas.Rectangle(Rect);
StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow] );
end;
Tym sposobem jeżeli warunek bęsdzie prawdziwy i współrzędne odpowiednie to będzie inny kolor tła.
Oczywiście zamiast stałych we współrzędnych użyj zmiennych i wstaw warunek jaki potrzebujesz.
I jeszcze jedno w tym przypadku nie zmieniaj właściwości DefaultDrawing. Pozostaw true.
Powodzenia!