Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBGrid и блокировка клавиш курсора и ESC [D7, Paradox]


Apophis ©   (2004-11-02 02:26:00) 

Подскажите, как во время редактирования набора данных (вставки, добавления) в DBGrid или другой форме блокировать клавиши курсора и ескейпа, чтобы пользователь мог нажать только, допустим, клавишу (мою) "Сохранить"?


Apophis   (2004-11-03 12:09:00) [1]

ВСЕМ СПАСИБО!


msguns   (2004-11-03 10:25:00) [2]

>Apophis ©   (02.11.04 19:49) [16]
>>msguns
>А можно чуть подробнее? Ну уж простите за тормоза...

Используя экшины (TAction в коллекции объекта TActionList), можно:
1. Централизовать обработку действий узера (нажатие кнопок, выбор меню, поп-ап меню и т.д.) в одном месте
2. Гибко менять пиктограммки кнопок, обработку горячих клавиш (Short Cut), их состояние в зависимости от возникающих во время работы приложения событий.
3. Переназначать обработчики с однох элементов управления другим
4. Использовать экшины одного модуля в других, централизуя общее упр-е (например, в MDI-приложениях)

и т.д.


Danilka   (2004-11-03 08:11:00) [3]

[14] Apophis ©   (02.11.04 17:06)
Во-первых, вот-так: if key=38 then key:=0;
Во-вторых, нагляднее писать не код клавиши, а константу, например VK_UP вместо 38 и т.д., см раздел virtual key codes в справке.
В третьих - ну нифига не наглядно, и не удобно для пользователя, при редактировании в гриде запрещать скролл по нему. Сколько-бы ты не тешил себя мыслью: "А пользователь не запутается, это уже обеспечу", я-бы такой программой просто не стал пользовацца.


Apophis   (2004-11-02 19:49:00) [4]

msguns
А можно чуть подробнее? Ну уж простите за тормоза...


msguns   (2004-11-02 18:43:00) [5]

TActionList+TAction+HotKey. Повесить на кнопки, менюшки и т.д. Переключать в OnAfterScroll/OnAfterOpen или по необходимости.


Apophis   (2004-11-02 17:06:00) [6]

KSergey
OnKeyDown:
if key=38 then exit;

Примерно то же и для PreView. Если неправильно, подскажи, плз!


KSergey   (2004-11-02 16:40:00) [7]

> [10] Apophis ©   (02.11.04 15:51)
> Через OnKeyDown или KeyPreview не получается.

Как делал?


Apophis   (2004-11-02 15:59:00) [8]

Danilka

Можно в чем-нибудь и отдельном, но я !ХОЧУ! отключить эти кнопки именно в гриде!!!  А пользователь не запутается, это уже обеспечу. Так что, неужели никак-никак??? Не верю!


Danilka   (2004-11-02 15:52:00) [9]

[8] Apophis ©   (02.11.04 14:48)
И чего ты к Johmen пристаешь, счет Enabled=false это я тебе сказал. :))
Вообще, просто я не до конца тебя понял, вот и ляпнул. :))

А так, по теме, возможно лучше сделать грид не редактируемым, а редактировать запись в отдельной форме.
Иначе у пользователя могут возникнуть сложности: почему в гриде иногда работает скролл по записям, а иногда нет. То, что это из-за того, что не нажата клавиша сохранить/отменить неочевидно.


Apophis   (2004-11-02 15:51:00) [10]

Vlad
И потом, зависнет набор в каком-то состоянии или нет, это уже другой вопрос. Меня интересует, как отключить реакцию DBGrid во время редактирования (а потом снова включить) на Esc,Up,Down. Через OnKeyDown или KeyPreview не получается.


Apophis   (2004-11-02 14:55:00) [11]

Vlad
//Это что же, набор данных должен намертво зависнуть в состоянии dsEdit или dsInsert? И что с ним дальше делать?

Не должен выходить из этих режимов стандартными средствами: курсор на другую запись, esc...


Apophis   (2004-11-02 14:48:00) [12]

Johmen
/Enabled=false;/
Где именно??

KSergey
Вот оно и должно реагировать на действие юзера во время редактирования DBGrid-а на клавиши Esc, вверх, вниз - Никаких действий!!! Ну не должно для набора данных наступать Cancel or Post!


KSergey   (2004-11-02 14:21:00) [13]

А вообще ответ дан [1]
Можно на форме, поставив KeyPreview := TRUE


Vlad   (2004-11-02 14:16:00) [14]


> Ну не должно для набора данных наступать Cancel or Post!

Это что же, набор данных должен намертво зависнуть в состоянии dsEdit или dsInsert? И что с ним дальше делать?


Apophis   (2004-11-02 14:03:00) [15]

Johmen
/Enabled=false;/
Где именно??

KSergey
Вот оно и должно реагировать на действие юзера во время редактирования DBGrid-а на клавиши Esc, вверх, вниз - Никаких действий!!! Ну не должно для набора данных наступать Cancel or Post!


Apophis   (2004-11-02 14:02:00) [16]

Johmen
//Enabled=false;
Где именно??

KSergey
Вот оно и должно реагировать на действие юзера во время редактирования DBGrid-а на клавиши Esc, вверх, вниз - Никаких действий!!! Ну не должно для набора данных наступать Cancel or Post!


KSergey   (2004-11-02 11:47:00) [17]

> Apophis ©   (02.11.04 02:26)
> Подскажите, как во время редактирования набора данных (вставки,
> добавления) в DBGrid или другой форме блокировать клавиши
> курсора и ескейпа, чтобы пользователь мог нажать только,
> допустим, клавишу (мою) "Сохранить"?

А зачем это надо?
По-моему тут логика работы не верна приложения. Win-приложения обзаноуметь реагировать на любые действия пользователя.


Danilka   (2004-11-02 09:40:00) [18]

[1] Johnmen ©   (02.11.04 09:06)
По-моему, нагляднее Enabled = False; иначе юзер будет тыкаться, а потом позовет программиста: "меня чего-то перестала работать" :))


Johnmen   (2004-11-02 09:06:00) [19]

Обрабатывать OnKeyDown


Наверх

Титульная страница Поиск, карта сайта Написать письмо