:: Visual Foxpro, Foxpro for DOS
Как понять, для какой строки грид вызвано контекстное меню
seg856
Автор

Сообщений: 272
Дата регистрации: 23.09.2010
У меня на вкладках гриды с разными источниками.
Как понять для какого источника вызвано контекстное меню?
Зная это я уже вычислю строку, для которой оно вызвано.
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Local ActCont
m.ActCont = thisform.activecontrol
** проверяем что есть активный контрол и он не null
if type('ActCont') = 'O' and !isnull(m.ActCont)
** проверяем, что контрол явдяется гридом и и у грида есть источник данных
if upper(alltrim(ActCont.baseClass)) == "GRID" ;
and Len(ActCont.RecordSource) # 0
** тут зная имя алиаса сразу знаем "текущую запись" итп
endif
endif


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




Исправлено 1 раз(а). Последнее : PaulWist, 12.07.17 15:06
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Контекстное меню НА гриде, или "рядом"? Или на каком прозрачном шейпе этот грид накрывающем?
Если НА, то вызывается оно откуда? Там же совершенно чётко видно что за грид, а значит и RecordSource


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
seg856
Автор

Сообщений: 272
Дата регистрации: 23.09.2010
Почему процедура из контекстного меню срабатывает 2 раза?
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Репо код приведи.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
seg856
Автор

Сообщений: 272
Дата регистрации: 23.09.2010
Код в пункте меню
oForm.historytapget

Код в событии RightClick грида
oForm.historytapget

Сама процедура historytapget
LOCAL lcRecordsource as Character
LOCAL cQ as Character
LOCAL lnTapid as long
LOCAL lcFileFull as Character
*oControl = thisform.pf.Pages(thisform.pf.activepage).tap1.grd
if type('thisform.pf.Pages(thisform.pf.activepage).tap1.grd') = 'O'
lcRecordsource=thisform.pf.Pages(thisform.pf.activepage).tap1.grd.recordsource
cQ=[lnTapid=]+lcRecordsource+[.]+[tapid]
&cQ
*MESSAGEBOX(lnTapid)
lcFileFull=cReportsPath+[ИсторияТалона]+ALLTRIM(TRANSFORM(lnTapid))+[.xls]
cQ=[call HistoryTapGet(]+ALLTRIM(TRANSFORM(lnTapid))+[)]
IF sql(cQ,[crTemp])<0
return
ENDIF
*SELECT crTemp
*COPY TO ___report
SET DEFAULT TO [&cReportsPath]
DELETE FILE [&lcFileFull]
CursorToExcel('crTemp',lcFileFull,'life_tap.xlt',10, 40)
MESSAGEBOX([Отчет сформирован.])
endif
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
seg856
Автор

Сообщений: 272
Дата регистрации: 23.09.2010
Как определить, какая вкладка сверху?
Активная - это еще и на которой курсор.
А если я выбираю пункт в верхнем меню, и мне нужно обратиться к элементам вкладки, находящейся сверху в данный момент?
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Если что, у меня вот так определяется текущая ("Активная"?, "находящейся сверху в данный момент"?) закладка ("вкладка"?)
WITH ThisForm.Закладки && элемент PageFrame на форме
FOR EACH m.o IN .Pages
IF (.ActivePage=m.o.PageOrder) && ТЕКУЩАЯ (активная) ЗАКЛАДКА
* что то делаем в соотв. этой текущей закладкой
ENDIF
ENDFOR
ENDWITH
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Непонятно описываете
seg856
Код в пункте меню
oForm.historytapget

Код в событии RightClick грида
oForm.historytapget

Если надо вызвать шот меню, то в
в событии RightClick грида должен быть вызов этого меню, а не вызов метода.
Например
thisform.shmenu(thisform,this)
Тут вы передали ссылку на форму и ссылку на грид. Все проблемы (1го топика) решены.
код меню
PARAMETERS oPar,oSrc
lo = oPar
... далее определение меню


------------------
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
seg856
Почему процедура из контекстного меню срабатывает 2 раза?
Видимо потому что по RightClick запускаете и меню, и сам метод


------------------
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
seg856
Автор

Сообщений: 272
Дата регистрации: 23.09.2010
Я ошибся. В событии RightClick такой код

do history.mpr

Но все равно 2 раза срабатывает.

Еще такой эффект. Вызываю на гриде контекстное меню. А затем щелкаю не на нем, а на гриде.
Процедура historytapget срабатывает 1 раз, хотя вообще не должна срабатывать, ведь в grid событие click не определено.

От чего это?
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
про set step on не знаешь?
Поставь, и смотри по стеку откуда вызвано.
И почему 2 раза увидишь


------------------
Ratings: 0 negative/0 positive
Re: Как понять, для какой строки грид вызвано контекстное меню
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
set step не поможет для отладки таких сценариев (связанных с активацией/деактивацией/кликами и меню). вот трассировка set coverage, или ручные debugout или даже какой тупой ручной strtofile(где мы, лог, .T.) в ключевых местах - помогут понять что за чем идёт и "кто на ком стоит".


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


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

On-line: 16 Равиль kornienko_ru  (Гостей: 14)

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