Интерфейсы

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Интерфейсы

Сообщение hope »

Добрый день!

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

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

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

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

Спасибо, Всем!
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

1. cmOk,Default,,'??????';
cmDefault : { message('Default') }
2.
cmCancel: { message('Cancel') }
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

edward_K!
я правильно понимаю, что достаточно на кнопку "Формировать" повесить событие cmDefault и тогда в интерфейсе достаточно будет обработать два события: cmDefault и cmCancel???
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

у меня не получалось кнопке назначить cmDefault - посему пишу именно так.
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

А разве не надо обрабатывать нажатие ENTER - на какой кнопке она нажата?
Ведь ENTER м.б. нажата и на кнопке "Формировать" и на кнопке "Отмена" и результат должен быть разный.
Или если ENTER нажали на кнопке, то возникнет только событие привязанное к кнопке, и cmDefault не будет возникать?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

в таком виде как написано все нажатия enter будет перехватывать кнопка cmOk.
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

А какой конкретно текст кода говорит о том, что все нажатия ENTER будет перехватывать кнопка cmOK?

с ESC будет аналогично? Все нажания ESC будет перехватывать кнопка cmClose?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

,Default,,
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

я на нажатие ентера вешаю выполнить событие cmOK
cmDefault: putCommand(cmOk);
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Спасибо, edward_K и Алексей! Но до конца я так и не могу понять...

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

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

не понятна логика возникновения событий...
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Или все-таки, когда жмем ENTER на кнопке - возникает событие кнопки, а событие cmDefault не возникает?
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

hope писал(а): default - указывается для кнопки по умолчанию (из доки). Это же не говорит о том, что будет перехват ENTER.
Еще раз из доки - "cmDefault: нажатие ВВОДА в диалоговом окне или интерфейсе". То есть это событие порождает любое нажатие Enter в интерфейсе. А кнопку Вы можете нажать и без enter.....
Обрабатывайте свои кнопочные события и все )
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Извиняюсь, что туплю, но не понимаю логики...

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

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

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

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

В связи с этим вопрос: чтобы реализовать выше описанное, надо ли мне анализировать где нажата кнопка ENTER: в поле ввода, или на одной кнопке, или на другой кнопке? Или все само правильно обработается стандарными событиями и достаточно описать только события кнопок?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

кроме добавления Default к cmOk ничего не нужно.
это событие тогда вызовется раньше чем cmDefault
а вообще добавте мессаги и посмотрите что когда вызовется.
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Сообщение hope »

Понятно, edward_K! Спасибо за терпение!
Ответить