AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.10.2008, 18:12   #1  
SorNick is offline
SorNick
Участник
 
5 / 10 (1) +
Регистрация: 03.10.2008
? Переход по полям грида с помощью стрелочек на клавиатуре
Dynamics AX 4.0

Доброго всем время суток. Подскажите, пожалуйста, по следующему вопросу.
Мне надо реализовать переход по полям грида с помощью стрелочек на клавиатуре.
Я это сделал перекрыв метод task на форме:

X++:
public int task(int _taskId)
{
    #define.TaskLeft(1283)   // Налево
    #define.TaskRight(1284) // Направо
    int ret;
    int num;

    switch ( _taskId)
    {
        case #TaskRight:
            this.design().control(element.selectedControl().id()+1).setFocus();
            break;
        case #TaskLeft:
            this.design().control(element.selectedControl().id()-1).setFocus();
            break;
        default:
             ret = super(_taskId);
             break;
    }
    return ret;
}
Проблема: хотелось бы оставить возможность перемещаться стрелками по тексту внутри контролов (полей). Т.е. если курсор позиционируется на строковое поле, передвигаемся с помощью стрелок в конец/начало строки и только после достижения конца/начала перепрыгиваем на следующий/предыдущий контрол (поле) грида.

Вопросы:
- Как понять в каком месте (позиция) конкретного контрола находиться курсор?
- М.б. эту задачу можно решить другим способом?
Старый 03.10.2008, 18:51   #2  
Vals is offline
Vals
Аманд
Аватар для Vals
Компания АМАНД
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2009
 
1,766 / 507 (20) +++++++
Регистрация: 27.02.2002
Адрес: Pass partout, Москва
Цитата:
М.б. эту задачу можно решить другим способом?
Стандартные горячие клавиши работают:
перемещение по полям вперёд/назад, по закладкам, по форме и проч.

Также обратите внимание что на кнопочках буковки стоят - это тоже горячие клавиши.
Старый 03.10.2008, 19:09   #3  
SorNick is offline
SorNick
Участник
 
5 / 10 (1) +
Регистрация: 03.10.2008
Цитата:
Сообщение от Vals Посмотреть сообщение
Стандартные горячие клавиши работают:
Tab и Shift+Tab - это здорово,
но задача именно на перход стрелочками, а наче не было бы вопроса как оставить возможность передвигаться стрелочками по символам в поле.
Старый 03.10.2008, 20:35   #4  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
передвигаемся с помощью стрелок в конец/начало строки
А если строка длинная? Надоест ведь ждать пока до конца добежит.
Может сделать:
  • Shift или Alt или Ctrl + стрелки - бегать по контролам
  • стрелки - бегать как бегало
Балуете вы пользователей
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 03.10.2008, 22:39   #5  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,296 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от SorNick Посмотреть сообщение
Tab и Shift+Tab - это здорово,
но задача именно на перход стрелочками, а наче не было бы вопроса как оставить возможность передвигаться стрелочками по символам в поле.
Сильно. Это только в одной форме или во всех предполагается такая фича? Если во всех, то это лучше делать уже за пределами AX.
А свой обработчик на кнопку Reset они ещё не попросили повесить?
__________________
Михаил Андреев
https://www.amand.ru
За это сообщение автора поблагодарили: longson (1).
Старый 06.10.2008, 11:39   #6  
SorNick is offline
SorNick
Участник
 
5 / 10 (1) +
Регистрация: 03.10.2008
Выходит, что понять в каком месте (позиция) конкретного контрола находиться курсор нет возможности?!

Пожалуй, "Shift или Alt или Ctrl + стрелки" будет компромисом...

На одной или всех формах - хороший вопрос. Есть ли возможность реализовать такой обработчик для всех форм (не переопределением метода task на каждой форме)?
Старый 06.10.2008, 11:58   #7  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Цитата:
Сообщение от SorNick Посмотреть сообщение
Есть ли возможность реализовать такой обработчик для всех форм (не переопределением метода task на каждой форме)?
Можно.
Прекройте метод task() на классе SysSetupFormRun.
Старый 06.10.2008, 12:14   #8  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,296 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от Red Stranger Посмотреть сообщение
Можно.
Прекройте метод task() на классе SysSetupFormRun.
У некоторых форм в стандартной функциональности данный метод уже перекрыт. И далеко не факт, что super() всегда вызывается.
__________________
Михаил Андреев
https://www.amand.ru
Старый 06.10.2008, 13:02   #9  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
У некоторых форм в стандартной функциональности данный метод уже перекрыт. И далеко не факт, что super() всегда вызывается.
Честно говоря не видел таких Вами форм. Примерчик можно?
Все таки подавляющее большинство форм будет работать нужным образом. А форм с кривым кодом(без вызова super()) будет не очень много. В них можно будет допилить ручками.
Старый 06.10.2008, 13:13   #10  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,296 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от Red Stranger Посмотреть сообщение
Честно говоря не видел таких Вами форм. Примерчик можно?
Легко
Миниатюры
Нажмите на изображение для увеличения
Название: tast.jpg
Просмотров: 571
Размер:	108.2 Кб
ID:	3782  
__________________
Михаил Андреев
https://www.amand.ru
Старый 06.10.2008, 13:29   #11  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
Легко
И где сказано что они не вызывают super()?
Старый 06.10.2008, 14:01   #12  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Цитата:
Сообщение от mayk Посмотреть сообщение
И где сказано что они не вызывают super()?
Поддерживаю вопрос

Сделал поиск форм с перекрытым методом. Открыл наугад несколько форм. У всех есть вызов super().

Последний раз редактировалось Red Stranger; 06.10.2008 в 14:03.
Старый 06.10.2008, 15:08   #13  
SorNick is offline
SorNick
Участник
 
5 / 10 (1) +
Регистрация: 03.10.2008
Цитата:
Сообщение от Red Stranger Посмотреть сообщение
Можно.
Прекройте метод task() на классе SysSetupFormRun.
Да, это будет вариантом!
Спасибо, за ответы всем (буду воспитывать(не баловать) пользователя).

И всё-таки, вопрос, который меня интересует уже как теоретический:
Есть возмлжность понять в каком месте (позиция) конкретного контрола находится курсор?!
Старый 06.10.2008, 16:31   #14  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Сообщение от SorNick Посмотреть сообщение
Да, это будет вариантом!
Спасибо, за ответы всем (буду воспитывать(не баловать) пользователя).

И всё-таки, вопрос, который меня интересует уже как теоретический:
Есть возмлжность понять в каком месте (позиция) конкретного контрола находится курсор?!
Что-то в этом роде:
X++:
    int res;
    int startSel, endSel;
    ;
    res = WinAPI::sendMessageEx(StringEdit.hWnd(), 0x00B0, 0, 0);
    startSel = res & 0xffff;//LOW WORD
    endSel   = res >> 16;//HIGH WORD
startSel и endSel - начало и конец выделенного блока. Соответственно, когда ничего не выделено - startSel = endSel = позиция курсора

Цитата:
The EM_GETSEL message retrieves the starting and ending character positions of the current selection in an edit control. You can send this message to either an edit control or a rich edit control.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 06.10.2008, 18:53   #15  
SorNick is offline
SorNick
Участник
 
5 / 10 (1) +
Регистрация: 03.10.2008
Попробую на досуге.
Спасибо! :-)
Старый 06.10.2008, 19:21   #16  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,296 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от Red Stranger Посмотреть сообщение
Поддерживаю вопрос

Сделал поиск форм с перекрытым методом. Открыл наугад несколько форм. У всех есть вызов super().
Ну, не знаю, как вы искали. Если вызов super() есть, это не значит, что он ВСЕГДА вызывается. Например:
\Forms\LedgerRRGETemplates_W\Methods\task или
\Forms\JmgRegistration\Methods\task или \Forms\PBATree\Methods\task
не до каждого super() управление может дойти..
__________________
Михаил Андреев
https://www.amand.ru
Старый 07.10.2008, 12:39   #17  
Red Stranger is offline
Red Stranger
Участник
 
102 / 19 (1) ++
Регистрация: 01.04.2005
Цитата:
Сообщение от Михаил Андреев Посмотреть сообщение
Ну, не знаю, как вы искали. Если вызов super() есть, это не значит, что он ВСЕГДА вызывается. Например:
\Forms\LedgerRRGETemplates_W\Methods\task или
\Forms\JmgRegistration\Methods\task или \Forms\PBATree\Methods\task
не до каждого super() управление может дойти..
Если следовать Вашей логике, то писать код на методах update(), insert() и т.п. тоже не стоит. Вдруг в методе на каком-нибудь FormDataSource управление не дойдет до super().
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
BackGround для цели грида ... Rimantas DAX: Программирование 14 22.02.2014 14:03
Данные и метаданные грида... PODOL DAX: Программирование 8 21.07.2006 14:20
Дисплей метод таблицы который вызывается из ГРИДА 3oppo DAX: Программирование 10 23.05.2006 06:47
Сортировка по полям подчиненного Датасурса Michael Skurlatov DAX: Программирование 3 15.04.2004 19:24
Сколько раз вызывается DataMethod поля грида при инициализации этого грида? storer DAX: Программирование 2 18.11.2003 14:03

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:07.