:: Visual Foxpro, Foxpro for DOS
Отмена выполнения события Scrolled в гриде
nic2001
Автор

Сообщений: 84
Откуда: Казань
Дата регистрации: 20.10.2008
В событии KeyPress Грида (AllowCellSelection = .F.) при нажатии Enter (nKeyCode = 13) вызывается модальная форма. После закрытия формы автоматически
запускается Scrolled с параметром 7 (щелчок гориз. полосы прокуртки вправо). Соответственно, в гриде картинка сдвигается влево. Возможно ли отменить событие Scrolled, что картинка в гриде не "плясала"?
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
if nKeyCode = 13
nodefault
endif


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 18.11.19 14:27
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
Sawradym

Сообщений: 2244
Откуда: Винница
Дата регистрации: 15.05.2007
Вот как раз тот случай где должен помочь NODEFAULT.


------------------
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
nic2001
Автор

Сообщений: 84
Откуда: Казань
Дата регистрации: 20.10.2008
PROC grid1.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 13
THIS.RightClick
ENDIF
ENDPROC
PROC grid1.RightClick
DO Form FormModal
THIS.Refresh
ENDPROC

NODEFAULT пробовал поместить и до и после THIS.RightClick. Все равно событие Doscrolled выполняется при нажатии на Enter (((
При использовании правой клавиши мыши все ок.
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
У вас у грида есть метод RightClick
Смотрите что в нем.
А по поводу вопроса, коли так все обстоит, то не NODEFAULT нужен, а скорее всего
IF nKeyCode = 13
*THIS.RightClick
ENDIF

Совсем не внимателен был.
Судя по коду, скрол делается из FormModal
Поставьте там точку остановки, где то на выходе.
Посмотрите на код



Исправлено 1 раз(а). Последнее : Аспид, 18.11.19 14:57
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
nic2001
Автор

Сообщений: 84
Откуда: Казань
Дата регистрации: 20.10.2008
в RightClick просто вызов модальной формы. Если NODEFAUTL поставить в начале KeyPress, тогда событие DoScrolled не вызывается и картинка не плавает.
Но в это случае перестают работать клавиши вверх, вниз, PgUp, PgDown и т.д. Событие KeyPress, видимо по умолчанию, помещает символ 13 в буфер клавиатуры. После закрытия модальной формы происходит реакция foxpro.
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
nic2001
в RightClick просто вызов модальной формы. Если NODEFAUTL поставить в начале KeyPress, тогда событие DoScrolled не вызывается и картинка не плавает.
Но в это случае перестают работать клавиши вверх, вниз, PgUp, PgDown и т.д. Событие KeyPress, видимо по умолчанию, помещает символ 13 в буфер клавиатуры. После закрытия модальной формы происходит реакция foxpro.
А вот не надо беспочвенных инсинуаций. KeyPress ничего никуда не помещает. Ищите в вашем коде, в том числе и в вызываемой форме. Первый вопрос, который возник при чтении сей темы - а как вы добились такого поведения? Почему у других, в том числе и у меня, сего эффекта нет?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
nic2001
Автор

Сообщений: 84
Откуда: Казань
Дата регистрации: 20.10.2008
Эффект виден только тогда, когда часть столбцов справа не видна в гриде. Сделайте грид поуже и число колонок побольше.
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
CLEAR TYPEAHEAD попробуй
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
nic2001
Автор

Сообщений: 84
Откуда: Казань
Дата регистрации: 20.10.2008
Да, попробовал. Не помогает.
Вот сделал тестовую простенькую программу. Кому интересно, посмотрите. Если вызвать форму правой клавишей мыши, но все ок, поле 1 на гриде. Если использовать Enter, то после закрытия вызываемой фомы, картинка грида смещается и курсор видно поле2.
CLOSE DATABASES
CREATE TABLE tab1 FREE (;
p1 C (40), p2 C (40), p3 C (40))
APPEND BLANK
REPLACE p1 WITH 'Строка1Поле1',;
p2 WITH 'Строка1Поле2',;
p3 WITH 'Строка1Поле3'
APPEND BLANK
REPLACE p1 WITH 'Строка2Поле1',;
p2 WITH 'Строка2Поле2',;
p3 WITH 'Строка2Поле3'
GO TOP
oFormMain = CREATEOBJECT('FormMain')
oFormMain.Show
DEFINE CLASS FormMain AS Form
Top = 10
Left = 10
Height = 400
Width = 350
WindowType = 1
KeyPreview = .T.
Caption = 'Для выхода нажать Esc'
ADD OBJECT Grid1 AS grid WITH ;
Top = 5,;
Left = 5,;
Height = 300,;
Width = 300,;
AllowCellSelection = .F.,;
RecordSourceType = 1,;
RecordSource = 'Tab1'
PROCEDURE KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 27
THISFORM.Release
ENDIF
ENDPROC
PROCEDURE Grid1.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 13
THIS.RightClick
ENDIF
ENDPROC
PROCEDURE Grid1.RightClick
LPARAMETERS nKeyCode, nShiftAltCtrl
oFormModal = CREATEOBJECT('MyFormModal')
oFormModal.Show
THIS.Refresh
ENDPROC
ENDDEFINE
DEFINE CLASS MyFormModal AS Form
Top = 10
Left = 10
Height = 200
Width = 200
WindowType = 1
ADD OBJECT ComExit AS commandbutton WITH ;
Top = 50,;
Left = 50,;
AutoSize = .T.,;
Caption = 'Закрыть форму'
PROCEDURE ComExit.Click
THISFORM.Release
ENDPROC
ENDDEFINE



Исправлено 2 раз(а). Последнее : nic2001, 18.11.19 15:47
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
PROCEDURE Grid1.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 13
THIS.RightClick
NoDefault
ENDIF
ENDPROC
И проблемы как не бывало. О чем и было уже написано.


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
nic2001
Автор

Сообщений: 84
Откуда: Казань
Дата регистрации: 20.10.2008
Спасибо! В моей проге не срабатывает, значит еще нужно поискать. Там намного сложнее алгоритм.
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
ssa
PROCEDURE Grid1.KeyPress
LPARAMETERS nKeyCode, nShiftAltCtrl
IF nKeyCode = 13
THIS.RightClick
NoDefault
ENDIF
ENDPROC
И проблемы как не бывало. О чем и было уже написано.

Так вроде ж наоборот:
IF nKeyCode = 13
NoDefault
THIS.RightClick
ENDIF
Если уж отменять действие Enter - раз уж оно чего-то там перемещает.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
nic2001
Автор

Сообщений: 84
Откуда: Казань
Дата регистрации: 20.10.2008
Все спасибо!! Менял в KeyPress грида, оказывается событие обрабатывается Keypress формы, что происходит ранее! Поэтому DEFAULT не срабатывал ))
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
po2

Сообщений: 2864
Откуда: Иркутск
Дата регистрации: 22.12.2001
Убрал за ненадобностью.



Исправлено 1 раз(а). Последнее : po2, 18.11.19 18:58
Ratings: 0 negative/0 positive
Re: Отмена выполнения события Scrolled в гриде
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Crispy
Так вроде ж наоборот:
Не имеет значения в каком месте кода будет находится NODEFAULT. Считай что это просто установка флажка "не делай штатной обработки". Так что до, после, или между другими строками кода это будет написано - без разницы. Естественно с учётом логики IF/CASE - если вне IF прописать то все кнопки заблокирует


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 24 Joys kornienko_ru  (Гостей: 22)

© 2000-2024 Fox Club 
Яндекс.Метрика