Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Чекбокс, отмечающийся программно / 24 сообщений из 24, страница 1 из 1
22.10.2019, 11:16
    #39879769
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Нужно, чтобы чекбокс реагировал на событие нажатия мышкой, но не отождествлял это с проставлением галочки.
Есть чекбокс на форме, Readonly. Его нажимать есть права не у всех пользователей.
При нажатии проверяется, разрешенный ли это пользователь, и если да, то в базу записывается новое значение, а чекбоксу после этого программно проставляем или снимаем галку, в зависимости от нового значения, записанного в базу.

Но он так не работает. Если делаешь Readonly, то перестает реагировать на мышь вообще, соответственно событие OnClick не срабатывает.

Пробовал событие OnMouseDown, тоже что-то криво получается.

Пробовал даже извращаться, поверх чекбокса класть прозрачный TImage и весить событие на него. Но он почему-то не помещается Bring to front. При нажатии на него реагирует чекбокс. Да и не удобно это.
...
Рейтинг: 0 / 0
22.10.2019, 11:25
    #39879776
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
каша в логике или в программном дизайне программы. делай чекбокс Readonly у всех пользователей, которым нельзя его нажимать. в OnClick пиши в базу данные, этого должно быть достаточно.
...
Рейтинг: 0 / 0
22.10.2019, 11:31
    #39879782
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvlad,

перед установкой просто OnClick в nil установи, а потом верни обработчик назад
...
Рейтинг: 0 / 0
22.10.2019, 12:02
    #39879808
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
kealon(Ruslan),
разобрался уже, повесил на OnMouseDown все.
...
Рейтинг: 0 / 0
22.10.2019, 12:06
    #39879812
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
makhaonкаша в логике или в программном дизайне программы. делай чекбокс Readonly у всех пользователей, которым нельзя его нажимать. в OnClick пиши в базу данные, этого должно быть достаточно.
Там например такая вещь: Кликаешь по чекбоксу подтверждения всей ведомости, он должен проверить сначала, что подтверждена каждая строка ведомости (чекбокс строки), и если не все строки подтверждены, то состояние ведомости не меняется, а выдается сообщение "Не все строки подтверждены, сначала подтвердите все строки". Так что весить событие на OnClick не очень хорошо, т.к. там галочка сразу проставится, и ее надо будет убирать программно, опять вызовется OnClick, и так по кругу.
...
Рейтинг: 0 / 0
22.10.2019, 12:10
    #39879815
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
makhaon, и еще нюанс, перестраховка, но теоретически может возникнуть:
если записываем в базу после отметки, то не факт, что в базу данные еще записались, а галка уже стоит, пользователь думает, что записались.
У меня сначала записывается в базу, а потом уже форма перечитывается из базы и галка проставляется по факту. Если данные не записались, то там и галка не проставится.
...
Рейтинг: 0 / 0
22.10.2019, 12:14
    #39879818
Gerasimenko
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvlad,

авторЕсть чекбокс на форме, Readonly. Его нажимать есть права не у всех пользователей.
При нажатии проверяется, разрешенный ли это пользователь, и если да, то в базу записывается новое значение, а чекбоксу после этого программно проставляем или снимаем галку, в зависимости от нового значения, записанного в базу.

Странная логика. чекбокс должен при активизации формы быть либо Enabled := False, либо Enabled := True.
...
Рейтинг: 0 / 0
22.10.2019, 12:17
    #39879820
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvladТам например такая вещь: Кликаешь по чекбоксу подтверждения всей ведомости, он должен проверить сначала, что подтверждена каждая строка ведомости (чекбокс строки), и если не все строки подтверждены, то состояние ведомости не меняется, а выдается сообщение "Не все строки подтверждены, сначала подтвердите все строки". Так что весить событие на OnClick не очень хорошо, т.к. там галочка сразу проставится, и ее надо будет убирать программно, опять вызовется OnClick, и так по кругу.
Кто мешает чекбокс подтверждения всей ведомости задисаблить, пока не все строки подтверждены?
...
Рейтинг: 0 / 0
22.10.2019, 13:21
    #39879883
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Gerasimenkosvnvlad,

авторЕсть чекбокс на форме, Readonly. Его нажимать есть права не у всех пользователей.
При нажатии проверяется, разрешенный ли это пользователь, и если да, то в базу записывается новое значение, а чекбоксу после этого программно проставляем или снимаем галку, в зависимости от нового значения, записанного в базу.

Странная логика. чекбокс должен при активизации формы быть либо Enabled := False, либо Enabled := True.
Enabled := false делает чекбокс бледным, что едва различимо, поставлена там галка ли нет.
...
Рейтинг: 0 / 0
22.10.2019, 13:33
    #39879890
svnvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
goldmi45Кто мешает чекбокс подтверждения всей ведомости задисаблить, пока не все строки подтверждены?
Можно.
...
Рейтинг: 0 / 0
22.10.2019, 14:16
    #39879922
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvladEnabled := false делает чекбокс бледным, что едва различимо, поставлена там галка ли нет.Зато четко видно, что элемент неактивный и тыкать в него бессмысленно
...
Рейтинг: 0 / 0
22.10.2019, 14:25
    #39879934
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvlad Так что весить событие на OnClick не очень хорошо, т.к. там галочка сразу проставится, и ее надо будет убирать программно, опять вызовется OnClick, и так по кругу.
Установка Checked из программы не вызывает OnClick, что весьма логично. Т.ч. проблемы топика не вижу
...
Рейтинг: 0 / 0
22.10.2019, 14:30
    #39879937
Ivan Yar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Можно просто создать потомка от класса и придать ему дивную расскраску.
...
Рейтинг: 0 / 0
24.10.2019, 10:39
    #39880792
Cobalt747
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvladНужно, чтобы чекбокс реагировал на событие нажатия мышкой, но не отождествлял это с проставлением галочки.
Есть чекбокс на форме, Readonly. Его нажимать есть права не у всех пользователей.

Просто замени чекбокс на кнопку.
...
Рейтинг: 0 / 0
24.10.2019, 11:41
    #39880826
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvladGerasimenkosvnvlad,

пропущено...


Странная логика. чекбокс должен при активизации формы быть либо Enabled := False, либо Enabled := True.
Enabled := false делает чекбокс бледным, что едва различимо, поставлена там галка ли нет.
сделай у чекбокса изменяемый кэпшн: включено и отключено (свои надписи, конечно). мы у себя кое-где так меняем, удобно и надежно.
...
Рейтинг: 0 / 0
24.10.2019, 12:05
    #39880856
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvladkealon(Ruslan),
разобрался уже, повесил на OnMouseDown все.А если я на твой чекбокс перемещусь через клавишу Tab, а затем нажму пробел. Что будет?
...
Рейтинг: 0 / 0
24.10.2019, 12:06
    #39880858
Квейд
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Василий 2svnvlad Так что весить событие на OnClick не очень хорошо, т.к. там галочка сразу проставится, и ее надо будет убирать программно, опять вызовется OnClick, и так по кругу.
Установка Checked из программы не вызывает OnClick, что весьма логично.Да ты что, а проверить пробовал? :))
...
Рейтинг: 0 / 0
24.10.2019, 14:48
    #39880995
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Квейд, хм, да, действительно, вызывает. Что нелогично :D
Тем не менее:
1) Отмена установки Checked в True по внешнему условию вполне отрабатывает
2) Можно при желании добраться и до property TButtonControl.ClicksDisabled
...
Рейтинг: 0 / 0
24.10.2019, 14:50
    #39880998
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Состояние Enabled:=false для того и придумано, чтобы те кому не нужно не тыкали куда не нужно.
...
Рейтинг: 0 / 0
24.10.2019, 16:25
    #39881071
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Оно не очень удобно, т.к. в затемненном контроле плохо воспринимается его текущее наполнение. Плюс исключается возможность при тыке вывести дружелюбную поясняющую мессагу. Мне лично много нервов стоили моменты, когда в навороченной софтине какой-нибудь пункт меню или контрол отключен, и хрен знает что ему не нравится. Ступор, кидание тапка в монитор, проклятия в адрес разрабов и гугление. Всего этого можно избежать, вместо отключения выводя поясняющую надпись.
...
Рейтинг: 0 / 0
24.10.2019, 16:26
    #39881072
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Василий 2Оно не очень удобно, т.к. в затемненном контроле плохо воспринимается его текущее наполнение. Плюс исключается возможность при тыке вывести дружелюбную поясняющую мессагу. Мне лично много нервов стоили моменты, когда в навороченной софтине какой-нибудь пункт меню или контрол отключен, и хрен знает что ему не нравится. Ступор, кидание тапка в монитор, проклятия в адрес разрабов и гугление. Всего этого можно избежать, вместо отключения выводя поясняющую надпись.
Хинты туда не завезли? Или поясняющие лейблы?
...
Рейтинг: 0 / 0
24.10.2019, 17:55
    #39881145
alekcvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
svnvladНужно, чтобы чекбокс реагировал на событие нажатия мышкой, но не отождествлял это с проставлением галочки.
Есть чекбокс на форме, Readonly. Его нажимать есть права не у всех пользователей.
При нажатии проверяется, разрешенный ли это пользователь, и если да, то в базу записывается новое значение, а чекбоксу после этого программно проставляем или снимаем галку, в зависимости от нового значения, записанного в базу.
Держи, всё уже придумано до нас: https://forum.sources.ru/index.php?showtopic=354304 :)
...
Рейтинг: 0 / 0
25.10.2019, 11:40
    #39881434
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
wadmanХинты туда не завезли? Или поясняющие лейблы?
Хинты на дизейбленный контрол? Ну сам попробуй))
...
Рейтинг: 0 / 0
25.10.2019, 11:47
    #39881441
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чекбокс, отмечающийся программно
Василий 2wadmanХинты туда не завезли? Или поясняющие лейблы?
Хинты на дизейбленный контрол? Ну сам попробуй))
Это не проблема для программиста.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Чекбокс, отмечающийся программно / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]