Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Серега от 10 Июня 2020, 14:42:50

Название: Таблица. Новые возможности. Предложение
Отправлено: Серега от 10 Июня 2020, 14:42:50
Добрый день!
Служба эксплуатации задала вопрос. Можно ли в одной таблице выделить нужную строку, а во второй таблице выделить соответствующую.
Количество строк в обоих таблицах одинаково и если выбрали 7 строку в первой таблице, то во второй таблице должна выделиться 7 строка.
То есть если у нас в таблицах 3..4 строки отследить их не проблема.
Но если строк больше начинают юзеры путаться.
Игры с чередованием строк (цветом и прозрачностью) им особо не помогла (по их утверждениям). Вот отсюда и вопросы и предложения:
1. В будущем будет ли добавлена функция отслеживания состояния привязанной таблицы в выбранной таблице (надеюсь понятно)
2. Или добавлено свойство "Выделить строку номер ХХХ", которое можно менять в скриптах
Жду вопросов и предложений.
Название: Re: Таблица. Новые возможности. Предложение
Отправлено: pan2000 от 11 Июня 2020, 00:22:54
   Здравствуйте!

Синхронную подсветку строки в нескольких таблицах можно реализовать двумя способами:

- для таблиц с полосой прокрутки изменением цвета ячеек. Скрипт по событию "Пользователь кликнул ячейку":
Код: (delphi)
const nTables = 4;      // число таблиц с однотипными последовательно нумеруемыми именами
var i, j, k, l: integer;
begin
  i := Cell.Row;        // индекс новой строки
  j := Table1.Tag;      // индекс подсвеченной строки. Начальное значение -1
  if i = j then exit;
  Table1.Tag := i;      // хранение индекса подсвеченной строки (можно и в виртуальной переменной).

  for l := 1 to nTables do
    with GetTableByName('Table' + IntToStr(l)) as TM_Table do begin
      if j >= 0 then for k := 0 to ColumnsCount - 1 do GetCell(k, j).Color := $6D6D6D;  // удалить подсветку
      for k := 0 to ColumnsCount - 1 do GetCell(k, i).Color := clMediumTurquoise;       // подсветить
    end;
end.
В данной реализации теряется исходная информация о цвете ячейки. Есть несколько вариантов восстановления цвета - вычисление по индексам, подсветка части ячеек и т.д.

- для таблиц без полосы прокрутки - позиционированием подсвечивающего объекта над/под таблицей. Скрипт для двух таблиц:
Код: (delphi)
const Y5 = 128; Y6 = 176;      // Y-координаты верхней строки таблиц  (Свойство Y у обоих таблиц = 88 ! )
var i: integer;
begin
  i := Cell.Row;        // индекс новой строки
  Text1.Y := Y5 + i * Table5.RowHeight;
  Text2.Y := Y6 + i * Table6.RowHeight;
end.
Объект над таблицей блокирует доступ к таблице, под - требует наличие прозрачности у таблицы (либо торчащие "уши" объекта шире таблицы).
Для выделения строки контуром можно применить объект "Линия" над таблицей.
Примеры во вложении.

Предложения - см.
Замечания и пожелания по результатам использования объекта "Таблица":

 Раз уж зашла речь о таблице, то могу добавить следующие пожелания (некритично, обходится посредством скриптов, но лучше перевести эти действия в Simple-Scada):

1. Добавить свойство смещение, определяющее сдвиг между началом данных и первой строкой экранной формы таблицы.
Запись смещения заново отображает таблицу на экране со строки смещения.
Сейчас реализовано посредством скрипта и "короткой" экранной таблицы, но возни много - периодическая перезапись из БД или из буферной таблицы.

2. Форматирование "вправо,  ..." для строк, выходящих за размер соответствующего столбца.
Условно, урезанием строки слева, но несколько проблематично для не моноширинного шрифта.
Название: Re: Таблица. Новые возможности. Предложение
Отправлено: Серега от 12 Июня 2020, 14:41:56
Добрый день!
Спасибо! Буду на выходных экспериментировать.
Название: Re: Таблица. Новые возможности. Предложение
Отправлено: Simple-Scada от 15 Июня 2020, 10:59:34
Цитировать
1. Добавить свойство смещение, определяющее сдвиг между началом данных и первой строкой экранной формы таблицы.
На сервере у компонента "Таблица" смещение не существует, поэтому вынести его как свойство не получится. Смещение есть на клиентах, причем в один момент времени оно может быть разным на каждом клиенте.