powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / настрока меню из проекта
9 сообщений из 9, страница 1 из 1
настрока меню из проекта
    #32704042
isim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте всем.
У меня следующий вопрос.
Хотелось бы иметь функцию (ну например в отдельном администраторском модуле) из которой можно было бы для разных пользователей настраивать собственное меню.
Возможно ли вообще решение такой проблемы?
Видимо надо как то решать эту проблему на командном уровне но вопрос в том как потом это меню запихать в проект ? (или отдельно их собирать для конкретных пользователей и потом при запуске проекта ссылаться на них ?)
Подскажите у кого какие мысли есть по этому поводу.
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32704136
Burn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когдато в DOS-е делал такое. Была таблица, описывающая все пункты меню и была таблица пользователей с признаками доступности пунктов. При запуске прграммы она сканировала таблицу-описатель меню и генерила только доступные пункты. Позже я от этого отказался - просто делаю полное меню и в зависимости от пользователя отключаю нунужные пункты по SET SKIP
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32704273
Maltsev Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я на VFP 5.0 (из .APP) формировал файлик с описанием меню, потом его запускал, когда перешел на EXE`шник, это не покатило, тоже перенел на SKIP, написал унилитку управления доступом к меню. Оччень удобно и работает уже около 3 лет без сбоев ...
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32704573
SergeyPl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вношу свои 5 копеек :)
У меня в проекте эта задача решена так -
1. Есть таблица, в которой определены все пункты меню.
2. Есть таблица, в которой определены все пользователи.
3. Есть кросс-таблица, в которой определены пункты меню, доступные каждому пользователю. Естественно, есть пункты меню, доступные всем, например, Выход :)
4. На старте проверяется пользователь и для него формируется выборка доступных пунктов меню.
5. Меню по выборке для пользователя определяется так (приведен готовый кусок, надеюсь, что разберетесь):
Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
function DefineMenu
	lparameter strLocPrmModul,logLocPrmShortCutEnabled
*
	local logLocReturn,strLocAlias,strLocScanModul,strLocType,intLocBar,strLocHotAbc,;
		strLocPrompt,strLocMessage,strLocCommand,strLocMenuCommand,intLocSeparator,;
		strLocModul,strLocMenuUp,strLocKey,logLocSeparator,;
		strLocPromptOnly,strLocLastDefinePopup
*
	public strPblAbc
*
	logLocReturn = .F.
	strLocAlias = alias()
	strPblAbc = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
	strLocHotAbc = upper(strPblAbc)
	intLocSeparator =  1300 
	strLocLastDefinePopup = ""
	intLocBar =  0 
*
	if IsSystemMenuDefine("AliasMenuSelect") .and. SelectAlias("AliasMenuSelect")
		strLocScanModul = upper(padr(strLocPrmModul, 40 ))
		scan for (FldStrModul = strLocScanModul)
			strLocModul = alltrim(GetField("FldStrModul","AliasMenuSelect",""))
			strLocMenuUp = alltrim(GetField("FldStrNameUp","AliasMenuSelect",""))
			strLocMenuCommand = alltrim(GetField("FldStrCommand","AliasMenuSelect",""))
			strLocKey = alltrim(GetField("FldStrKey","AliasMenuSelect",""))
			logLocSeparator = GetField("FldLogSeparator","AliasMenuSelect",.F.)
			strLocPromptOnly = alltrim(GetField("FldStrPrompt","AliasMenuSelect",""))
			strLocPrompt = SetHotKey(strLocPromptOnly)
			strLocMessage = alltrim(GetField("FldStrMessage","AliasMenuSelect",""))
			strLocType = GetField("FldStrType","AliasMenuSelect","")
DEF_AGL
			do case
				case strLocType = "BAR1"					&& Êîìàíäà
					intLocBar = intLocBar +  1 
					strLocCommand = "do " + strLocMenuCommand + " in " + strLocModul
					if logLocPrmShortCutEnabled
						if (strLocLastDefinePopup = strLocShortCutPopup)
							define bar intLocBar of (strLocShortCutPopup) prompt strLocPrompt message strLocMessage
							on selection bar intLocBar of (strLocShortCutPopup) &strLocCommand
							if logLocSeparator
								intLocSeparator = intLocSeparator +  1 
								define bar intLocSeparator of (strLocShortCutPopup) prompt "\-"
							endif
						endif
					else
						if (strLocLastDefinePopup = strLocMenuUp)
							if empty(strLocKey)
								define bar intLocBar of (strLocMenuUp) prompt strLocPrompt message strLocMessage
							else
								define bar intLocBar of (strLocMenuUp) prompt strLocPrompt key &strLocKey message strLocMessage
							endif
							on selection bar intLocBar of (strLocMenuUp) &strLocCommand
							if logLocSeparator
								intLocSeparator = intLocSeparator +  1 
								define bar intLocSeparator of (strLocMenuUp) prompt "\-"
							endif
						endif
					endif
				case strLocType = "BAR2"				&& Ìåíþ PopUp
					intLocBar = intLocBar +  1 
					if logLocPrmShortCutEnabled
						if (strLocLastDefinePopup = strLocShortCutPopup)
							strLocCommand = strtran(strLocMenuCommand,"POP_","SRT_")
							define bar intLocBar of (strLocShortCutPopup) prompt strLocPrompt message strLocMessage
							on bar intLocBar of (strLocShortCutPopup) activate popup &strLocCommand
							if logLocSeparator
								intLocSeparator = intLocSeparator +  1 
								define bar intLocSeparator of (strLocShortCutPopup) prompt "\-"
							endif
						endif
					else
						if (strLocLastDefinePopup = strLocMenuUp)
							if empty(strLocKey)
								define bar intLocBar of (strLocMenuUp) prompt strLocPrompt message strLocMessage
							else
								define bar intLocBar of (strLocMenuUp) prompt strLocPrompt key &strLocKey message strLocMessage
							endif
							on bar intLocBar of (strLocMenuUp) activate popup &strLocMenuCommand
							if logLocSeparator
								intLocSeparator = intLocSeparator +  1 
								define bar intLocSeparator of (strLocMenuUp) prompt [\-]
							endif
						endif
					endif
				case strLocType = "BAR3"				&& Ìåíþ ïîëüçîâàòåëÿ
					if (strLocLastDefinePopup = strLocMenuUp)
						=DefineMenuSystemUserPopup(strLocMenuUp,strLocMenuCommand,strLocModul,"BAR3")
					endif
				case strLocType = "BAR4"		&& Ìåíþ îáúåêòà
					if (strLocLastDefinePopup = strLocMenuUp)
						=DefineMenuSystemUserPopup(strLocMenuUp,strLocMenuCommand,strLocModul,"BAR4")
					endif
				case strLocType = "BAR5"		&& Êîìàíäû ïå÷àòè ALT+F5
					if logLocPrmShortCutEnabled
						if (strLocLastDefinePopup = strLocShortCutPopup)
							=DefineMenuSystemPopupPrint(strLocModul,strLocShortCutPopup,.T.)
						endif
					else
						if (strLocLastDefinePopup = strLocMenuUp)
							=DefineMenuSystemPopupPrint(strLocModul,strLocMenuUp,.F.)
						endif
					endif
				case strLocType = "BAR6"		&& Ìåíþ îáúåêòà ó÷åòà
					if (strLocLastDefinePopup = strLocMenuUp)
						=DefineMenuSystemUserPopup(strLocMenuUp,strLocMenuCommand,strLocModul,"BAR6")
					endif
				case strLocType = "BAR7"		&& Ìåíþ îáúåêòà îñíîâíûõ ñðåäñòâ
					if (strLocLastDefinePopup = strLocMenuUp)
						=DefineMenuSystemUserPopup(strLocMenuUp,strLocMenuCommand,strLocModul,"BAR7")
					endif
				case strLocType = "BAR8"		&& Ïðîèçâîäñòâî
					if (strLocLastDefinePopup = strLocMenuUp)
						=DefineMenuSystemUserPopup(strLocMenuUp,strLocMenuCommand,strLocModul,"BAR8")
					endif
				case strLocType = "FOX1"				&& Êîìàíäà FoxPro
					if (strLocLastDefinePopup = strLocMenuUp)
						if empty(strLocKey)
							define bar &strLocMenuCommand of (strLocMenuUp) prompt strLocPrompt message strLocMessage
						else
							define bar &strLocMenuCommand of (strLocMenuUp) prompt strLocPrompt message strLocMessage key &strLocKey
						endif
						if logLocSeparator
							intLocSeparator = intLocSeparator +  1 
							define bar intLocSeparator of (strLocMenuUp) prompt "\-"
						endif
					endif
				case strLocType = "POP0"		&& Popups of Main System Menu
					if empty(strLocKey)
						define popup (strLocMenuUp) margin relative
						strLocLastDefinePopup = strLocMenuUp
					else
						define popup (strLocMenuUp) key &strLocKey margin relative
						strLocLastDefinePopup = strLocMenuUp
					endif
					strPblAbc = strLocHotAbc
					intLocBar =  0 
				case strLocType = "POP1"		&& Menu of Browse
					if logLocPrmShortCutEnabled
						strLocShortCutPopup = strtran(strLocMenuUp,"POP_","SRT_")
						define popup (strLocShortCutPopup) from mrow(),mcol() margin relative shortcut
						strLocLastDefinePopup = strLocShortCutPopup
					else
						if empty(strLocKey)
							define popup (strLocMenuUp) margin relative
							strLocLastDefinePopup = strLocMenuUp
						else
							define popup (strLocMenuUp) key &strLocKey margin relative
							strLocLastDefinePopup = strLocMenuUp
						endif
					endif
					strPblAbc = strLocHotAbc
					intLocBar =  0 
				case strLocType = "POP2"		&& RightClick
					if logLocPrmShortCutEnabled
						strLocShortCutPopup = strtran(strLocMenuUp,"POP_","SRT_")
						define popup (strLocShortCutPopup) margin relative shortcut
						strLocLastDefinePopup = strLocShortCutPopup
					else
						if empty(strLocKey)
							define popup (strLocMenuUp) margin relative
							strLocLastDefinePopup = strLocMenuUp
						else
							define popup (strLocMenuUp) key &strLocKey margin relative
							strLocLastDefinePopup = strLocMenuUp
						endif
					endif
					strPblAbc = strLocHotAbc
					intLocBar =  0 
				case strLocType = "POP3"		&& ShortcutMenu
					if logLocPrmShortCutEnabled
						strLocShortCutPopup = strtran(strLocMenuUp,"POP_","SRT_")
						define popup (strLocShortCutPopup) from mrow(),mcol() margin relative shortcut
						strLocLastDefinePopup = strLocShortCutPopup
					else
						define popup (strLocMenuUp) from mrow(),mcol() margin relative shortcut
						strLocLastDefinePopup = strLocMenuUp
					endif
					strPblAbc = strLocHotAbc
					intLocBar =  0 
				case strLocType = "POP4"		&& ShortcutMenu next Level (FormGraph)
					if logLocPrmShortCutEnabled
						strLocShortCutPopup = strtran(strLocMenuUp,"POP_","SRT_")
						define popup (strLocShortCutPopup) margin relative shortcut
						strLocLastDefinePopup = strLocShortCutPopup
					else
						define popup (strLocMenuUp) margin relative shortcut
						strLocLastDefinePopup = strLocMenuUp
					endif
					strPblAbc = strLocHotAbc
					intLocBar =  0 
				case strLocType = "POP5"		&& ShortcutMenu in Screen
					define popup (strLocMenuUp) from mrow(),mcol() in screen margin relative shortcut
					strLocLastDefinePopup = strLocMenuUp
					strPblAbc = strLocHotAbc
					intLocBar =  0 
				case strLocType = "PAD1"
					if empty(strLocKey)
						define pad (strLocMenuUp) of (strLocLastDefinePopup) prompt strLocPrompt message strLocMessage
					else
						define pad (strLocMenuUp) of (strLocLastDefinePopup) prompt strLocPrompt message strLocMessage key &strLocKey
					endif
					on pad (strLocMenuUp) of (strLocLastDefinePopup) activate popup &strLocMenuCommand
				case strLocType = "MENU"
					define menu (strLocMenuUp) bar in screen
					strPblAbc = strLocHotAbc
					strLocLastDefinePopup = strLocMenuUp
			endcase
		endscan
	endif
	=SelectAlias(strLocAlias)
	wait clear
return logLocReturn
*
function SetHotKey
	lparameters strLocPrmPrompt
	local strLocReturn,intLocCount,strLocChr,intLocPtr
	strLocReturn = strLocPrmPrompt
	for intLocCount =  1  to len(strLocPrmPrompt)
		strLocChr = substr(strLocPrmPrompt,intLocCount, 1 )
		intLocPtr = atc(strLocChr,strPblAbc)
		if (intLocPtr >  0 )
			strLocReturn = stuff(strLocReturn,intLocCount, 0 ,"\<")
			strPblAbc = stuff(strPblAbc,intLocPtr, 1 ,"")
			exit
		endif
	endfor
return strLocReturn
*
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32704663
isim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насчет SET SKIP - это да,вполне приемлемый вариант.
Хотелось просто прояснить ситуацию возможно ли еще решение этой проблемы по другому.
вот похоже что - то есть в чем я обязательно поразбираюсь.
спасибо.
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32704722
Александр Третьяков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
PROCEDURE SetMenu
Do "NAKL.mpr"

do case 
	case alltrim(upper(hlogin))=alltrim(upper('Иванов Р. О.'))
		*_rwj0j7822 Звіти
		ii=CNTBAR('_rwj0j7822') 
		ii=ii+ 1 
		_asa='_rwj0j7822'
		jj= 8 
		*		jj - це пiсля якоaо елемента вставляти
		DEFINE BAR ii OF &_asa PROMPT "\<Aналiзи" AFTER GETBAR(_asa, jj) MESSAGE "Aналiзи"
		ON BAR ii OF &_asa ACTIVATE POPUP аналiзи
				
		DEFINE POPUP аналiзи MARGIN RELATIVE SHADOW COLOR SCHEME  4 
		DEFINE BAR  1  OF аналiзи PROMPT "Aналiз виручки по магазину" ;
			MESSAGE "Aналiз виручки на протязi мiсяця"
		DEFINE BAR  2  OF аналiзи PROMPT "Aналiз роботи магазину" ;
			MESSAGE "Aналiз роботи магазину"
		DEFINE BAR  3  OF аналiзи PROMPT "Aналiз роботи магазину порівняльний (склад)" ;
			MESSAGE "Aналiз роботи магазину порівняльний (склад)"
		DEFINE BAR  4  OF аналiзи PROMPT "Виручка" ;
			MESSAGE "Виручка"
		DEFINE BAR  5  OF аналiзи PROMPT "\-"
		DEFINE BAR  6  OF аналiзи PROMPT "Рентабельнiсть клiєнтiв" ;
			MESSAGE "Рентабельнiсть клiєнтiв"
		DEFINE BAR  7  OF аналiзи PROMPT "\-"
		DEFINE BAR  8  OF аналiзи PROMPT "Термін оплат" ;
			MESSAGE "Термін оплат"
		DEFINE BAR  9  OF аналiзи PROMPT "\-"
		DEFINE BAR  10  OF аналiзи PROMPT "Aналiз виручки по магазину (старий)" ;
			MESSAGE "Aналiз виручки на протязi мiсяця"
		ON SELECTION BAR  1  OF аналiзи zvit_analiz(hConnect, 3 )
		ON SELECTION BAR  2  OF аналiзи zvit_analiz(hConnect, 1 )
		ON SELECTION BAR  3  OF аналiзи zvit_analiz(hConnect, 2 )
		ON SELECTION BAR  4  OF аналiзи zvit_analiz(hConnect, 8 )
		ON SELECTION BAR  6  OF аналiзи zvit_analiz(hConnect, 7 )
		ON SELECTION BAR  8  OF аналiзи kalendar()
		ON SELECTION BAR  10  OF аналiзи zvit_analiz(hConnect, 33 )
		
	case rol_SUser=.t. and rol_Director=.f. and (skladcodep< 100  or skladcodep>= 200 )
	
		*_rwj0j7822 Звіти
		ii=CNTBAR('_rwj0j7822') 
		ii=ii+ 1 
		_asa='_rwj0j7822'
		jj= 8 
		*		jj - це пiсля якоaо елемента вставляти
		DEFINE BAR ii OF &_asa PROMPT "\<Aналiзи" AFTER GETBAR(_asa, jj) MESSAGE "Aналiзи"
		ON BAR ii OF &_asa ACTIVATE POPUP аналiзи
				
		DEFINE POPUP аналiзи MARGIN RELATIVE SHADOW COLOR SCHEME  4 
		DEFINE BAR  1  OF аналiзи PROMPT "Aналiз виручки по магазину" ;
			MESSAGE "Aналiз виручки на протязi мiсяця"
		DEFINE BAR  2  OF аналiзи PROMPT "Aналiз роботи магазину" ;
			MESSAGE "Aналiз роботи магазину"
		DEFINE BAR  3  OF аналiзи PROMPT "Виручка (Прихід Коштів)" ;
			MESSAGE "Виручка"
		DEFINE BAR  4  OF аналiзи PROMPT "\-"
		DEFINE BAR  5  OF аналiзи PROMPT "Рентабельнiсть клiєнтiв" ;
			MESSAGE "Рентабельнiсть клiєнтiв"
		DEFINE BAR  6  OF аналiзи PROMPT "\-"
		DEFINE BAR  7  OF аналiзи PROMPT "Термін оплат" ;
			MESSAGE "Термін оплат"
		ON SELECTION BAR  1  OF аналiзи zvit_analiz(hConnect, 3 )
		ON SELECTION BAR  2  OF аналiзи zvit_analiz(hConnect, 1 )
		ON SELECTION BAR  3  OF аналiзи iif(rol_Zarpl=.t.,zvit_analiz(hConnect, 8 ),MESSAGEBOX("Цей звіт "+hLogin+" Вам дивитися заборонено!", 0  +  16  +  0 ,'Сервер'))
		ON SELECTION BAR  5  OF аналiзи zvit_analiz(hConnect, 7 )
		ON SELECTION BAR  7  OF аналiзи kalendar()
	case rol_SUser=.t. and rol_Director=.f. and (skladcodep> 100  and skladcodep< 200 )
	
		*_rwj0j7822 Звіти
		ii=CNTBAR('_rwj0j7822') 
		ii=ii+ 1 
		_asa='_rwj0j7822'
		jj= 8 
		*		jj - це пiсля якоaо елемента вставляти
		DEFINE BAR ii OF &_asa PROMPT "\<Aналiзи" AFTER GETBAR(_asa, jj) MESSAGE "Aналiзи"
		ON BAR ii OF &_asa ACTIVATE POPUP аналiзи
				
		DEFINE POPUP аналiзи MARGIN RELATIVE SHADOW COLOR SCHEME  4 
		DEFINE BAR  1  OF аналiзи PROMPT "Aналiз виручки по магазину" ;
			MESSAGE "Aналiз виручки на протязi мiсяця"
		DEFINE BAR  2  OF аналiзи PROMPT "Виручка (Прихід Коштів)" ;
			MESSAGE "Виручка"
		ON SELECTION BAR  1  OF аналiзи zvit_analiz(hConnect, 3 )
		ON SELECTION BAR  2  OF аналiзи iif(rol_Zarpl=.t.,zvit_analiz(hConnect, 8 ),MESSAGEBOX("Цей звіт "+hLogin+" Вам дивитися заборонено!", 0  +  16  +  0 ,'Сервер'))

		RELEASE BAR  17  OF звітипотов
		RELEASE BAR  18  OF звітипотов
		RELEASE BAR  19  OF звітипотов
		
	endcase
return
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32705386
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую посмотреть на объектные обёртки над фоксовым меню, например
menulib - с их помошью управление меню значительно упрощается.

Posted via ActualForum NNTP Server 1.0
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32706269
isim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нескромный вопрос насчет menulib - эта библиотека не входит в стандартную поставку VFP (7,8) ?
...
Рейтинг: 0 / 0
настрока меню из проекта
    #32706288
isim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ваще то уже сам и нашел
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / настрока меню из проекта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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