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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 17.10.2016, 16:10
Red_Garry Red_Garry вне форума
Начинающий
 
Регистрация: 07.07.2011
Сообщения: 126
Репутация: 10
По умолчанию Окраска ячейки DBGrid в зависимости от её содержимого

Здравствуйте!
Ввёл тему поста в поисковую строку и то, что получил в ответ, меня не удовлетворило... Блин, не могу разобраться. Добрые люди! Задача такая: Поля базы, на которую завязан DBGrid, имеют числовой формат. Если определённое поле получает определённое значение, то ячейка (НЕ строка) окрашивается в определённый цвет. Желательно уметь красить не только фон ячейки, но и цвет шрифта. Помогите с примером кода!

Спасибо!
Низкий поклон отклинувшимся
Ответить с цитированием
  #2  
Старый 17.10.2016, 16:14
ApxaHGe1 ApxaHGe1 вне форума
Активный
 
Регистрация: 08.04.2008
Адрес: Нижний новгород
Сообщения: 311
Репутация: 38
По умолчанию

Код:
procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
if Column.Field.DataSet.FieldByName(STATUS_F).AsString='Выполнено' then
begin
with  DBGrid.Canvas do begin
Brush.Color:=$00FF77;
Font.Color:=clBlack;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
DBGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Ответить с цитированием
  #3  
Старый 17.10.2016, 16:31
Red_Garry Red_Garry вне форума
Начинающий
 
Регистрация: 07.07.2011
Сообщения: 126
Репутация: 10
По умолчанию Окраска ячейки DBGrid в зависимости от её содержимого

Спасибо за ответ! Только указанный код красит всю строку
Ответить с цитированием
  #4  
Старый 17.10.2016, 16:32
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Red_Garry
...Если определённое поле получает определённое значение, то ячейка (НЕ строка) окрашивается в определённый цвет. Желательно уметь красить не только фон ячейки, но и цвет шрифта...
Без конкретного примера кода может быть только общий ответ, всё это безобразие делается в процедуре DrawCell, причём несколькими способами, через сравнение или подсчёт, можно ещё внедрением свойств ячеи etc... Вот ещё немного такого для обычной сетки
Код:
procedure TForm1.DBS.DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
    fcl, bcl: TColor;
    fcs: TFontStyles;
begin
  with DBS.Canvas do
   begin
    fcl := Font.Color;
    fcs := Font.Style;
    bcl := Brush.Color;
    if gdSelected in State then


{ clBlack = TColor($000000);
  clMaroon = TColor($000080);
  clGreen = TColor($008000);
  clOlive = TColor($008080);
  clNavy = TColor($800000);
  clPurple = TColor($800080);
  clTeal = TColor($808000);
  clGray = TColor($808080);
  clSilver = TColor($C0C0C0);
  clRed = TColor($0000FF);
  clLime = TColor($00FF00);
  clYellow = TColor($00FFFF);
  clBlue = TColor($FF0000);
  clFuchsia = TColor($FF00FF);
  clAqua = TColor($FFFF00);
  clLtGray = TColor($C0C0C0);
  clDkGray = TColor($808080);
  clWhite = TColor($FFFFFF);
 }


     begin
      Font.Color :=TColor($FFFFFF);
      Font.Style := Font.Style + [fsBold];
      Brush.Color := clGreen;
     end else
      if ARow < FixedRows then
       begin
        Font.Color := TColor($000000);
        Font.Style := Font.Style + [fsBold];
        Brush.Color := TColor($00FFFF);
       end else
        if ACol < FixedCols then
         begin
          Font.Color := RGB(255, 255, 255);
          Font.Style := Font.Style + [fsBold];
          Brush.Color := RGB($66, $99, $CC);
         end else
          if ARow mod 2 = 0 then
           begin
            Font.Color := RGB(0, 0, 0);
            Brush.Color := RGB($FF, $FF, $CC);
           end else
            begin
             Font.Color := RGB(0, 0, 0);
             Brush.Color := RGB($CC, $FF, $FF);
            end;

    FillRect(Rect);
    TextOut(Rect.Left + 4, Rect.Top + 4, Cells[ACol, ARow]);
    Font.Color := fcl;
    Font.Style := fcs;
    Brush.Color := bcl;
  end;
end;
Ответить с цитированием
  #5  
Старый 17.10.2016, 16:38
Red_Garry Red_Garry вне форума
Начинающий
 
Регистрация: 07.07.2011
Сообщения: 126
Репутация: 10
По умолчанию

Код:
procedure TForm6.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if Column.Field.DataSet.FieldByName('1').AsInteger=777.00 then
begin
with  DBGrid1.Canvas do begin
Brush.Color:=$00FF77;
Font.Color:=$00FF77;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text);
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
end;
end;
Т.е. хотелось бы, чтобы в поле с именем 1 при получении им значения 777.00 красилась только отображающая его ячейка DBGrid
Ответить с цитированием
  #6  
Старый 17.10.2016, 17:16
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Цитата:
Сообщение от Red_Garry
...Т.е. хотелось бы, чтобы в поле с именем 1 при получении им значения 777.00 красилась только отображающая его ячейка DBGrid
Просто ещё добавьте в сравнении if (...) and (Column.FieldName = '1') then ...
Ответить с цитированием
Этот пользователь сказал Спасибо Alegun за это полезное сообщение:
Red_Garry (18.10.2016)
  #7  
Старый 18.10.2016, 04:34
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Гарри, дружище, есть много людей кто хочет покрасить ячейки сетки, и есть мало людей из тех кто понимает как это сделать. Именно поэтому у программистов такие зарплаты.
В сетке базы у тебя есть: колонка (поле) и его значение. Вот и танцуй от него. Однако нельзя забывать о тех кто не попал в твой окрас, их тоже нарисуй, будь так добр.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #8  
Старый 18.10.2016, 08:00
Red_Garry Red_Garry вне форума
Начинающий
 
Регистрация: 07.07.2011
Сообщения: 126
Репутация: 10
По умолчанию

Спасибо! Работает!....
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter