Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Как в дереве нажать SHIFT+F11 ?  [new]
Программизд 01
Member [заблокирован]

Откуда:
Сообщений: 4189
На дерево метод KeyPress формы не распространяется, а в методе KeyPress дерева, значение 135 (Shift+F11) для keyascii не выполняется. Зато работает ON KEY LABEL SHIFT+F11 "процедура". Но если SHIFT+F11 долго держать, то возникает ошибка превышения nesting level вызова указанной процедуры.
24 май 06, 11:23    [2699559]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Hel!Riser
Member

Откуда: Нижний Новгород
Сообщений: 972
при выполении процедуры сначала сбрось ON KEY LABEL SHIFT+F11 а на выходе взад восстанови
24 май 06, 11:29    [2699600]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Программизд 01
Member [заблокирован]

Откуда:
Сообщений: 4189
Hel!Riser
при выполении процедуры сначала сбрось ON KEY LABEL SHIFT+F11 а на выходе взад восстанови


Не получается

В главном модуле стоит

ON KEY LABEL SHIFT+F11 myProc

В другом модуле:

PROCEDURE myProc

PUSH KEY CLEAR

 ...............
 ...............

POP KEY

ENDPROC

Все равно вылазит ошибка
24 май 06, 11:40    [2699665]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
У ActiveX компонент свои собственные ASCII-коды клавишь, отличные от кодов собственно среды FoxPro.

В частности, Shift+F11 - это будет

keycode = 122

Однако кроме всего прочего, крайне нежелательно делать вызов модальных форм из событий ActiveX-компонент. Это может привести к ряду глюков в работе ActiveX-компонент.

В этом случае я делаю запуск модальных форм через одноразовый таймер, включение которого и происходит в событии ActiveX-компонента. В этом случае событие отрабатывает до конца и только после этого выполняется собственно событие таймера.
24 май 06, 12:41    [2700054]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Программизд 01
Member [заблокирован]

Откуда:
Сообщений: 4189
Владимир М.

В методе KeyPress дерева входные параметры

LPARAMETERS keyascii,nShift

Вставляю код

IF keyascii = 122
messagebox("test")
ENDIF

И ничего не работает. Что я не так делаю ?
24 май 06, 13:13    [2700275]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Aleksey-K
Member

Откуда: Москва
Сообщений: 3116
А если в KeyDown ?

С уважением, Алексей
24 май 06, 13:22    [2700326]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
_иван_
Guest
135 1
Во первых нет в дереве KeyPress
Есть KeyUp
Вот там и пиши
*** ActiveX Control Event ***
LPARAMETERS keycode, shift
*WAIT WINDOW keycode
*WAIT WINDOW shift
DO CASE
CASE keycode=122 and shift=1
thisform.KeyPress(135,1)

А в KeyPress формы
LPARAMETERS nKeyCode, nShiftAltCtrl
*WAIT WINDOW ("nKeyCode="+STR(nKeyCode)+"nShiftAltCtrl="+STR(nShiftAltCtrl))
DO CASE
CASE nKeyCode=135 AND nShiftAltCtrl=1
WAIT WINDOW "Усе получилось"
ENDCASE
24 май 06, 13:28    [2700357]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
_иван_
Guest
Прошу извинений,
есть такой метод в дерево,
но пользовать нужно тот, который я описал
24 май 06, 13:30    [2700365]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Программизд 01
Member [заблокирован]

Откуда:
Сообщений: 4189
Aleksey-K
А если в KeyDown ?

С уважением, Алексей


Ага, получилось. Странно то, что в KeyPress работают ESC (27) и Enter (13), а 122 и 135 не хотят. Зато в KeyDown 122 работает. Вот такой вот актив-икс :)
24 май 06, 13:31    [2700375]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Программизд 01
Member [заблокирован]

Откуда:
Сообщений: 4189
Вот блин, не все так просто оказалось. У меня в KeyDown функция CHR(keycode) дает неправильные значения. А использовать ее мне жизненно необходимо. А в KeyPress CHR(keyascii) работает правильно.
24 май 06, 13:38    [2700407]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Так не надо в методах дерева делать обработку! В событии KeyUp сделай вызов обычного метода (лучше, своего собственного), куда в качестве параметра и передай нужные коды.
24 май 06, 13:50    [2700465]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Программизд 01
Member [заблокирован]

Откуда:
Сообщений: 4189
ВладимирМ
Так не надо в методах дерева делать обработку! В событии KeyUp сделай вызов обычного метода (лучше, своего собственного), куда в качестве параметра и передай нужные коды.


Не пойдет. Смысл в том, что у меня реализован поиск в дереве следующим образом. Юзер стоит на какой-либо ноде дерева и начинает с клавиатуры вводить текст для поиска. То, что вводит юзер автоматически выводится в окно поиска на панели инструментов через функцию CHR(keyascii). Причем буквы могут быть как русскими, так и английскими. Все это нормально работает в KeyPress, где корректно различаются и русские и английские буквы. Если все это перенести в KeyDown, чтобы заработал SHIFT+F11, то CHR(keycode) возвращает некорректные с точки зрения CHR() значения. Более того, для русских и английских букв, значение keycode одинаковое. Вот в этом то и проблема.
24 май 06, 13:58    [2700520]     Ответить | Цитировать Сообщить модератору
 Re: Как в дереве нажать SHIFT+F11 ?  [new]
Программизд 01
Member [заблокирован]

Откуда:
Сообщений: 4189
Все, решил проблему.

Там где нужен keyascii, обработку оставил в KeyPress, а обработку SHIFT+F11 вынес в KeyUp, который выполняется после KeyPress. Ибо если SHIFT+F11 поместить в KeyDown, то он блокирует выполнение кода в KeyPress и тем самым не дает ничего нажимать кроме SHIFT+F11. Всем спасибо.
24 май 06, 14:06    [2700578]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить