Чекбокс, отмечающийся программно

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

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

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

Пробовал даже извращаться, поверх чекбокса класть прозрачный TImage и весить событие на него. Но он почему-то не помещается Bring to front. При нажатии на него реагирует чекбокс. Да и не удобно это.
makhaon
Дата: 22.10.2019 11:25:57
каша в логике или в программном дизайне программы. делай чекбокс Readonly у всех пользователей, которым нельзя его нажимать. в OnClick пиши в базу данные, этого должно быть достаточно.
kealon(Ruslan)
Дата: 22.10.2019 11:31:33
svnvlad,

перед установкой просто OnClick в nil установи, а потом верни обработчик назад
svnvlad
Дата: 22.10.2019 12:02:11
kealon(Ruslan),
разобрался уже, повесил на OnMouseDown все.
svnvlad
Дата: 22.10.2019 12:06:03
makhaon
каша в логике или в программном дизайне программы. делай чекбокс Readonly у всех пользователей, которым нельзя его нажимать. в OnClick пиши в базу данные, этого должно быть достаточно.

Там например такая вещь: Кликаешь по чекбоксу подтверждения всей ведомости, он должен проверить сначала, что подтверждена каждая строка ведомости (чекбокс строки), и если не все строки подтверждены, то состояние ведомости не меняется, а выдается сообщение "Не все строки подтверждены, сначала подтвердите все строки". Так что весить событие на OnClick не очень хорошо, т.к. там галочка сразу проставится, и ее надо будет убирать программно, опять вызовется OnClick, и так по кругу.
svnvlad
Дата: 22.10.2019 12:10:37
makhaon, и еще нюанс, перестраховка, но теоретически может возникнуть:
если записываем в базу после отметки, то не факт, что в базу данные еще записались, а галка уже стоит, пользователь думает, что записались.
У меня сначала записывается в базу, а потом уже форма перечитывается из базы и галка проставляется по факту. Если данные не записались, то там и галка не проставится.
Gerasimenko
Дата: 22.10.2019 12:14:20
svnvlad,

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


Странная логика. чекбокс должен при активизации формы быть либо Enabled := False, либо Enabled := True.
goldmi45
Дата: 22.10.2019 12:17:03
svnvlad
Там например такая вещь: Кликаешь по чекбоксу подтверждения всей ведомости, он должен проверить сначала, что подтверждена каждая строка ведомости (чекбокс строки), и если не все строки подтверждены, то состояние ведомости не меняется, а выдается сообщение "Не все строки подтверждены, сначала подтвердите все строки". Так что весить событие на OnClick не очень хорошо, т.к. там галочка сразу проставится, и ее надо будет убирать программно, опять вызовется OnClick, и так по кругу.

Кто мешает чекбокс подтверждения всей ведомости задисаблить, пока не все строки подтверждены?
svnvlad
Дата: 22.10.2019 13:21:36
Gerasimenko
svnvlad,

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


Странная логика. чекбокс должен при активизации формы быть либо Enabled := False, либо Enabled := True.

Enabled := false делает чекбокс бледным, что едва различимо, поставлена там галка ли нет.
svnvlad
Дата: 22.10.2019 13:33:35
goldmi45
Кто мешает чекбокс подтверждения всей ведомости задисаблить, пока не все строки подтверждены?

Можно.