13.07.2010, 14:30 | #1 |
Участник
|
Перехват нажатия клавиш в диалоге
Здравствуйте, возможно ли как нибудь перехватить нажатие определенных клавиш в программно созданном диалоге?
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
13.07.2010, 16:17 | #2 |
Модератор
|
Нарисуйте свою форму и запустите ее в модальном режиме.
Кстати, данное решение имеет большой плюс, т.к. можно данную форму изменять (хайрить / добавлять контролы, например) С Уважением, Георгий |
|
14.07.2010, 00:20 | #3 |
Участник
|
например так:
X++: public class A2Tutorial extends RunBase { } protected Object dialog() { Dialog dialog; FormBuildButtonControl btn; ; dialog = super(); dialog.caption("some stuff."); Btn = dialog.formBuildDesign().addControl(FormControlType::Button,'Button77' ); Btn.text("Click me button77"); // info(Btn.name()); return dialog; } void Button77_clicked() {; info('Button77_clicked()'); } public void dialogPostRun(DialogRunbase dialog) {; dialog.formRun().controlMethodOverload(true); dialog.formRun().controlMethodOverloadObject(this); super(dialog); } public container pack() { return connull(); } public boolean unpack(container packedClass) { return true; } static void main(Args args) { A2tutorial f = new A2tutorial(); ; if (f.prompt()) { f.run(); } } |
|
14.07.2010, 09:12 | #4 |
Участник
|
Ну с clicked то все понятно!
А вот как мне перехватить например нажатие "Ctrl + V"?
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
14.07.2010, 10:10 | #5 |
Участник
|
Ну, вообще, перехватить нажатие клавиш на уровне приложения (по крайней мере, в третьей версии) можно в SysSetupFormRun.task() (там _p1 - код нажатой клавиши). Только вот есть сомнения в целесообразности: не очень это вписывается в концепцию работы с системой. Уверен, если бы вы объяснили, зачем такая необходимость вдруг возникла, коллеги смогли бы порекомендовать что-нибудь более бэстпрактисное.
|
|
14.07.2010, 10:22 | #6 |
Участник
|
Цитата:
Уверен, если бы вы объяснили, зачем такая необходимость вдруг возникла, коллеги смогли бы порекомендовать что-нибудь более бэстпрактисное.
На складе ряд номенклатур отпускается со штрих кодами, с помощью сканера. Сканер запрограмирован как: Ctrl + N Ctrl + V Ctrl + S т.е. создает в табл новую запись, вставляет в нее штрих код - сохраняет... А приемка этих номенклатур по тем же штрих кодам ведется из другой формы, по следующей логике: (по ctrl+n сканера)открывается диалог (по ctrl+V сканера)в поле диалога вставляется штрих код, а вот Ctrs + S мне надо перехватить и сделать closeok() ентого диалога....
__________________
Что сломалось не знаем, но уже немного подчинили... Последний раз редактировалось hated8; 14.07.2010 в 10:24. |
|
14.07.2010, 10:23 | #7 |
Участник
|
Я предложил как вариант, открывать не диалог а форму с таблицей куда будет по тому же принципу набиваться много штрих кодов, а после нажатия Ок они поочередно обработаются, но рокуводство по каким то причинам такой вариант не устроил....
Вот и извращаюсь.....
__________________
Что сломалось не знаем, но уже немного подчинили... |
|
14.07.2010, 10:30 | #8 |
Участник
|
Мое мнение, что предложенное вами решение более логичное. Думаю, лучше пободаться с начальством, например, сказать, что то, что они хотят - невозможно.
|
|
14.07.2010, 10:57 | #9 |
Участник
|
Цитата:
Предложенный вами вариант, мне кажется, оптимален. Опять же его можно сделать более универсальным - буферная таблица со списком штрих-кодов, на основании которой создаются строки в стандартных документах: заказах, журналах и т.п. В том числе такой вариант менее прихотлив к самим сканерам - можно использовать другие сканеры, при этом создание документов останется стандартным, а "дописать" придется только заполнение вашей упрощенной таблички-буфера.
__________________
Ivanhoe as is.. |
|
14.07.2010, 12:34 | #10 |
Участник
|
тогда стоит посмотреть еще вот этот пост.
+ Перехват событий на форме DAX 2009 Ctrl+(S,N,V) поймать таким образом можно. Ctrl+S можно поймать в поле датасорса, при сохранении будет вызван метод write или insert. Опять же вопрос фокуса возникает, как быть уверенным что Ctrl+V отработает именно в поле ввода, даже если форма его и поймает, то передаваемое значение вряд ли. Последний раз редактировалось ddadream; 14.07.2010 в 12:44. |
|