1 (edited by zoomix 2015-03-04 18:07:35)

Topic: Грид и цвет

Доброго всем вечера!

Есть некий грид из нескольких столбцов,  в который выводится инфа из таблиц, которая периодически обновляется и просматривается оператором. Инфы много, есть повторения по строкам, отслеживать и сортировать их взглядом, то, что уже просмотрел, скажем вчера - утомительно и нужно либо запоминать, что уже смотрел, либо как-то помечать отсмотренное цветом, чтобы к нему больше не возвращаться взглядом.
Нужно - помечать старую инфу цветом для разделения уже просмотренной инфы от новой (идеальный вариант - провести правой кнопкой мышки по строкам и они тут же отметились другим цветом, а левой - можно отменить закрашивание (как при копировании текста)), либо использовать возле каждой строки чекбоксы и отмечать каждую просмотренную строку галочкой с окрашиванием такой строки в др.цвет.
Посоветуйте, как решить такую задачу, плз!
Закрашивание по времени (типа 5 дней назад - все строки красные и т.п.) - не особо подходит, т.к. инфа может уже устаревать и 3-5 раз за сегодня, а может и быть актуальной несколько дней.
Т.е. лучше, чтобы оператор сам решал, какая инфа старая, а какая - нет и сам отмечал старые строки цветом.

Re: Грид и цвет

Приветствую,


Сделал для вас пример, с помощью мышки, удерживая Ctrl, можете устанавливать и снимать цветовое выделение, также это сохраняется в базе данных.

Post's attachments

Attachment icon Employees save colors in grid.zip 6.69 kb, 519 downloads since 2015-03-05 

Dmitry.

Re: Грид и цвет

Спасибо, гляну!

Re: Грид и цвет

Увы - не для 1.46, ругается на функцию dbIndexToID, видимо нет в 1.46 и поэтому невозможно проверить.
Но все равно, спасибо

Re: Грид и цвет

попробуйте заменить этот участок кода

procedure Form1_GridEmployees_OnChange (Sender: string);
var
   i,c, id: integer;
   s: string;
begin
     c := Form1.GridEmployees.RowCount - 1;
     for i := 0 to c do
     begin
         Form1.GridEmployees.SelectedRow:=i;
         id := Form1.GridEmployees.dbItemID;

         s := SQLExecute('SELECT marked FROM employees WHERE id='+IntToStr(id));
         if s = '1' then Form1.GridEmployees.Cell[0, i].Color := clRed;
     end;
end;
Dmitry.

Re: Грид и цвет

Окей, сейчас попробую, спасибо!

Re: Грид и цвет

Чуть задышало, появился красный цвет, но спотыкается на .sqlValue на следующей процедуре:


procedure Form1_GridEmployees_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
    if Ctrl then
    begin
        if Form1.GridEmployees.Cell[0, Form1.GridEmployees.SelectedRow].Color <> clRed then
        begin
            Form1.GridEmployees.Cell[0, Form1.GridEmployees.SelectedRow].Color := clRed;
            SQLExecute ('UPDATE employees SET marked=1 WHERE id='+Form1.GridEmployees.sqlValue);
        end else
        begin
            Form1.GridEmployees.Cell[0, Form1.GridEmployees.SelectedRow].Color := clWindow;
            SQLExecute ('UPDATE employees SET marked=0 WHERE id='+Form1.GridEmployees.sqlValue);
        end;

Re: Грид и цвет

и этот тоже замените на

procedure Form1_GridEmployees_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
    if Ctrl then
    begin
        if Form1.GridEmployees.Cell[0, Form1.GridEmployees.SelectedRow].Color <> clRed then
        begin
            Form1.GridEmployees.Cell[0, Form1.GridEmployees.SelectedRow].Color := clRed;
            SQLExecute ('UPDATE employees SET marked=1 WHERE id='+IntToStr(Form1.GridEmployees.dbItemID));
        end else
        begin
            Form1.GridEmployees.Cell[0, Form1.GridEmployees.SelectedRow].Color := clWindow;
            SQLExecute ('UPDATE employees SET marked=0 WHERE id='+IntToStr(Form1.GridEmployees.dbItemID));
        end;
    end;
end;
Dmitry.

Re: Грид и цвет

ок, спасибо!

Re: Грид и цвет

Работает! Супер!!!! Спасибо!!!