Страница 1 из 1

Интерфейсы

Добавлено: 29 сен 2008, 09:57
hope
Добрый день!

Есть интерфейс с атрибутами doAccept и ecsClose. В этом интерфейсе есть три поля ввода и две кнопки "Формировать" (cmOk) и "Отмена" (cmCancel).

Какие события я должна обработать в обработчике событий?

Понятно, что я должна обработать события для кнопок: cmOk и cmCancel.
Но т.к. у интерфейса указан атрибут doAccept, следовательно этот интерфейс может быть закрыт по нажатию кнопки ENTER. Следовательно мне нужно обработать нажатие этой кнопки. Причем, если ENTER нажали на поле ввода, то должен произойти переход на следующее поле ввода. Если ENTER нажали на кнопке "Формировать", то надо будет дальше формировать отчет, а если нажали ENTER на кнопке "Отмена", то нужно прервать формирование отчета.
Аналогично, т.к. у интерфейса указан атрибут escClose, следовательно этот интерфейс может быть закрыт по нажатию кнопки ESC. Следовательно мне нужно обработать нажатие этой кнопки.

Правильно я вообще мыслю??? Или можно все это сделать гораздо проще? Или для данного интерфейса не имеет смысла ставить атрибуты doAccept и ecsClose???

Спасибо, Всем!

Добавлено: 29 сен 2008, 10:10
edward_K
1. cmOk,Default,,'??????';
cmDefault : { message('Default') }
2.
cmCancel: { message('Cancel') }

Добавлено: 29 сен 2008, 10:19
hope
edward_K!
я правильно понимаю, что достаточно на кнопку "Формировать" повесить событие cmDefault и тогда в интерфейсе достаточно будет обработать два события: cmDefault и cmCancel???

Добавлено: 29 сен 2008, 10:51
edward_K
у меня не получалось кнопке назначить cmDefault - посему пишу именно так.

Добавлено: 29 сен 2008, 11:03
hope
А разве не надо обрабатывать нажатие ENTER - на какой кнопке она нажата?
Ведь ENTER м.б. нажата и на кнопке "Формировать" и на кнопке "Отмена" и результат должен быть разный.
Или если ENTER нажали на кнопке, то возникнет только событие привязанное к кнопке, и cmDefault не будет возникать?

Добавлено: 29 сен 2008, 11:07
edward_K
в таком виде как написано все нажатия enter будет перехватывать кнопка cmOk.

Добавлено: 29 сен 2008, 11:21
hope
А какой конкретно текст кода говорит о том, что все нажатия ENTER будет перехватывать кнопка cmOK?

с ESC будет аналогично? Все нажания ESC будет перехватывать кнопка cmClose?

Добавлено: 29 сен 2008, 11:22
edward_K
,Default,,

Добавлено: 29 сен 2008, 11:25
Алексей
я на нажатие ентера вешаю выполнить событие cmOK
cmDefault: putCommand(cmOk);

Добавлено: 29 сен 2008, 11:58
hope
Спасибо, edward_K и Алексей! Но до конца я так и не могу понять...

default - указывается для кнопки по умолчанию (из доки). Это же не говорит о том, что будет перехват ENTER.
Или я чего-то не понимаю????

Вопрос собственно в том, что кнопка ENTER может быть нажата как на кнопке "Формировать", так и на кнопке "Отмена" (установили фокус, например по TAB, и нажали ENTER). Событие в обоих случаях будет cmDefault. Правильно??? Следовательно мне надо разобрать это событие: либо выполнять дальше, либо прерываем. Так? или нет?

не понятна логика возникновения событий...

Добавлено: 29 сен 2008, 12:08
hope
Или все-таки, когда жмем ENTER на кнопке - возникает событие кнопки, а событие cmDefault не возникает?

Добавлено: 29 сен 2008, 13:11
Den
hope писал(а): default - указывается для кнопки по умолчанию (из доки). Это же не говорит о том, что будет перехват ENTER.
Еще раз из доки - "cmDefault: нажатие ВВОДА в диалоговом окне или интерфейсе". То есть это событие порождает любое нажатие Enter в интерфейсе. А кнопку Вы можете нажать и без enter.....
Обрабатывайте свои кнопочные события и все )

Добавлено: 29 сен 2008, 13:25
hope
Извиняюсь, что туплю, но не понимаю логики...

У меня есть интерфейс. Этот интерфейс имеет параметр doAccept. Это значит, что интерфейс будет закрываться по нажатию ENTER. Правильно?

Играет ли какую-то роль: где будет нажата ENTER?

В интерфейсе есть поля ввода. И мне не нужно, чтобы при нажатии ENTER в полях ввода интерфейс закрывался.

А еще есть две кнопки. При нажатии на них ENTER интерфейс должен закрываться. Но при нажатии ENTER на одной кнопке, я должна дальше формировать отчет, а при нажатии ENTER на другой кнопке - должна прервать формирование отчета.

В связи с этим вопрос: чтобы реализовать выше описанное, надо ли мне анализировать где нажата кнопка ENTER: в поле ввода, или на одной кнопке, или на другой кнопке? Или все само правильно обработается стандарными событиями и достаточно описать только события кнопок?

Добавлено: 29 сен 2008, 13:33
edward_K
кроме добавления Default к cmOk ничего не нужно.
это событие тогда вызовется раньше чем cmDefault
а вообще добавте мессаги и посмотрите что когда вызовется.

Добавлено: 29 сен 2008, 14:11
hope
Понятно, edward_K! Спасибо за терпение!