1 (edited by Nilaus 2015-06-01 08:40:08)

Topic: Совместить два скрипта

Помогите пожалуйста совместить два скрипта, что-то совсем не получается. Вернее получилось окрасить только по одному условию.
Есть в моем проекте вот такой скрипт выделения ячеек по условию который в  принципе работает:

procedure Form1_TableGrid2_OnChange (Sender: string);
/////// Цвет фона ячейки грида при условии /////////////
var
    i,c: integer;
    sDate: string;
begin
    c := Form1.TableGrid2.RowCount - 1;
    for i := 0 to c do
    begin
        sDate := Form1.TableGrid2.Cells[5,i];
        if (StrToDate(sDate) - now) < 1 then Form1.TableGrid2.Cell[5,i].Color := $007175BD
        else if (StrToDate(sDate) - now) < 3 then Form1.TableGrid2.Cell[5,i].Color := clYellow
    end;
end;

И есть вот такой скрипт выделения строк по условию с примера, взятого на этом форуме:

procedure Form1_TabGr_TaskList_OnChange (Sender: string);
var
   i,f,r,c: integer;
begin
     Form1.TabGr_TaskList.BeginUpdate;
     r := Form1.TabGr_TaskList.Columns.Count - 1;
     c := Form1.TabGr_TaskList.RowCount - 1;
     for i := 0 to r do
     begin
         if Form1.TabGr_TaskList.Cells[5,i] = 'Нет' then
          begin
            for f := 0 to r do
              Form1.TabGr_TaskList.Cell[f,i].Color := clGray;
          end;

     end;
     Form1.TabGr_TaskList.EndUpdate;
end;

Хотелось бы, чтобы работало выделение строк по двум условиям  даты в первом коде, а также по условию наличия  значения в ячейке (любого значения)
Например
Разница дат < 1 - цвет $007175BD
Разница дат < 3 - цвет  clYellow
Заполнена ячейка ( ячейка с датой, или текстовое поле), то цвет строки  clGray, при этом первые два условия игнорируются

P.S. Так до сих пор не смог решить проблему: ячейки (строки) выделяются цветом только когда кликнуть по целевой таблице, хотя значения в этой таблице появляются автоматически при клике на ячейку в другой таблице.
Пока выделение цветом срабатывает только при старте, при первом поиске. Если искать повторно, то цветом не выделяет.
Вот пример как это происходит: при старте все работает нормально, но стоит кликнуть на таблице телефоны, как потом выделение цветом работать перестает.:

Post's attachments

Attachment icon customer database.7z 277.31 kb, 484 downloads since 2015-06-01 

Re: Совместить два скрипта

второй скрипт с ошибкой, в итоге будет так

procedure Form1_TableGrid2_OnChange (Sender: string);
/////// Цвет фона ячейки грида при условии /////////////
var
    i,c: integer;
    sDate: string;
begin
    c := Form1.TableGrid2.RowCount - 1;
    for i := 0 to c do
    begin
        sDate := Form1.TableGrid2.Cells[5,i];
        if (StrToDate(sDate) - now) < 1 then Form1.TableGrid2.Cell[5,i].Color := $007175BD
        else if (StrToDate(sDate) - now) < 3 then Form1.TableGrid2.Cell[5,i].Color := clYellow
        
        
        if Form1.TableGrid2.Cells[4,i] = 'Нет' then Form1.TableGrid2.Cell[4,i].Color := clGray;        
    end;
end;
Dmitry.

Re: Совместить два скрипта

Проверил ваш проект, все работает, напишите более подробней с именами названий гридов, что именно и как не работает по шагам.


При первом поиске у вас заполняется грид table_clients, для которого нет скрипта раскраски.

Dmitry.

4 (edited by Nilaus 2015-06-01 10:14:26)

Re: Совместить два скрипта

DriveSoft
А как всю строку выделять? Второй скрипт как раз для этого и предназначен и в принципе по одному условию у меня работает, на два-три условия не получается. И как сделать условия по наличию каких-то данных в ячейке? По типу как в Экселе функция ЕПУСТО.

По выделению цветом.
При первом запуске заполняется  table_clients. По клику на строку table_clients заполняется GridPhones (телефоны, принадлежащие клиентам) посредством кнопки поиск bPhones со скриптом.  В таблице телефоны есть логическое полe rr.  Выделение цветом для поля rr работает так: если да - то цвет ячейки красный, если нет - то зеленый.  При первом запуске и выборе значений в table_clients все работает прекрасно,  но если вдруг кликнуть по таблице GridPhones, то выделение цветом больше не работает.  Т.е. оно конечно работает, но только если вручную выбирать ячейку в GridPhones, тогда цвет появляется, а через выбор в table_clients, как при старте,  цвета нет.
В другом моем проекте точно также все работает.

Re: Совместить два скрипта

если необходимо выделять всю строку, тогда так:

procedure Form1_TableGrid2_OnChange (Sender: string);
/////// Цвет фона ячейки грида при условии /////////////
var
    i,c: integer;
    k,q: integer; 
    sDate: string;
begin
    c := Form1.TableGrid2.RowCount - 1;
    q := Form1.TableGrid2.Columns.Count - 1;
    for i := 0 to c do
    begin
        sDate := Form1.TableGrid2.Cells[5,i];
        if (StrToDate(sDate) - now) < 1 then for k := 0 to q do Form1.TableGrid2.Cell[k,i].Color := $007175BD
        else if (StrToDate(sDate) - now) < 3 then for k := 0 to q do Form1.TableGrid2.Cell[k,i].Color := clYellow
        
        
        if Form1.TableGrid2.Cells[4,i] = 'Нет' then for k := 0 to q do Form1.TableGrid2.Cell[k,i].Color := clGray;        
    end;
end;


по поводу цвета ячейки, скорей всего вы имеете ввиду, что цвет ячейки перекрывается цветом выделенной записи (когда запись выделена мышкой), поэтому можете просто убирать выделение записи так: Form1.GridPhones.SelectedRow := -1;

procedure Form1_table_clients_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
    Form1.bPhones.Click;
    Form1.bEmails.Click;
    Form1.GridPhones.SelectedRow := -1;
end;
Dmitry.

6 (edited by Nilaus 2015-06-03 09:57:32)

Re: Совместить два скрипта

Спасибо!
Конечно не очень удобно выделение строки убирать, т.к. на этом было построен поиск, ну да ладно.

Со строками получилось, в том числе и по условию наличия данных в ячейке. При таком коде серым окрашивается в первую очередь, как и нужно.

/////// Цвет фона ячейки грида при условии /////////////
procedure Form1_TableGrid2_OnChange (Sender: string);
var
    i,c: integer;
    k,q: integer; 
    sDate: string;
begin
    c := Form1.TableGrid2.RowCount - 1;
    q := Form1.TableGrid2.Columns.Count - 1;
    for i := 0 to c do
    begin
        sDate := Form1.TableGrid2.Cells[5,i];
        if Form1.TableGrid2.Cells[9,i] <>'' then for k := 0 to q do Form1.TableGrid2.Cell[k,i].Color := clGray
        else if (StrToDate(sDate) - now) < 1 then for k := 0 to q do Form1.TableGrid2.Cell[k,i].Color := $007175BD
        else if (StrToDate(sDate) - now) < 3 then for k := 0 to q do Form1.TableGrid2.Cell[k,i].Color := clYellow

    end;
end;