Как закрасить одну ячейку матрицы или одну строку(столбец) в какой-либо цвет?..
Зарание спасибо...
Обрабатывать событие OnDrawCell:
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
if(ACol==1) // или (ARow==1)
StringGrid1->Canvas->Brush->Color = clRed;
// Дальнейшая отрисовка ячейки ...
}
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
if(ACol==1) // или (ARow==1)
StringGrid1->Canvas->Brush->Color = clRed;
// Дальнейшая отрисовка ячейки ...
}
Нет...
Для каждой отрисовываемой ячейки вызывается событие OnDrawCell... Вот в нем и проверяешь, если номер строки, в которой находится та ячейка, что отрисовывается сейчас (ARow) равен номеру строки, которую ты хочешь закрасить другим цветом, то закрашиваешь, иначе этап смены цвета пропускается.
Builder не установлен, проверить не могу, но для Дельфей все делается просто. На форме - TStringGrid, TButton и TEdit... По нажатию кнопки строка с тем номером, который введен в TEdit в гриде меняет цвет на красный... Причем перерисовывается только одна строка грида (для перерисовки столбца вызывать InvalidateCol, для перерисовки отдельной ячейки - InvalidateCell). Вот код:
type
TFakeStringGrid=class(TStringGrid);
procedure TForm1.Button1Click(Sender: TObject);
begin
TFakeStringGrid(StringGrid1).InvalidateRow(StrToInt(Edit1.Text));
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
if ARow=StrToInt(Edit1.Text) then
StringGrid1.Canvas.Brush.Color := clRed;
If (ACol > 0) and (ARow>0) then begin
StringGrid1.canvas.fillRect(Rect);
StringGrid1.canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[ACol,ARow]);
end;
end;