Simple-Scada forum

Simple-Scada 2 => Ваши вопросы => Тема начата: Сергей Парамонов от 10 Февраля 2025, 14:50:28

Название: В таблице ячейку сделать кнопкой
Отправлено: Сергей Парамонов от 10 Февраля 2025, 14:50:28
Добрый день. Просьба помочь. Запутался маленько.
Задача в Таблице сделать кнопку в ячейке и записывать в бит.
Само отображение кнопки сделал.
Скрипт
Код: (delphi)
var
  s: String;
  col: Cardinal;
begin
  // Вкл-Выкл
  if GetBit(Proba.AsInt, 0) = false then
  begin
    s := 'Выкл';
    col := clGreen;
  end
  else
  begin
    s := 'Вкл';
    col := clRed;
  end;
  Table1.GetCell(3, 1).Text := s;
  Table1.GetCell(3, 1).Color := col;
end.
Название: Re: В таблице ячейку сделать кнопкой
Отправлено: pan2000 от 11 Февраля 2025, 14:17:22
  Здравствуйте.
Последовательность действий для кнопки с инвертированием состояния:
- проверить что выбранная по клику ЛКМ ячейка это именно кнопка (варианты: переключение точно по кнопке или по строке);
- инвертировать бит переменной определяющий состояние кнопки (переменная привязана к дополнительной переменной ячейки);
- изменить индикацию кнопки-ячейки по состоянию бита.
Скрипт по событию OnCellClick:
Код: (delphi)
begin
  with Cell do
  begin
    if (Col <> 3) or (Row <> 1) then exit;                // клик ЛКМ не на кнопке - выход
    VariableEx.Value := InverseBit(VariableEx.Value, 0);  // инвертировать бит
    if GetBit(VariableEx.AsInt, 0) then                   // изменить индикацию кнопки-ячейки
    begin                                                 //  по текущему состоянию бита
      Text := 'Выкл';
      Color := clGreen;
    end
    else
    begin
      Text := 'Вкл';
      Color := clRed;
    end;
  end;
end.
В редакторе должны быть установлены цвет и текст ячейки в соответствии с начальным состоянием бита переменной.

При большом количестве кнопок проверка принадлежности ячейки к множеству кнопок становится весьма громоздкой. Для упрощения можно использовать определенные соглашения:
- дополнительная переменная есть только у кнопок;
- оператор case по выражению (Col * 10000 + Row) с возможностью выбора номера бита переменной (пример во вложении), и т.д.