-
Ситуация. Стандартный DBGrid с набором данных. Обработчики: procedure TfrObject.dbgObjectCellClick(Column: TColumn); begin if Column.FieldName <> 'моё поле' then dbgObject.Options:=[dgTitles,dgIndicator,dgColLines,dgRowLines,dgTabs,dgConfirmD elete,dgCancelOnExit]; // запрет редактирования всех полей кроме одного end; procedure TfrObject.dbgObjectColExit(Sender: TObject); begin dbgObject.Options := [dgEditing,dgTitles,dgIndicator,dgColLines,dgRowLines,dgTabs,dgConfirmDelete,dgC ancelOnExit]; // разрешаем редактировать end;
Вопрос: поле которое можно редактировать имеет PickList из фикс. значений. При двойном нажатии PickList выпадает и устанавливает фокус в ячейке. Как в данном случае запретить ввод символов и оставить только возможность выбора из списка?
-
чума. тыцнули на запрещенное поле, убралось редактирование. уходим из ячейки, но не мышкой, а стрелкой. редактирование появляется. а вышли мы стрелкой вверх/вниз, не поменяв поле, которое не должно редактироваться.
-
А почему нельзя установить у всех колонок ReadOnly:=True кроме одной?
-
Вопрос в не установке ЧИСТОГО запрета редактирования поля. А в том что-бы в ячейку не попадал курсор ввода символов. Значение в данном поле устанавливается из PickList (TStrings), а он в моей проге имеет фиксированный набор возможных значений. Пользователь кликает - появляется список, чуток смещает курсор, кликает ещё раз и... вот он курсор в ячейке -> вводите что хотите. А пример, это так один из десяти вариантов которые я испробовал.
-
Да, чуть не забыл, в базу сохраняется только значение из списка, что-бы пользователь не вводил - проверено. Но требования заказчика к СПО таковы: - дружественный интерфейс; - никаких двусмысленностей для пользователя. Вносить в руководство оператора подобную мелочь... как бы стыдно. Причём пользователи, по моему опыту, все равно РО не читают, просто шлют мне на мыло свои замечания (как и в этот раз собственно).
-
ИМХО в данном случае было бы правильнее не пиклист использовать, а справочник и лукап поле на него.
|