Topic: [Скрипт] Полосатый TableGrid

Скрипт разукрашивает через одну строчку компонент TableGrid


скрипт:

procedure Form1_GridEmployees_OnChange (Sender: string);
var
   iRow ,c: integer;
   q, iCol: integer;
begin
     c := Form1.GridEmployees.RowCount - 1;
     q := Form1.GridEmployees.Columns.Count-1;
     for iRow := 0 to c do
         for iCol := 0 to q do
         begin
             if iRow mod 2 = 0 then Form1.GridEmployees.Cell[iCol,iRow].Color := clBtnFace;
         end;
end;

begin
end.


Проект с примером:

Post's attachments

Attachment icon Color Grid striped.zip 5.83 kb, 1338 downloads since 2015-02-23 

Dmitry.

2 (edited by alex842 2015-08-06 09:31:30)

Re: [Скрипт] Полосатый TableGrid

Немного усовершенствовал пример Дмитрия, сделав из него универсальную процедуру. Пригодится, если нужно раскрашивать несколько таблиц.

procedure ColorRowGrid (Grid:TdbStringGridEx;ColorEven,ColorOdd:TColor);
//Grid - Таблица для раскрашивания (Form1.TableGrid1)
//ColorEven - цвет четных строк
//ColorOdd - цвет нечетных строк
var
   iRow ,c: integer;
   q, iCol: integer;
begin
     c := Grid.RowCount - 1;
     q := Grid.Columns.Count-1;
     for iRow := 0 to c do
         for iCol := 0 to q do
         begin
             if iRow mod 2 = 0 then Grid.Cell[iCol,iRow].Color := ColorEven
             else
             Grid.Cell[iCol,iRow].Color := ColorOdd;
         end;
end;

//Пример
ColorRowGrid(Form1.TableGrid1,clBtnFace,clWindow);
Post's attachments

Attachment icon Color Grid striped.zip 336.56 kb, 1017 downloads since 2015-08-06 

Re: [Скрипт] Полосатый TableGrid

А возможно тоже самое провернуть с колонками, если да то можно пример?

4 (edited by k245 2018-10-09 07:58:05)

Re: [Скрипт] Полосатый TableGrid

metatron wrote:

А возможно тоже самое провернуть с колонками, если да то можно пример?

замените строку

if iRow mod 2 = 0 then Grid.Cell[iCol,iRow].Color := ColorEven

на

if iCol mod 2 = 0 then Grid.Cell[iCol,iRow].Color := ColorEven
Визуальное программирование: блог и телеграм-канал.

Re: [Скрипт] Полосатый TableGrid

А как перестроить цвета после изменения сортировки по столбцу?

Если использовать как в примере alex842 то при сортировки по какой либо колонке появляется ошибка.
Функцию вешаю на событие OnChange и OnAfterSort/

6 (edited by k245 2022-05-26 09:28:32)

Re: [Скрипт] Полосатый TableGrid

0anion0 wrote:

А как перестроить цвета после изменения сортировки по столбцу?

Если использовать как в примере alex842 то при сортировки по какой либо колонке появляется ошибка.
Функцию вешаю на событие OnChange и OnAfterSort/

Ошибку в студию!

Моё предварительное предположение, что  функцию ColorRowGrid() нужно не "вешать", а "вызывать из" smile

Визуальное программирование: блог и телеграм-канал.

Re: [Скрипт] Полосатый TableGrid

Да, функцию вызываю из событий OnChange и OnAfterSort:

procedure frmMain_gridOrders_OnChange (Sender: string);
begin
  ColorRowGrid(frmMain.gridOrders,clBtnFace,clYellow);
end;

Которая в свою очередь вызывает

procedure ColorRowGrid (Grid:TdbStringGridEx;ColorEven,ColorOdd:TColor);
//Grid - Таблица для раскрашивания (Form1.TableGrid1)
//ColorEven - цвет четных строк
//ColorOdd - цвет нечетных строк
var
   iRow ,c: integer;
   q, iCol: integer;
begin
    Grid.BeginUpdate;
    c := Grid.RowCount - 1;
    q := Grid.Columns.Count-1;
    for iRow := 0 to c do
        for iCol := 0 to q do
        begin
            if iRow mod 2 = 0 then Grid.Cell[iCol,iRow].Color := ColorEven
            else
            Grid.Cell[iCol,iRow].Color := ColorOdd;
        end;
end;

из OnChange отрабатывает нормально,
а если использовать вызов frmMain_gridOrders_OnChange из OnAfterSort
и отсортировать по другому столбцу то появляется ошибка:

List index out of bounds (1)
Script position: 113:36

и подсвечивается строка

if iRow mod 2 = 0 then Grid.Cell[iCol,iRow].Color := ColorEven

как то так

Re: [Скрипт] Полосатый TableGrid

вы так и не показали скрипт вызова ColorRowGrid() из обработчика OnAfterSort(). Боюсь, что вашего словесного описания недостаточно для поиска причины ошибки....


И ещё: если вы использовали BeginUpdate то нужен также EndUpdate() после завершения изменений грида. И я бы избавился от переменных c и q.

procedure ColorRowGrid (Grid:TdbStringGridEx;ColorEven,ColorOdd:TColor);
//Grid - Таблица для раскрашивания (Form1.TableGrid1)
//ColorEven - цвет четных строк
//ColorOdd - цвет нечетных строк
var
  iRow: integer;
  iCol: integer;
begin
   Grid.BeginUpdate;
   for iRow := 0 to Grid.RowCount - 1 do
      for iCol := 0 to Grid.Columns.Count-1 do
      begin
         if iRow mod 2 = 0 then 
           Grid.Cell[iCol,iRow].Color := ColorEven
         else
           Grid.Cell[iCol,iRow].Color := ColorOdd;
      end;
  Grid.EndUpdate;
end;
Визуальное программирование: блог и телеграм-канал.

Re: [Скрипт] Полосатый TableGrid

Спасибо за наводку, я сам виноват что не додумался.

Для обработчика OnAfterSort надо свою функцию делать, с большим количеством аргументов, а я прописывал то же самое то и для OnChange т.е. frmMain_gridOrders_OnChange.