Доброго времени суток.
На событие OnDrawCell установите свой обработчик. Вот пример. Выводит разными цветами информацию для разных условий. Переделать для простой закраски ячейки труда не должно составить.
procedure TMainWindow.DataListDrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
var
CurCol, CurRow : Longint;
CellIndex : Integer;
begin
TStringGrid(Sender).MouseToCell(Rect.Left, Rect.Top, CurCol, CurRow);
if CurRow <> 0 then CellIndex:=GetCellIndex(CurCol, CurRow)
else CellIndex:=-1;
with TStringGrid(Sender)do begin
if (ActiveList = 2) and (CellIndex >= 0) and
(CellIndex < EndDataIndex-LastYears*12+1) then begin
Canvas.Font.Color:=clRed;
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[CurCol,CurRow]);
end;
if CanShowResult and ShowInColor.Checked and ((ActiveList = 3) or (ActiveList = 2)) and
(CellIndex >= StartPeriod) and (CellIndex <= EndPeriod) then begin
Canvas.Brush.Color:=clBlue;
Canvas.Font.Color:=clWhite;
Canvas.FillRect(Rect); {вотэто и закрашивает ячейку}
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[CurCol,CurRow]);
end;
end;
end;
Удачи!
Другие языки программирования и технологии
У меня вопрос к программистам DELPHI.
Нужно установить свойство TStringGrid OwnerDraw == True;
И в сответствужщем событии отрисовать как вам нужно.
И в сответствужщем событии отрисовать как вам нужно.
StringGrid
Для раскрашивания будем использовать событие "OnDrawCell". Следующий код показывает, как сделать в Grid красный бэкраунд. Бэкграунд второй колонки будет зелёным.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
const //здесь определяем Ваш цвет. Так же можно использовать цвета по умолчанию.
clPaleGreen = TColor($CCFFCC);
clPaleRed = TColor($CCCCFF);
begin
//Если ячейка получает фокус, то нам надо закрасить её другими цветами
if (gdFocused in State) then
begin
StringGrid1.Canvas.Brush.Color := clBlack;
StringGrid1.Canvas.Font.Color := clWhite;
end
else //Если же ячейка теряет фокус, то закрашиваем её красным и зелёным
if ACol = 2 then //Вторая колонка будет зелёной, другие - ячейки красными
StringGrid1.Canvas.Brush.color := clPaleGreen
else
StringGrid1.canvas.brush.Color := clPaleRed;
//Теперь закрасим ячейки, но только, если ячейка не Title- Row/Column
//Естественно это завит от того, есть у Вас title-Row/Columns или нет.
if (ACol > 0) and (ARow > 0) then
begin
//Закрашиваем бэкграунд
StringGrid1.Canvas.FillRect(Rect);
//Закрашиваем текст (Text). Также здесь можно добавить выравнивание и т. д. .
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
end;
end;
Если Вы захотите чтобы цвет ячеек менялся в зависимости от значения в них, то можно заменить 3 линии (if Acol = 2 ...) на что-нибуть вроде этого
if StringGrid1.Cells[ACol, ARow] = 'highlight it' then
StringGrid1.Canvas.Brush.color := clPalered
else
StringGrid1.canvas.brush.Color := clWhite;
Для раскрашивания будем использовать событие "OnDrawCell". Следующий код показывает, как сделать в Grid красный бэкраунд. Бэкграунд второй колонки будет зелёным.
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
const //здесь определяем Ваш цвет. Так же можно использовать цвета по умолчанию.
clPaleGreen = TColor($CCFFCC);
clPaleRed = TColor($CCCCFF);
begin
//Если ячейка получает фокус, то нам надо закрасить её другими цветами
if (gdFocused in State) then
begin
StringGrid1.Canvas.Brush.Color := clBlack;
StringGrid1.Canvas.Font.Color := clWhite;
end
else //Если же ячейка теряет фокус, то закрашиваем её красным и зелёным
if ACol = 2 then //Вторая колонка будет зелёной, другие - ячейки красными
StringGrid1.Canvas.Brush.color := clPaleGreen
else
StringGrid1.canvas.brush.Color := clPaleRed;
//Теперь закрасим ячейки, но только, если ячейка не Title- Row/Column
//Естественно это завит от того, есть у Вас title-Row/Columns или нет.
if (ACol > 0) and (ARow > 0) then
begin
//Закрашиваем бэкграунд
StringGrid1.Canvas.FillRect(Rect);
//Закрашиваем текст (Text). Также здесь можно добавить выравнивание и т. д. .
StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
end;
end;
Если Вы захотите чтобы цвет ячеек менялся в зависимости от значения в них, то можно заменить 3 линии (if Acol = 2 ...) на что-нибуть вроде этого
if StringGrid1.Cells[ACol, ARow] = 'highlight it' then
StringGrid1.Canvas.Brush.color := clPalered
else
StringGrid1.canvas.brush.Color := clWhite;
начинать с basic 6 надо. не будет подобных вопросов
Похожие вопросы
- вопрос для программистов (delphi)
- Как вы считаете братья программисты Delphi популярный язык или самый лучший !
- помогите программисты!) delphi 7
- Components в Delphi. при защите лабораторной возник вопрос... конкретно для Delphi. Что есть массив Components?
- Вопрос к программистам...
- !! Вопрос для программистов (Нужен совет)
- Вопрос к программистам :)
- ПОСЛЕДНИЙ ВОПРОС ДЛЯ ПРОГРАММИСТОВ :) {не пугайтесь объёма мини статьи для новичков эта мини ст будет полезна}
- Вопрос про Borland Delphi и Lazarus
- Вопрос исключительно программистам!