Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Builder

Автор: Fanat 4.04.2007 23:51

Как закрасить одну ячейку матрицы или одну строку(столбец) в какой-либо цвет?..
Зарание спасибо...

Автор: volvo 4.04.2007 23:58

Обрабатывать событие 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;
// Дальнейшая отрисовка ячейки ...
}

Автор: Fanat 5.04.2007 0:20

Цитата(volvo @ 4.04.2007 20:58) *

Обрабатывать событие 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;
// Дальнейшая отрисовка ячейки ...
}



Че то я не особо понял...как мне в проге сделать...
if (x=y) то ячейку x,y в красный цвет...?

Автор: volvo 5.04.2007 0:32

Нет...

Для каждой отрисовываемой ячейки вызывается событие OnDrawCell... Вот в нем и проверяешь, если номер строки, в которой находится та ячейка, что отрисовывается сейчас (ARow) равен номеру строки, которую ты хочешь закрасить другим цветом, то закрашиваешь, иначе этап смены цвета пропускается.

Автор: Fanat 5.04.2007 0:49

Цитата(volvo @ 4.04.2007 21:32) *

Нет...

Для каждой отрисовываемой ячейки вызывается событие OnDrawCell... Вот в нем и проверяешь, если номер строки, в которой находится та ячейка, что отрисовывается сейчас (ARow) равен номеру строки, которую ты хочешь закрасить другим цветом, то закрашиваешь, иначе этап смены цвета пропускается.


Это понял...пасиб...
А если матрица уже нарисована...и требуеться при определенном уловии как-то выделить какой-либо столбец
(строку) без новой прорисовки матрицы это возможно?..

Автор: volvo 5.04.2007 3:01

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;