Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.06.2014, 01:46
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание TDBAdvGrid раскраска строки

Ребята всем привет
уже который день мучаюсь не могу понять как заставить этот компонент поменять цвет строки в зависимости от значения в ячейке

у компонента нету события DrawColumnCell но есть DrawCell
весь интернет обошел но не нашел метод как можно поменять цвет строки

для события DrawColumnCell код выглядел так
Код:
  if (Sender as TDBGrid).DataSource.DataSet.FieldByName('fZero').AsInteger=1 then
    Canvas.Brush.Color:=clRed;
  DefaultDrawColumnCell(Rect, DataCol, Column, State);

но как у компонента TDBAdvGrid справится с такой проблемой??
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #2  
Старый 07.06.2014, 08:17
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Electronic_Arts
...у компонента нету события DrawColumnCell но есть DrawCell...
Что, реально как у обычной стрингсетки события что-ли? Проприетарной поделки этой не видел, поэтому точно не знаю, извнт, но раз такое дело, может прокатит вариант как для StringGrid, вот пример из drkb:
Код:
procedure TfrmMain.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 StringGrid1.Cells[ACol, ARow] = '2' then
StringGrid1.Canvas.Brush.color := clPalered
else
StringGrid1.canvas.brush.Color := clwhite;

//Теперь закрасим ячейки, но только, если ячейка не 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;


З.Ы. Тут на одном форуме подсказали что у DBAdvGrid за это отвечает событие OnGetCellColor и в нём должно быть такое
Код:
...
with (Sender as TDBAdvGrid) do
if Cells[ACol,ARow] = '1' then ABrush.Color:= clYellow
else
ABrush.Color:= clGreen;
...
жаль что проверить не могу
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Electronic_Arts (07.06.2014)
  #3  
Старый 07.06.2014, 12:16
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 559
Версия Delphi: XE5
Репутация: 18
Восклицание

Спасибо заработал

Код:
with (Sender as TDBAdvGrid) do
if Cells[12,ARow] = '0' then
If (ARow>0) then
ABrush.Color:= clYellow
else
ABrush.Color:= clwhite;
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter