Delphi: как изменить цвет ячейки в строковой сетке?
Я хочу изменить цвет фона (не шрифт) ячейки в строковой сетке в delphi.
Только одна ячейка не строка или столбец.
Могу ли я?
RRUZ: ваша процедура верна и работает, но в моей процедуре не работает.
Моя процедура:
x - глобальный массив целых чисел
procedure TF_avalie_salon.StringGrid1DrawCell(Sender: TObject; ACol,
ARow: Integer; Rect: TRect; State: TGridDrawState);
var S: string;
begin
S := StringGrid1.Cells[ACol, ARow];
StringGrid1.Canvas.FillRect(Rect);
SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
StringGrid1.Canvas.TextRect(Rect,Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
if (ARow<>0 )AND(acol<>0)AND(gridclick=true) then
begin
try
gridclick:=false;
x[acol+((strtoint(Edit_hafte.Text)-1)*7),arow]:=strtoint(StringGrid1.Cells[ACol, ARow]);
except
x[acol+((strtoint(Edit_hafte.Text)-1)*7),arow]:=0;
StringGrid1.Cells[acol,arow]:='0';
with TStringGrid(Sender) do
begin
Canvas.Brush.Color := clGreen;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2,Rect.Top+2,Cells[ACol, ARow]);
end;
end;
end;
end;
Когда я использую Canvas.Brush.Color с нижеследующим кодом, Canvas.Brush.Color не работает. Если я неактивен ниже кода, я могу изменить цвет ячеек. Но мне нужны оба.
S := StringGrid1.Cells[ACol, ARow];
StringGrid1.Canvas.FillRect(Rect);
SetTextAlign(StringGrid1.Canvas.Handle, TA_CENTER);
StringGrid1.Canvas.TextRect(Rect,Rect.Left + (Rect.Right - Rect.Left) div 2, Rect.Top + 2, S);
Ответы
Ответ 1
Ссылка Rafael содержит все, что вам нужно, используя OnDrawCell
событие - это способ рисовать ячейки StrignGrid. проверьте этот образец, который рисует только фон конкретной ячейки.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
if (ACol = 3) and (ARow = 2) then
with TStringGrid(Sender) do
begin
//paint the background Green
Canvas.Brush.Color := clGreen;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2,Rect.Top+2,Cells[ACol, ARow]);
end;
end;
Ответ 2
Я использовал эти коды, переведенные на С++. Есть две конкретные заметки, после чего я отправлю код.
CODE:
void __fastcall TForm3::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
TGridDrawState State)
{
UnicodeString uStr = "Hello";
int k, l;
char cc[100];
if(TRUE)
{
if((ACol <= 1) || (ARow <= 1))
{
StringGrid1->Canvas->Font->Color = clBlack;
StringGrid1->Canvas->Brush->Color = clBtnFace;
if(ACol == 0)
{
if(ARow > 1)
{
sprintf( cc, " %5.1f", rowLabels[ARow - 2]);
uStr = cc;
StringGrid1->Canvas->TextRect( Rect, Rect.left+2, Rect.top+2, uStr);
StringGrid1->Canvas->FrameRect(Rect);
}
}
if(ARow == 0)
{
if(ACol > 1)
{
sprintf( cc, " %5.1f", colLabels[ACol - 2]);
uStr = cc;
StringGrid1->Canvas->TextRect( Rect, Rect.left+2, Rect.top+2, uStr);
StringGrid1->Canvas->FrameRect(Rect);
}
}
}
else
{
switch (ACol%2)
{
case 0:
{
StringGrid1->Canvas->Font->Color = clRed;
StringGrid1->Canvas->Brush->Color = 0x00E1FFF9;
break;
}
case 1:
{
StringGrid1->Canvas->Font->Color = clBlue;
StringGrid1->Canvas->Brush->Color = 0x00FFEBDF;
break;
}
}
StringGrid1->Canvas->TextRect( Rect, Rect.left+2, Rect.top+2, uStr);
StringGrid1->Canvas->FrameRect(Rect);
}
}
}