Есть задача : Одной кнопкой устанавливать переменную только в 1, второй только в 0 (Старт, Стоп).
Но отображать нужно два сотояния и на той и на другой кнопке, т.е. нажал "Старт" и кнопка старт подсветилась, а кнопка "Стоп" погасла и наоборот.
Не нашел простого решения , может подкажете как это сделать без скриптов?
Возможно то, что Вам нужно, но со скриптом.
Для включения-выключения используются связанные с одной переменной кнопки "Run" и "Stop", с фиксацией и двумя состояниями.
Иконка и надпись на кнопке одинаковы для обоих состояний каждой кнопки, цвет отпущенного состояния кнопок - серый, нажатого - зеленый для кнопки "Run" и красный для "Stop". Тег кнопки "Run" = 1, кнопки "Stop" = 0.
Для блокировки обратного переключения при повторном нажатии кнопки можно использовать коррекцию переменной или управление доступностью кнопки.
Скрипт по событию "Пользователь кликнул объект мышью":
// это скрипт для коррекции переменной
xVarForButton.Value := Sender.Tag;
// это скрипт для управления доступностью
Button1.Enabled := Sender.Tag <> 1; // кнопка "Run"
Button2.Enabled := Sender.Tag = 1; // кнопка "Stop"
Во вложении пример с обоими скриптами. Для справки показан список событий, происходящих по нажатию кнопок.
Может кому пригодится маленький скрипт для цветовой индикации срабатывания кнопок с фиксацией и одним состоянием, о которых тут шла речь. Скрипт универсальный, нужно только привязать его к каждой из кнопок, на событие "OnDataChange".
И разумеется кнопки должны быть привязаны к общей глобальной переменной.
var
button: TM_Button;
begin
// цветовая индикация действующего режима кнопок
button:= Sender as TM_Button;
if button.States[0].Value = button.Variable.Value then
button.States[0].Color:= clLimeGreen // цвет активной кнопки
else
button.States[0].Color:= clGray; // цвет неактивной кнопки
end.