Страница 1 из 1

подскажите по CheckBox

Добавлено: 16 июл 2010, 17:10
Alex_R
CheckBox описан следующим образом:

Код: Выделить всё

FIELDS
  aCheckBoxButton:['.'], noProtect;   
<<
 `CheckButton`
     [.] Чек-1`
     [.] Чек-2`
     [.] чек-3`
>>
подскажите как узнать в какой из позиций в данный момент былы поставленна/убрана галочка. Тоесть нужно сделать обработчик для каждого "Чек-" реагирующий на установку снятие выбора.

Re: подскажите по CheckBox

Добавлено: 16 июл 2010, 17:26
edward_K
(aCheckBoxButton and 1)>0
(aCheckBoxButton and 2)>0
(aCheckBoxButton and 4)>0
(aCheckBoxButton and 8 )>0
и так далее побитовое сравнение
что было до этого можно узнать в cmCheckField с помощью OldFieldValue, но проще обработать все галки.

Re: подскажите по CheckBox

Добавлено: 16 июл 2010, 17:36
galover
Можно так

Код: Выделить всё

var _oldValue : word;

cmInit: _oldValue := aCheckBoxButton;

cmCheckField:
{
   if (CurField() = #aCheckBoxButton)
   {
      case (aCheckBoxButton xor _oldValue) of
         1: // Чек-1
         2: // Чек-2
         4: // Чек-3
      end;
    
      _oldValue := aCheckBoxButton;
   }
}

Re: подскажите по CheckBox

Добавлено: 16 июл 2010, 19:37
Alex_R
спасибо огромное

Re: подскажите по CheckBox

Добавлено: 19 июл 2010, 12:26
Maverick
Ну собственно еще один возможный экзотический вариант :-)

Код: Выделить всё

FIELDS
  aCheckBoxButton;   
<<
`CheckButton`
     [.] Чек-1`
     [.] Чек-2`
     [.] чек-3`
...
     [.] чек-N`

>>

...

(If aCheckBoxButton and 1) = 1 then {..};
(If aCheckBoxButton and 2) = 2 then {..};
(If aCheckBoxButton and 4) = 4 then {..};

(If aCheckBoxButton and N) = N then {..};

Re: подскажите по CheckBox

Добавлено: 19 июл 2010, 12:46
Алексей
а я их всегда на разные переменные вешал :grin:

Re: подскажите по CheckBox

Добавлено: 20 июл 2010, 20:05
Screw
Если важно выполнить некие действия по факту изменения значения какого-то из чек-боксов, то годится лишь вариант с XOR.

Re: подскажите по CheckBox

Добавлено: 22 июл 2011, 12:18
BlazeBio
1.Есть ли ограничения по использованию в одном CheckBox "птичек"? Как понял предел-таки есть, так как для обработки используется маска 2 в степени (n-1), где n-номер "птички" в текущем CheckBox.
2.Неужели нельзя было сделать что-то вроде счётчика "птичек"?

Re: подскажите по CheckBox

Добавлено: 22 июл 2011, 13:00
galover
1.Есть ли ограничения по использованию в одном CheckBox "птичек"? Как понял предел-таки есть, так как для обработки используется маска 2 в степени (n-1), где n-номер "птички" в текущем CheckBox.
хз, сколько там реально переключателей вставится, но теоретически можно столько, сколько бит в comp, т.е. 64. Если не хватит, то можно на следующие 64 переключателя завести отдельный параметр типа comp и так далее.
2.Неужели нельзя было сделать что-то вроде счётчика "птичек"?
Т.е. массив выбранных значений что ли? А чем наложение маски не устраивает?

Re: подскажите по CheckBox

Добавлено: 22 июл 2011, 13:23
Semi-bit
galover писал(а):

Код: Выделить всё

      case (aCheckBoxButton xor _oldValue) of
         1: // Чек-1
         2: // Чек-2
         4: // Чек-3
      end;
Что-то мне подсказывает, что если в один момент галочки не были выбраны, а в другой, например, 3 и 1 сразу щёлкнули, то XOR даст значение 5 (3,6,7 при других комбинациях галочек) в момент вызова cmCheckField (если не ошибаюсь, она вызывается при покидании поля). По крайней мере, по Ctrl-F4 можно такое провернуть.

Re: подскажите по CheckBox

Добавлено: 22 июл 2011, 14:27
galover
Что-то мне подсказывает, что если в один момент галочки не были выбраны, а в другой, например, 3 и 1 сразу щёлкнули, то XOR даст значение 5 (3,6,7 при других комбинациях галочек) в момент вызова cmCheckField (если не ошибаюсь, она вызывается при покидании поля). По крайней мере, по Ctrl-F4 можно такое провернуть.
Нет, не так. cmCheckField возникает сразу после щелчка. Это можно убедиться написав простенький код, или посмотреть как работают аналогичные переключатели в стандартных интерфейсах Галактики. Например, интерфейс: подсистема УТОРО\Настройка\Настройка прав доступа к объектам ремонта -> там сразу после щелчка появляется скрытое поле рядом с переключателем, без всякого ухода с поля переключателя.

Re: подскажите по CheckBox

Добавлено: 22 июл 2011, 15:09
KATZ
BlazeBio писал(а):Есть ли ограничения по использованию в одном CheckBox "птичек"?
Раньше в документации прямо было написано, что поля для флажков и радиокнопок должны быть с типом Word. Сейчас такого не нашел, но косвенно про размерность можно судить по типу параметра mask в функции ClusterDisabledField:
Издание 05.10.2009
В процедуре ClusterDisabledField исправлен тип параметра mask с word на longInt.
Так что предел - 32. ИМХО, этого более чем достаточно, да и 16 хватало.