1 (edited by Vickus 2020-03-18 10:02:41)

Topic: Окраска строки таблицы по условию

Добрый день!
Подскажите скрипт для окраски последней записи в таблице.
Есть скрипт, позволяющий окрашивать строку по условию, но не знаю как сделать, чтобы он работал только по самой последней записи.

procedure Frm_main_t2_OnChange (Sender: TObject);
var
    i,f,r,c: integer;
begin
    c := Frm_main.t2.Columns.Count - 1;
    r := Frm_main.t2.RowCount - 1;
    for i := 0 to r do
begin
    if Frm_main.t2.Cells[8,i] = 'задолженность' then
    begin
    for f := 0 to c do
    Frm_main.t2.Cell[f,i].Color := $006B8DE7;
    Frm_main.t2.ScrollToRow(0);
    end;
end;
end;

Post's attachments

Attachment icon vickus.jpg 129.58 kb, 119 downloads since 2020-03-18 

2 (edited by sibprogsistem 2020-03-18 10:55:14)

Re: Окраска строки таблицы по условию

var
i,c:Integer;
begin
  c:= Form1.TableGrid1.RowCount-1;
   if  Form1.TableGrid1.Cells[1,c]= 'задолженность'  then   Form1.TableGrid1.Cell[1,c].Color := $006B8DE7;

Re: Окраска строки таблицы по условию

Что именно вы имеете ввиду под последней? Просто последняя строчка в компоненте? или последняя созданная запись?

Dmitry.

Re: Окраска строки таблицы по условию

DriveSoft wrote:

Что именно вы имеете ввиду под последней? Просто последняя строчка в компоненте? или последняя созданная запись?

последняя созданная

Re: Окраска строки таблицы по условию

sibprogsistem wrote:
var
i,c:Integer;
begin
  c:= Form1.TableGrid1.RowCount-1;
   if  Form1.TableGrid1.Cells[1,c]= 'задолженность'  then   Form1.TableGrid1.Cell[1,c].Color := $006B8DE7;

Я так понял, что Вы оптимизировали код скрипта, но мне нужно, чтобы он применялся только для последней созданной записи

Re: Окраска строки таблицы по условию

примените тоже самое только для строки row

Re: Окраска строки таблицы по условию

sibprogsistem wrote:

примените тоже самое только для строки row

Вставил Ваш код - он выделил цветом последнюю ячейку с надписью "Задолженность".
Можете полностью код выложить. К сожалению, я не специалист, только пытаюсь научиться. Спасибо.

Re: Окраска строки таблицы по условию

Пример

procedure frmEmployee_bOK_OnClick (Sender: TObject; var Cancel: boolean);
begin
    frmEmployee.bOK.TagString := frmEmployee.dbAction;
end;


procedure frmEmployee_bOK_OnAfterClick (Sender: TObject);
begin
    if frmEmployee.bOK.TagString = 'NewRecord' then
    begin
        Form1.GridEmployees.dbItemID := frmEmployee.bOK.dbGeneralTableId;
        Form1.GridEmployees.ScrollToRow(Form1.GridEmployees.SelectedRow);
        if Form1.GridEmployees.CanFocus then Form1.GridEmployees.SetFocus;
    end;
end;
Dmitry.

Re: Окраска строки таблицы по условию

Vickus wrote:
sibprogsistem wrote:
var
i,c:Integer;
begin
  c:= Form1.TableGrid1.RowCount-1;
   if  Form1.TableGrid1.Cells[1,c]= 'задолженность'  then   Form1.TableGrid1.Cell[1,c].Color := $006B8DE7;

Я так понял, что Вы оптимизировали код скрипта, но мне нужно, чтобы он применялся только для последней созданной записи

procedure Form1_TableGrid1_OnChange (Sender: TObject);
var
i,c, col:Integer;
begin
  c:= Form1.TableGrid1.RowCount-1;  // колл строк
  col:= Form1.TableGrid1.Columns.Count-1; // колл колонок

   if  Form1.TableGrid1.Cells[1,c]= 'задолженность'  then   // если во 2-й колонке последней записи есть слово задолженность
     begin
       for i:=0 to col do  // проходим по всем колонкам
           Form1.TableGrid1.Cell[i,c].Color := $006B8DE7; // присвеваем цвет ячейкам в каждай колонке в последней строке
     end;
end;

Re: Окраска строки таблицы по условию

Большое спасибо за помощь и за пошаговые разъяснения

Re: Окраска строки таблицы по условию

sibprogsistem wrote:
Vickus wrote:
sibprogsistem wrote:
var
i,c:Integer;
begin
  c:= Form1.TableGrid1.RowCount-1;
   if  Form1.TableGrid1.Cells[1,c]= 'задолженность'  then   Form1.TableGrid1.Cell[1,c].Color := $006B8DE7;

Я так понял, что Вы оптимизировали код скрипта, но мне нужно, чтобы он применялся только для последней созданной записи

procedure Form1_TableGrid1_OnChange (Sender: TObject);
var
i,c, col:Integer;
begin
  c:= Form1.TableGrid1.RowCount-1;  // колл строк
  col:= Form1.TableGrid1.Columns.Count-1; // колл колонок

   if  Form1.TableGrid1.Cells[1,c]= 'задолженность'  then   // если во 2-й колонке последней записи есть слово задолженность
     begin
       for i:=0 to col do  // проходим по всем колонкам
           Form1.TableGrid1.Cell[i,c].Color := $006B8DE7; // присвеваем цвет ячейкам в каждай колонке в последней строке
     end;
end;

Появился вопрос.
Если записей нет, то скрипт выдает ошибку. Можно ли как-то изменить скрипт, чтобы ошибка не появлялась, либо выходило сообщение, что записей нет?
Еще раз спасибо.

Re: Окраска строки таблицы по условию

Vickus wrote:

Появился вопрос.
Если записей нет, то скрипт выдает ошибку. Можно ли как-то изменить скрипт, чтобы ошибка не появлялась, либо выходило сообщение, что записей нет?
Еще раз спасибо.

поместите код в этот блок

if Form1.TableGrid1.RowCount > 0   then begin
здесь код
end;

Re: Окраска строки таблицы по условию

sibprogsistem wrote:
Vickus wrote:

Появился вопрос.
Если записей нет, то скрипт выдает ошибку. Можно ли как-то изменить скрипт, чтобы ошибка не появлялась, либо выходило сообщение, что записей нет?
Еще раз спасибо.

поместите код в этот блок

if Form1.TableGrid1.RowCount > 0   then begin
здесь код
end;

Простите, что сразу не ответил. Не пойму куда это условие вставить.
Вот мой код:
procedure Frm_main_t2_OnChange (Sender: TObject);
var
i,c, col:Integer;
begin
  c := Frm_main.t2.RowCount-1;  // количество строк
  col := Frm_main.t2.Columns.Count-1; // количество колонок

   if  Frm_main.t2.Cells[8,c] = 'задолженность'  then   // если во 2-й колонке последней записи есть слово задолженность
     begin
       for i := 0 to col do  // проходим по всем колонкам
           Frm_main.t2.Cell[i,c].Color := $006B8DE7; // присваиваем цвет ячейкам в каждой колонке в последней строке
     end;
end;

Re: Окраска строки таблицы по условию

procedure Frm_main_t2_OnChange (Sender: TObject);
var
i,c, col:Integer;
begin
  c := Frm_main.t2.RowCount-1;  // количество строк
  col := Frm_main.t2.Columns.Count-1; // количество колонок

if Form1.TableGrid1.RowCount > 0   then begin
   if  Frm_main.t2.Cells[8,c] = 'задолженность'  then   // если во 2-й колонке последней записи есть слово задолженность
     begin
       for i := 0 to col do  // проходим по всем колонкам
           Frm_main.t2.Cell[i,c].Color := $006B8DE7; // присваиваем цвет ячейкам в каждой колонке в последней строке
     end;
end;
end;

Re: Окраска строки таблицы по условию

sibprogsistem wrote:
procedure Frm_main_t2_OnChange (Sender: TObject);
var
i,c, col:Integer;
begin
  c := Frm_main.t2.RowCount-1;  // количество строк
  col := Frm_main.t2.Columns.Count-1; // количество колонок

if Form1.TableGrid1.RowCount > 0   then begin
   if  Frm_main.t2.Cells[8,c] = 'задолженность'  then   // если во 2-й колонке последней записи есть слово задолженность
     begin
       for i := 0 to col do  // проходим по всем колонкам
           Frm_main.t2.Cell[i,c].Color := $006B8DE7; // присваиваем цвет ячейкам в каждой колонке в последней строке
     end;
end;
end;

БОЛЬШОЕ СПАСИБО!

16 (edited by Serenada 2024-04-12 05:30:34)

Re: Окраска строки таблицы по условию

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

procedure uzsakymas_result_OnChange (Sender: string);
var
   i,c: integer;
begin
   uzsakymas.result.BeginUpdate;
   c := uzsakymas.result.RowCount - 1;
   for i := 0 to c do
   begin
      if uzsakymas.result.Cells[8,i] = 'Pristatyta' then uzsakymas.result.Cell[8,i].Color := clRed;
      if uzsakymas.result.Cells[8,i] = 'Užsakyta' then uzsakymas.result.Cell[8,i].Color := clGreen;
      if uzsakymas.result.Cells[8,i] = 'Ieškoma' then uzsakymas.result.Cell[8,i].Color := clBlue;
   end;
   uzsakymas.result.EndUpdate;
end;

begin
end.
Post's attachments

Attachment icon 2024-04-12 08_21_06-Medžiagos užsakymas 1.3 beta.png 79.79 kb, 3 downloads since 2024-04-12 

Re: Окраска строки таблицы по условию

Проверьте правильность имени события OnChange в свойствах таблицы.

P.S.
What BeginUpdate do?
This call prevent NextGrid from drawing EACH new or changed Cell until operation is finished. Also all complicated calculations needed for drawing Cell is skiped too. This can speed up your code a lot!

We will draw this rows ONLY after we finish with operation, and ONLY we will draw visible Cells on screen. After you finish with adding rows, ALLWAYS call EndUpdate.