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

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

Автор Тема: В таблице ячейку сделать кнопкой  (Прочитано 321 раз)

Сергей Парамонов

  • Новичок
  • *
  • Сообщений: 1
    • Просмотр профиля
В таблице ячейку сделать кнопкой
« : 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.
« Изменён: 10 Февраля 2025, 14:58:28 от Simple Scada »

pan2000

  • Постоялец
  • ***
  • Сообщений: 210
    • Просмотр профиля
Re: В таблице ячейку сделать кнопкой
« Ответ #1 : 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) с возможностью выбора номера бита переменной (пример во вложении), и т.д.