Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Цвет в StringGrid


Автор: Underdark 5.11.2004, 18:16
Народ, я сталкнулся с такой проблемой:
Нужно выделить цветом столбец таблицы StringGrid (в смысле цвет фона ячеек). Вообще такое возможно и если возможно, то как?

Или хотя бы цвет текста в отдельных ячейках...

Автор: Zero 5.11.2004, 21:56
Underdark, я конечно давно работал, со StringGrid, и непомню как там делать многие вещи, но чтобы изменить цвет шрифта и всё остальное что сним связано, то зайди в свойство Font, он работает с шрифтом любого обекта...
Кстати если хочеш узнать как что делать со стандарными объектами delphi, то открой справочник и посмотри там расписаны основные свойства каждого стандартного объекта Delphi. smile

Автор: Pakshin A. S. 5.11.2004, 22:02
Даю направление:
Работаем с канвой в момент отрисовки...
Может получится...

Автор: Underdark 6.11.2004, 10:18
Zero, это всё понятно, но Font меняет свойства всего объекта, а мине нужно, чтобы менялся один столбец - вот в чём загвоздка! smile

Автор: Zero 6.11.2004, 12:14
smile
Могу только предложить, использовать несколько Srriggrido'ов, и в каждой свой цвет,
визуально буде смотрется как одна и тогда можно будет сделать всё чё ты хотел сделать сними в начале...

Автор: devmstr 6.11.2004, 12:16
Цитата из DRKB:

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




Если че непонятно, спрашивай, постараюсь помочь smile

Автор: Underdark 6.11.2004, 12:36
Бальшая СПАСИБА! Я побёг пробовать... smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)