Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 074

/ вопрос открыт /

Здравствуйте, эксперты!Я создаю программно StringGrid,а как сделать так ,чтобы часть колонок у него было одного цвета,а другая часть другого.Какое событие нужно обработать.

GAZ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: GAZ (статус: Посетитель)
Вопрос отправлен: 2 ноября 2007, 19:13
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Feniks

Здравствуйте, GAZ!
Для раскрашивания будем использовать событие "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;

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 2 ноября 2007, 19:19


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:28
Выполнено за 0.03 сек.