Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ToolBar / 3 сообщений из 3, страница 1 из 1
16.05.2007, 22:08
    #34530783
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToolBar
У меня два ToolBar привязаных к _SCREEN. Один постоянный, а другой динамически изменяется в зависимости от выдраной ветки дерева. Динамически, должен быть первый. По этому на каждом клике по ноде я оба ToolBar удаляю и создаю заново. Вроде работает. Но если на клике одного из ToolBar вызвать NodeClick (пересоздать оба ToolBar), то последний меняет своё расположение и стаёт последним, а его последнее место остаётся пустым. Ещё раз делаем по нему клик - он стаёт на старое своё место. Запутано правда, если можете подскажите, как правельно организовать работу с ToolBar в даном случае. Вот код:

Код: 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.
*--- lvroot - значения поля root
#DEFINE C_ROOT_ARCHIVES			"Archives"
#DEFINE C_ROOT_SSECTIONS		"Ssections"
#DEFINE C_ROOT_USERS			"Users"
#DEFINE C_ROOT_PARAM			"Params"

#DEFINE FLDROOT						"root"				&&имя поля иаблицы
#DEFINE C_TOOLBAR_S4				"tlb_s4"				&&тулбар
#DEFINE C_TOOLBAR_ARCHIVES		"Tlb_Archives"		&&тулбар
#DEFINE C_PREFIXTOOLBAR			"Tlb_"

DEFINE CLASS MyTreeView AS TreeView
	PROCEDURE NodeClick
		LPARAMETERS node

		IF TYPE('This.Parent') = 'O' AND !ISNULL(This.Parent) AND LOWER(This.Parent.BaseClass) = "form"
			RETURN This.Parent.OnNodeClick(node)
		ENDIF
	ENDPROC
ENDDEFINE

DEFINE CLASS MyForm AS Form
	PROCEDURE OnNodeClick
		LPARAMETERS node

		LOCAL lcKey
		lcKey = node.Tag

		WITH This
			IF !.OpenView(C_VIEW_LVROOT,FLDROOTKYE,lcKey)       &&достаю информацию из курсора по даному node
				RETURN .F.
			ENDIF

			This.cPad=ALLTRIM(EVALUATE(FLDROOT))+C_PREFIXPAD
			PadRelease(This.cPad, C_MENU_ADMIN)
			.FormPad(This.cPad,ALLTRIM(EVALUATE(FLDROOTNAME)))
	
			.ToolbarRelease(EVALUATE([_Screen.]+C_TOOLBAR_S4))
			IF PEMSTATUS(_Screen,This.cToolbar, 5 )
				.ToolbarRelease(EVALUATE([_Screen.]+This.cToolbar))
			ENDIF

			This.cToolbar=C_PREFIXTOOLBAR+ALLTRIM(EVALUATE(FLDROOT))
			.Formtoolbar(C_TOOLBAR_S4)
			.Formtoolbar(This.cToolbar)
		ENDWITH
	ENDPROC

	PROCEDURE Formtoolbar
		LPARAMETERS tcTlb

		WITH _Screen
			.AddProperty(tcTlb)
			.&tcTlb=CREATEOBJECT(tcTlb)
			.&tcTlb..Show()
			.&tcTlb..Dock( 0 )
		ENDWITH
	ENDPROC

	PROCEDURE ToolbarRelease
		LPARAMETERS oTlb
	
		IF VARTYPE(oTlb) # [O] OR ISNULL(oTlb)
			RETURN .F.
		ENDIF
	
		oTlb.Release
	ENDPROC
ENDDEFINE
...
Рейтинг: 0 / 0
20.05.2007, 10:35
    #34537947
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToolBar
Честно говоря, не стал разбираться в коде, но если один ToolBar уничтожается и создается заново, то, возможно, в процессе создания необходимо сделать dock(-1) ранее существовавшего ToolBar, а потом выполнить Dock() в нужном порядке?
...
Рейтинг: 0 / 0
21.05.2007, 14:17
    #34539646
shanton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToolBar
Именно так, прямо в яблочко! Делаем ToolBar.Dock(-1), затем удаляем его и создаём новый:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
PROCEDURE ToolbarRelease
	LPARAMETERS oTlb
	
	IF VARTYPE(oTlb) # [O] OR ISNULL(oTlb)
		RETURN .F.
	ENDIF
	
	oTlb.Dock(- 1 )
	oTlb.Release
ENDPROC
все негативные ефекты исчезли. Большое спасибо!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / ToolBar / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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