Здравствуйте.
Последовательность действий для кнопки с инвертированием состояния:
- проверить что выбранная по клику ЛКМ ячейка это именно кнопка (варианты: переключение точно по кнопке или по строке);
- инвертировать бит переменной определяющий состояние кнопки (переменная привязана к дополнительной переменной ячейки);
- изменить индикацию кнопки-ячейки по состоянию бита.
Скрипт по событию OnCellClick:
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) с возможностью выбора номера бита переменной (пример во вложении), и т.д.