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

Откуда: Украина г. Хмельницкий
Сообщений: 628
В програме предусмотрено главное меню (когда ничего не открыто, голый SCREEN) и меню когда зупускается форма. При запуске формы главное меню должно исчезнуть и появится новое меню. При закрытии формы новое меню исчезает и появляется главное меню. Я определяю оба меню, но в начале активизирую главное. При старте формы главное помещаю в стек и активизирую другое меню. При закрытии формы главное меню достаю из стека:

SET SYSMENU OFF

DEFINE MENU MaineMenu BAR
....

DEFINE MENU FormMenu BAR
....


ACTIVATE MENU MaineMenu NOWAIT

DEFINE CLASS MeForm AS FORM

PROCEDURE Init
PUSH MENU MaineMenu
ACTIVATE MENU FormMenu NOWAIT
ENDPROC

PROCEDURE Destory
POP MENU MaineMenu
ACTIVATE MENU MaineMenu NOWAIT
ENDPROC

ENDDEFINE

Правельно я делаю? Или перед активацией новаого меню старое надо DEACTIVATE? Или RELEASE?
Как правельно построить работу с меню в даном случае?
27 апр 07, 12:49    [4078696]     Ответить | Цитировать Сообщить модератору
 Re: menu  [new]
Sergey Sizov.
Guest
В общем случае ничего активировать и деактивировать не надо. Надо пользоваться, при необходимости Push Menu и Pop Menu.
27 апр 07, 12:54    [4078736]     Ответить | Цитировать Сообщить модератору
 Re: menu  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Спасибо! Понятно.
Не хочу начинать новый топик. Вопрос не по теме.
На форме есть TreeView и Grid. В методе TreeView.NodeClick прописываю:
WAIT node.text WINDOW NOWAIT
При загрузке формы активным стаёт первый node дерева, но метод NodeClick выполняется только после того как я клацну на node. Но если node уже активный, то и NodeClick должен бы выполнится. Как сделать чтоб при загрузке формы node который стал активным выполнил свой NodeClick? Пробовал ручками на ThisForm.Init песле населения дерева прописать:
IF !ISNULL(This.TreeView1.SelectedItem)
This.TreeView1.NodeClick(This.TreeView1.SelectedItem)
ENDIF
но условие не выполняется, по идее node ещё не выбран. А когда он стаёт активным? Может на Activate формы прописать?
27 апр 07, 13:22    [4078947]     Ответить | Цитировать Сообщить модератору
 Re: menu  [new]
alex11100
Guest
выдернул из своего
посмотри как я при старте восстанавливаю положение
(у меня здесь еще пейджфрейм)

метод INIT формы
	
            if empty(lnSave) or !.set_currentNode()
		With .pgFrame.oPage1.oleTreeView
			.SetFocus ()
			.Click ()
			.LabelEdit = 0
		endwith
	endif


метод set_currentNode
* становимся на нужную страницу и нужный узел
with this
	Select (.cSetupAlias)
	local lnPage, lcKey, loPage, loNode
	lnPage = nPage
	lcKey  = alltrim(cKey)
 	if !empty(lnPage)
		try 
			loPage = .pgFrame.Pages(lnPage)
		catch
		endtry
		if vartype(loPage)='O'
			if lnPage<>1
				this.pgFrame.ActivePage = lnPage
				thisform.ChangeGroupPage(loPage)
				loPage.Fontbold = .t.
			endif
			if !empty(lcKey)
				try
					loNode = loPage.oleTreeView.nodes(lcKey)
				catch
				endtry
				if vartype(loNode)='O'
					store .t. to loNode.Expanded, loNode.Selected
				else
					return .f.
				endif
			endif
			with loPage.oleTreeView
				.SetFocus ()
				.Click ()
				.LabelEdit = 0
			endwith 
		else
			return .f.
		endif
	else
		return .f.
	endif
endwith
return .t.
27 апр 07, 13:51    [4079170]     Ответить | Цитировать Сообщить модератору
 Re: menu  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Большое спасибо!
Опять к меню. Есть меню:

#DEFINE C_MENU_ADM "AdmMenu"

LOCAL lcMenu
lcMenu=C_MENU_ADM
DEFINE MENU lcMenu BAR

DEFINE PAD pad07 OF lcMenu PROMPT 'Защита'
DEFINE PAD pad08 OF lcMenu PROMPT 'Настройка'
DEFINE PAD pad09 OF lcMenu PROMPT 'Помощь'

к этому меню нужно добавлять в начало ещё один пункт PAD, в зависимости от того на каком TreeView.Node кликнул. Прописывать это собираюсь на NodeClick. Вопрос как пункт меню в начало, конешно можно написать BEFORE pad07, А завтра там не pad07, тоесть не привязываясь к имени. И ещё. Перед тем как добавить в начало пункт нужно удалить тот что есть, если он есть. Думаю привязатся к количеству, если CHTPAD()>3, то первый RELEASE. А чтобы сделать RELEASE PAD нужно знать его имя, оно может быть разное. Можна в цыкле прочитать все PAD от первого до последнего, но низнаю как по номеру PAD получить его имя? Помогите пожалуйста, в который раз.
27 апр 07, 14:53    [4079606]     Ответить | Цитировать Сообщить модератору
 Re: menu  [new]
alex11100
Guest
? GETPAD('_msysmenu',1)
27 апр 07, 15:37    [4080003]     Ответить | Цитировать Сообщить модератору
 Re: menu  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
Подскажите пожалуйста, как добавить пункт меню в начало меню? Делаю так:

DEFINE PAD pad99 OF AdmMenu PROMPT 'Архивы' BEFORE pad07

но в результате пункт добавляется в конец меню.
3 май 07, 17:10    [4096254]     Ответить | Цитировать Сообщить модератору
 Re: menu  [new]
shanton
Member

Откуда: Украина г. Хмельницкий
Сообщений: 628
нет... всётаки получается... извените!
3 май 07, 17:12    [4096274]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить