Вообще то да. Это увеличивает кол-во функций(кода, относящегося, к управлению, время програмирования/тестировния, багов, (вписать свой вариант)) относящихся к управлению в 2-3 раза по сравнению с обычным вкл/выкл. Ценность сомнительна, проблемы очевидны. Сделать можно, но наверняка никто не хочет возиться, тратить лишнее время и создавать себе лишние проблемы, чтоб пара тройка избранных тумблерочками побаловалась![]()
Ноги, крылья... Главное - хвост!
Хм...ну ты дал. 3 функции ToOn, ToOff, IsOn, в обработчике конпки "вкл" if(!IsOn())ToOn(), в обработчике кнопки "выкл" if(IsOn())ToOff(), а в тожле if (IsOn())ToOff() else ToOn(). Это типа трудно? Могут вылезти лишние баги? Или ты считаешь, что программеры МГ до этого не додумаются?
А вот с синхронизацией и правда тяжело. Хотя если имеется управляющая панель на ЖК, то и не сильно сложно, с "железными" тумблерами конечно практически никак.
Хорошей пропаганды должно быть много!
Что-то у Вас просто слишком.
Вот пример NewView по обработке кнопок.
Пару коментов к коду:
fpkShft1 - пока кнопка удерживается функция отрабатывает в состояние 1.
fpkShft2 - тоже для состояния 2.
fpkTrigger1 - переключатель с состояния 1 в нормальное и обратно
fpkTrigger2 - тоже для состояния 2 и нормального
fpkOn1 - включение состояния 1
fpkOn2 - тоже для 2
fpkOff1 - включение нормального состояния из состояния 1
fpkOff2 - тоже из состояния 2
Ну и fpkOn + fpkOff работают как триггер fpkTrigger.
Итак код функции:
procedure_TFunctionProcessor.Check(var_Functions:_TFunction);
begin
__//_Func1_с_удержанием
__if_Functions[FunctionsID[fpkShft1]]_then
__begin
____OnShift1();
____if_Mode_<>_fpmShft1_then
____begin
______Mode_:=_fpmShft1;
______VValue_:=_fpvFunc1;
____end;
__end
__else
__begin
____//_Func2_с_удержанием
____if_Functions[FunctionsID[fpkShft2]]_then
____begin
______if_Mode_<>_fpmShft2_then
______begin
________Mode_:=_fpmShft2;
________VValue_:=_fpvFunc2;
______end;
____end
____else
____begin
______//_Normal
______if_(Mode_=_fpmShft1_)_or
_________(Mode_=_fpmShft2_)_then
______begin
________Mode_:=_fpmNormal;
________VValue_:=_fpvNormal;
______end;
______//_Func1_trigger
______if_Functions[FunctionsID[fpkTrigger1]]_or
_________(Functions[FunctionsID[fpkOn1]]_and
__________Functions[FunctionsID[fpkOff1]])_then
______begin
________if_(Mode_<>_fpmTrig1On_)_and
___________(Mode_<>_fpmTrig1Off)_then
________begin
__________if_(Mode_<>_fpmOn1)_then
__________begin
____________Mode_:=_fpmTrig1On;
____________VValue_:=_fpvFunc1;
__________end
__________else
__________begin
____________Mode_:=_fpmTrig1Off;
____________VValue_:=_fpvNormal;
__________end;
________end;
______end
______else
______begin_//_Не_Func1_триггер
________//_Сбросить_(преобразовать)_фиксированный_триггер
________if_Mode_=_fpmTrig1On_then
__________Mode_:=_fpmOn1
________else
________if_Mode_=_fpmTrig1Off_then
__________Mode_:=_fpmNormal;
________//_Func1_вкл
________if_Functions[FunctionsID[fpkOn1]]_then
________begin
__________Mode_:=_fpmOn1;
__________VValue_:=_fpvFunc1;
________end;
________if_Functions[FunctionsID[fpkOff1]]_then
________begin
__________Mode_:=_fpmNormal;
__________VValue_:=_fpvNormal;
________end;
______end;_//_Func1_trigger
______//_Func2_trigger
______if_Functions[FunctionsID[fpkTrigger2]]_or
_________(Functions[FunctionsID[fpkOn2]]_and
__________Functions[FunctionsID[fpkOff2]])_then
______begin
________if_(Mode_<>_fpmTrig2On_)_and
___________(Mode_<>_fpmTrig2Off)_then
________begin
__________if_(Mode_<>_fpmOn2)_then
__________begin
____________Mode_:=_fpmTrig2On;
____________VValue_:=_fpvFunc2;
__________end
__________else
__________begin
____________Mode_:=_fpmTrig2Off;
____________VValue_:=_fpvNormal;
__________end;
________end;
______end
______else
______begin_//_Не_Func1_триггер
________//_Сбросить_(преобразовать)_фиксированный_триггер
________if_Mode_=_fpmTrig2On_then
__________Mode_:=_fpmOn2
________else
________if_Mode_=_fpmTrig2Off_then
__________Mode_:=_fpmNormal;
________//_Func1_вкл
________if_Functions[FunctionsID[fpkOn2]]_then
________begin
__________Mode_:=_fpmOn2;
__________VValue_:=_fpvFunc2;
________end;
________if_Functions[FunctionsID[fpkOff2]]_then
________begin
__________Mode_:=_fpmNormal;
__________VValue_:=_fpvNormal;
________end;
______end;_//_Func1_trigger
____end;_//_else_if_Func1
__end;_//_else_if_Shift_Func1
end;
Считаете, что можно сильно упростить?
P.S. А куда индент делся? Заменил пробелы на подчерки.