Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Таблица. Новые возможности. Предложение  (Прочитано 959 раз)

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Добрый день!
Служба эксплуатации задала вопрос. Можно ли в одной таблице выделить нужную строку, а во второй таблице выделить соответствующую.
Количество строк в обоих таблицах одинаково и если выбрали 7 строку в первой таблице, то во второй таблице должна выделиться 7 строка.
То есть если у нас в таблицах 3..4 строки отследить их не проблема.
Но если строк больше начинают юзеры путаться.
Игры с чередованием строк (цветом и прозрачностью) им особо не помогла (по их утверждениям). Вот отсюда и вопросы и предложения:
1. В будущем будет ли добавлена функция отслеживания состояния привязанной таблицы в выбранной таблице (надеюсь понятно)
2. Или добавлено свойство "Выделить строку номер ХХХ", которое можно менять в скриптах
Жду вопросов и предложений.

pan2000

  • Постоялец
  • ***
  • Сообщений: 171
    • Просмотр профиля
   Здравствуйте!

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

- для таблиц с полосой прокрутки изменением цвета ячеек. Скрипт по событию "Пользователь кликнул ячейку":
Код: (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. Форматирование "вправо,  ..." для строк, выходящих за размер соответствующего столбца.
Условно, урезанием строки слева, но несколько проблематично для не моноширинного шрифта.
« Изменён: 11 Июня 2020, 03:25:23 от pan2000 »

Серега

  • Постоялец
  • ***
  • Сообщений: 209
    • Просмотр профиля
Добрый день!
Спасибо! Буду на выходных экспериментировать.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3000
    • Просмотр профиля
    • Simple-Scada
Цитировать
1. Добавить свойство смещение, определяющее сдвиг между началом данных и первой строкой экранной формы таблицы.
На сервере у компонента "Таблица" смещение не существует, поэтому вынести его как свойство не получится. Смещение есть на клиентах, причем в один момент времени оно может быть разным на каждом клиенте.