Topic: цветовая заливка записей в гриде

Подскажите, а как сделать заливку цветом определенных записей в гриде. Не могу никак найти на форуме пример, кажется где=то уже было.

Re: цветовая заливка записей в гриде

У меня, если год в ячейке меньше или равен текущему, скрипт такой:

procedure frmChoice_TableGrid2_OnChange (Sender: string);
var
   i,c: integer;
   sYear: string;
   YY, MM, DD: word;
begin
     c := frmChoice.TableGrid2.RowCount - 1;
     for i := 0 to c do
     begin
         sYear := frmChoice.TableGrid2.Cells[14,i];
         if ValidInt(sYear) then
         begin
              DecodeDate(now, YY, MM, DD);
              if StrToInt(sYear) <= YY then frmChoice.TableGrid2.Cell[14,i].Color := clRed;
         end;

     end;
end;
Не боги горшки лепят!

Re: цветовая заливка записей в гриде

У меня так реализовано

procedure Form1_TableGrid1_OnChange (Sender: string);
var
   i,c: integer;
begin
     c := Form1.TableGrid1.RowCount-1; // получаем количество строк в гриде
     for i := 0 to c do // цикл перебора всех строк
     begin
                             // красим ячейку в зависимости от текста в ней, в колонках
          if Form1.TableGrid1.Cells[8,i] = 'Принято' then Form1.TableGrid1.Cell[8,i].Color := clYellow;
          if Form1.TableGrid1.Cells[8,i] = 'Ремонтируется' then Form1.TableGrid1.Cell[8,i].Color := clAqua;
          if Form1.TableGrid1.Cells[8,i] = 'Готов'  then Form1.TableGrid1.Cell[8,i].Color := clLime;
          if Form1.TableGrid1.Cells[8,i] = 'На диагностике' then Form1.TableGrid1.Cell[8,i].Color := clSilver;
          if Form1.TableGrid1.Cells[8,i] = 'Без ремонта' then Form1.TableGrid1.Cell[8,i].Color := clRed;
          if Form1.TableGrid1.Cells[8,i] = 'Согласовать' then Form1.TableGrid1.Cell[8,i].Color := clSkyBlue;
          if Form1.TableGrid1.Cells[8,i] = 'Поиск зип' then Form1.TableGrid1.Cell[8,i].Color := cl3DLight;
          if Form1.TableGrid1.Cells[8,i] = 'Ожидает запчасти' then Form1.TableGrid1.Cell[8,i].Color :=     clFuchsia;
          if Form1.TableGrid1.Cells[9,i] = 'Нет' then Form1.TableGrid1.Cell[9,i].Color :=     clInactiveCaption;
          if Form1.TableGrid1.Cells[9,i] = 'Да' then Form1.TableGrid1.Cell[9,i].Color :=     clLime;
          if Form1.TableGrid1.Cells[10,i] = 'Нет' then Form1.TableGrid1.Cell[10,i].Color :=     clInactiveCaption;
          if Form1.TableGrid1.Cells[10,i] = 'Да' then Form1.TableGrid1.Cell[10,i].Color :=     clLime;
          end;
          end;

Re: цветовая заливка записей в гриде

благодарю ребята! Ща поковыряю.

Re: цветовая заливка записей в гриде

Подскажите пожалуйста скрипт, подсвечивания ячейки цветом в грид (ячейчка формата - дата), если сегодняшняя (текущая) дата больше указанной в ячейке на 30 дней? Заранее благодарю!

Re: цветовая заливка записей в гриде

koydaika

procedure Form1_GridSearch_OnChange (Sender: string);
var
    i, c: integer;
    sDate: string;
    Date: TDate;
begin
     c := Form1.GridSearch.RowCount - 1;
     for i := 0 to c do
     begin
         sDate := Form1.GridSearch.Cells[3,i];
         if ValidDate(sDate) then
         begin
              Date := StrToDate(sDate);
              if Now > (Date+30) then Form1.GridSearch.Cell[3,i].Color := clRed;
         end;

     end;
end;

если не получится встроить, пришлите свой проект на support@drive-software.com
постараюсь помочь.

Dmitry.

Re: цветовая заливка записей в гриде

DriveSoft wrote:

koydaika

procedure Form1_GridSearch_OnChange (Sender: string);
var
    i, c: integer;
    sDate: string;
    Date: TDate;
begin
     c := Form1.GridSearch.RowCount - 1;
     for i := 0 to c do
     begin
         sDate := Form1.GridSearch.Cells[3,i];
         if ValidDate(sDate) then
         begin
              Date := StrToDate(sDate);
              if Now > (Date+30) then Form1.GridSearch.Cell[3,i].Color := clRed;
         end;

     end;
end;

если не получится встроить, пришлите свой проект на support@drive-software.com
постараюсь помочь.

Спасибо огромное! Все получилось!
А можно ли добавить условие ещё, если помимо даты +30 дней, добавить условие, что в другой ячейке определенная надпись, и только при выполнении обоих условий была подсветка?

Re: цветовая заливка записей в гриде

Можно, необходимо изменить эту строку кода

if Now > (Date+30) then Form1.GridSearch.Cell[3,i].Color := clRed;

на

if (Form1.GridSearch.Cells[2,i] = 'надпись') and (Now > (Date+30)) then Form1.GridSearch.Cell[3,i].Color := clRed;
Dmitry.

Re: цветовая заливка записей в гриде

DriveSoft wrote:

Можно, необходимо изменить эту строку кода

if Now > (Date+30) then Form1.GridSearch.Cell[3,i].Color := clRed;

на

if (Form1.GridSearch.Cells[2,i] = 'надпись') and (Now > (Date+30)) then Form1.GridSearch.Cell[3,i].Color := clRed;

Все получилось! Огромное тебе спасибо! Очень выручил!

Re: цветовая заливка записей в гриде

подскажите, пожалуйста, у меня такой вопрос - почему когда в грид выводятся записи полученные через SQL-запрос, то подсветка заданных ранее в скрипте ячеек пропадает. Т.е. при обычном поиске через кнопку с заданным действием "поиск" все гуд, скрипт исполняется на событии onchange грида и записи раскрашиваются в цвета. А когда в грид выводятся данные с помощью кнопки через SQL запрос и данные в гриде тоже меняются - то цвет записей в гриде пропадает? Может я не на то действие скрипт поставил? Или скрипт на грид не исполняется при SQL-запросе?

Re: цветовая заливка записей в гриде

motorolla
Должно работать и при  SQL запросе.
Пришлите пожалуйста ваш проект на support@drive-software.com
посмотрю в чем дело.

Dmitry.

Re: цветовая заливка записей в гриде

благодарю, разобрался, оказалось столбцы съехали при SQL-запрсе и проверка не потому номеру столбца велась.