Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Параметры в MPR / 5 сообщений из 5, страница 1 из 1
24.09.2003, 16:08
    #32274404
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры в MPR
Такой вот вопрос.
Есть у меня меню для AsTopLevelForm которое запускается с такими параметрами:

LPARAMETERS oFormRef, getMenuName, lUniquePopups, parm4, parm5, parm6, parm7, parm8, parm9

На клик должна выполнится такая процедурка:

PROCEDURE _1200sdyn3
oFormRef.Caption=' '

но фокс говорит что "Object OFORMREF is not found"...
...
Рейтинг: 0 / 0
24.09.2003, 16:26
    #32274439
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры в MPR
Код: plaintext
LPARAMETERS oFormRef,..


А с каких это пор локальные параметры процедуры видны в другой процедуре? Передай сслыку на эту форму еще раз.

Код: plaintext
1.
2.
3.
4.
on selection bar x do _1200sdyn3 with oFormRef
..
PROCEDURE _1200sdyn3
LPARAMETERS oFormRef
oFormRef.Caption=' '
...
Рейтинг: 0 / 0
24.09.2003, 16:44
    #32274470
lnu
lnu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры в MPR
Буква L в слове LPARAMETERS означает, что параметры будут локальными.
А почему же тогда не работает просто PARAMETERS?
Какое различие между PARAMETER, PARAMETER и LPARAMETERS?

И вот пример из папчки Solutions/Menus
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
*       *  10 / 11 / 00             EDTSHORT.MPR               17 : 10 : 38   
PARAMETER oREF


DEFINE POPUP edtshort SHORTCUT RELATIVE FROM MROW(),MCOL()
DEFINE BAR  1  OF edtshort PROMPT  "\<Font..." 
DEFINE BAR  2  OF edtshort PROMPT  "\-" 
DEFINE BAR _med_cut OF edtshort PROMPT  "Cu\<t"  ;
	KEY CTRL+X,  "Ctrl+X"  ;
	MESSAGE  "Removes the selection and places it onto the Clipboard" 
DEFINE BAR _med_copy OF edtshort PROMPT  "\<Copy"  ;
	KEY CTRL+C,  "Ctrl+C"  ;
	MESSAGE  "Copies the selection onto the Clipboard" 
DEFINE BAR _med_paste OF edtshort PROMPT  "\<Paste"  ;
	KEY CTRL+V,  "Ctrl+V"  ;
	MESSAGE  "Pastes the contents of the Clipboard" 
DEFINE BAR _med_clear OF edtshort PROMPT  "Cle\<ar"  ;
	MESSAGE  "Removes the selection and does not place it onto the Clipboard" 
ON SELECTION BAR  1  OF edtshort ;
	DO _07x10tf0x ;
	IN LOCFILE( "MENUS\EDTSHORT"  , "MPX;MPR|FXP;PRG"  , "WHERE is EDTSHORT?" )

ACTIVATE POPUP edtshort

PROCEDURE _07x10tf0x
IF TYPE( "m.oRef" ) =  "O" 
	m.cFont = GetFont()
	IF EMPTY(m.cFont)
		RETURN
	ENDIF
	m.commaLoc = AT( "," ,m.cFont)
	m.comma2Loc = AT( "," ,m.cFont, 2 )
	oRef.FontName = SUBSTR(m.cFont, 1 ,m.commaLoc- 1 )
	oRef.FontSize = VAL(SUBSTR(m.cFont,m.commaLoc+ 1 ,m.comma2Loc-m.commaLoc))
	oRef.FontBold = ATC( "B" ,SUBSTR(m.cFont,m.comma2Loc))# 0 
	oRef.FontItalic = ATC( "I" ,SUBSTR(m.cFont,m.comma2Loc))# 0 
ENDIF


и вроде работает все нормально.
...
Рейтинг: 0 / 0
24.09.2003, 17:03
    #32274505
chagoserg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры в MPR
дело не в буковках ;)
дело в том, что передаваемые параметры дальше вызываемого метода не видны, поскольку являются локальными... а параметры всегда локальны по определению... а для того, чтобы параметр (в данном случае объект) был виден другими методами необходимо присвоить его значение свойству формы и ссылаться на него через это свойство.
...
Рейтинг: 0 / 0
24.09.2003, 17:15
    #32274521
NNN
NNN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметры в MPR
Параметры, обявленные через LPARAMETERS, ведут себя как переменные, обявленные через LOCAL, и будут видны только в текущей процедуре, а параметры, обявленные через PARAMETERS, ведут себя как переменные, обявленные через PRIVATE, и будут видны в текущей процедуре и во всех вызываемых.
Код, приведенный тобой из solutions, будет работать, поскольку процедура _07x10tf0x вызывается из процедуры EDTSHORT (там задержка на ACTIVATE POPUP edtshort, процедура не завершается и private переменная oRef существует).
Предполагаю, что в твоем случае меню определяется и выводиться на экран, но все действия с меню происходят уже после завершения процедуры, где определен параметр oFormRef. Поэтому вызываемые процедуры не увидят эту переменную, независмо от того, каким из двух способов она определена.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Параметры в MPR / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]