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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Alex_R
Сообщения: 10
Зарегистрирован: 24 июн 2010, 13:45

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

Сообщение Alex_R »

CheckBox описан следующим образом:

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

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

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

Сообщение edward_K »

(aCheckBoxButton and 1)>0
(aCheckBoxButton and 2)>0
(aCheckBoxButton and 4)>0
(aCheckBoxButton and 8 )>0
и так далее побитовое сравнение
что было до этого можно узнать в cmCheckField с помощью OldFieldValue, но проще обработать все галки.
Последний раз редактировалось edward_K 16 июл 2010, 17:29, всего редактировалось 1 раз.
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

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

Сообщение 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;
   }
}
Alex_R
Сообщения: 10
Зарегистрирован: 24 июн 2010, 13:45

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

Сообщение Alex_R »

спасибо огромное
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

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

Сообщение 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 {..};
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

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

Сообщение Алексей »

а я их всегда на разные переменные вешал :grin:
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

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

Сообщение Screw »

Если важно выполнить некие действия по факту изменения значения какого-то из чек-боксов, то годится лишь вариант с XOR.
Виталий
BlazeBio
Местный житель
Сообщения: 386
Зарегистрирован: 27 апр 2010, 14:31
Контактная информация:

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

Сообщение BlazeBio »

1.Есть ли ограничения по использованию в одном CheckBox "птичек"? Как понял предел-таки есть, так как для обработки используется маска 2 в степени (n-1), где n-номер "птички" в текущем CheckBox.
2.Неужели нельзя было сделать что-то вроде счётчика "птичек"?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

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

Сообщение galover »

1.Есть ли ограничения по использованию в одном CheckBox "птичек"? Как понял предел-таки есть, так как для обработки используется маска 2 в степени (n-1), где n-номер "птички" в текущем CheckBox.
хз, сколько там реально переключателей вставится, но теоретически можно столько, сколько бит в comp, т.е. 64. Если не хватит, то можно на следующие 64 переключателя завести отдельный параметр типа comp и так далее.
2.Неужели нельзя было сделать что-то вроде счётчика "птичек"?
Т.е. массив выбранных значений что ли? А чем наложение маски не устраивает?
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

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

Сообщение 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 можно такое провернуть.
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

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

Сообщение galover »

Что-то мне подсказывает, что если в один момент галочки не были выбраны, а в другой, например, 3 и 1 сразу щёлкнули, то XOR даст значение 5 (3,6,7 при других комбинациях галочек) в момент вызова cmCheckField (если не ошибаюсь, она вызывается при покидании поля). По крайней мере, по Ctrl-F4 можно такое провернуть.
Нет, не так. cmCheckField возникает сразу после щелчка. Это можно убедиться написав простенький код, или посмотреть как работают аналогичные переключатели в стандартных интерфейсах Галактики. Например, интерфейс: подсистема УТОРО\Настройка\Настройка прав доступа к объектам ремонта -> там сразу после щелчка появляется скрытое поле рядом с переключателем, без всякого ухода с поля переключателя.
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

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

Сообщение KATZ »

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