Форум "Delphi"
Паскаль, Делфи
#0 ID © 14.11.06 12:21:58 - 14.11.06 15:26:17 как отловить изменение TCheckBoxЗдравствуйте! Подскжите, как корректно отловить изменения (переход Checked из true в false и на оборот). Мой вариант: проблема в том, что значение Checked меняется только после отработки события, и решение в этой ситуации я нашел , поставив if not .... Есть ли другое решение?
|
|
Попробуй поиграться со свойством этого компонента - State |
|
#2 Старый маразматик © 14.11.06 12:50:25
вероятно, OnClick? |
|
2#2 Старый маразматик © 14.11.06 15:50:25 Ну... Для этого компонента OnClick как бы, вообще, самое основное событие. НО ! При щелчке на компоненте Checked и State уже приняли новое значение. |
|
#4 Чехонте 14.11.06 13:45:31
может onExit смотреть? |
|
#5 Старый маразматик © 14.11.06 13:50:40
>#3 Румпель © согласен, невнимательно прочел, чего надо. ладно. можно и сложно. смотрим, шо творицца внутри: procedure TCustomCheckBox.SetState(Value: TCheckBoxState); begin if FState <> Value then begin FState := Value; if HandleAllocated then SendMessage(Handle, BM_SETCHECK, Integer(FState), 0); if not ClicksDisabled then Click; end; end; т.е., нам нужно отловить виндозное событие BM_SETCHECK, которое отправленно конкретному чекбоксу, как я понимаю. или написать свою компоненту. |
|
#6 ID © 14.11.06 13:51:49
Всем спасибо. Разобрался. Проблема была не в Checked, а в алгоритме программы. В событии OnClick действительно Checked имеет актуальное значение. |
|
#7 Старый маразматик © 14.11.06 13:53:10
собстна, надо влезть как раз в TCustomCheckBox.SetState, шоб перехватывать изменение состояния. потому как перехватывать смысла нет - оно уже успеет изменицца чуть выше... |
|
2#6 ID © 14.11.06 16:51:49 Я в #3 Румпель © 14.11.06 16:07:08 забыл уже выделить. Прости уж, меня, старого и склерозного |
|
#9 Старый маразматик © 14.11.06 13:54:16
>#6 ID © шоб тебя дождь намочил! |
|
#10 ID © 14.11.06 14:33:01
#9 Старый маразматик © зато узнал много полезного из этого поста :) |
|
#11 Старый маразматик © 14.11.06 14:52:13
>#10 ID © про то, шо в VCL полезно заглядывать? гыгы |
|
эта старинная грабля на самом деле является вполне логичной. кому интересно в обработчике знать старое состояние чека? |
|
#13 ID © 14.11.06 14:58:10
я не помню ситуацию (толи это было с другим компонентом, толи в другой среде разработки VB), но меня перемкнуло, что в событии onClick Checked меняется после отработки события, на этом и зациклился. |
|
#14 ID © 14.11.06 15:02:14
#12 Kortez © действительно старинная грабля, что даже не помню, когда с этим сталкивался, а в голове осело, что там есть какойто подвох :) |
|
#15 Старый маразматик © 14.11.06 15:26:17
меня больше убивало, шо OnExit выполняецца только после того, как фокус уже перешел в другой контрол. хотя, в общем-то понятно, шо другим методом его не выполнишь, но все равно, весьма неудобно проверять введенные значения. поскоку в следующем контроле может стоять своя проверка. а каждую введенную буковку проверять - тоже не выход. короче, без пляски с бубном - ну никак! |
Написать ответ |
|
