Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Деревянный каталог / 11 сообщений из 11, страница 1 из 1
03.02.2006, 14:33
    #33522151
S_Fandey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Подскажите как возможно связать в дереве объекты из разных таблиц. Так что бы родительский объект находился в одной таблице, а дочерний в другой.
Дерево в свою очередь чтобы имело около 5-7 уровней с возможностью копирования объекта.
...
Рейтинг: 0 / 0
03.02.2006, 14:35
    #33522165
S_Fandey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Помогите чайнику апологеты Фокса. Пожайлуста!!!!
...
Рейтинг: 0 / 0
03.02.2006, 14:55
    #33522240
alex11100
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
таблицы сюда киньте и
нарисуйте, что Вы желаете увидеть
...
Рейтинг: 0 / 0
04.02.2006, 01:07
    #33523332
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Hi S_Fandey!

Дерево и так и так заполняется вручную - потому как вы напишете код
заполнения, так оно и будет - и совершенно никакой разницы нет заполняется
оно из одной таблицы, или из 10-ти.
Аналогично и для всего прочего - нет никаких таких специальых функций в
дереве ни для копирования, ни даже для простого перетакивания - всё это
реализуется руками - причём так как это нужно для конкретной задачи.
И наконец простой совет - начинать нужно с малого - изучить как вообще
работает дерево, как оно заполняется, какие там события происходят... Благо
материалов хватает - стоит лишь поискать.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
04.02.2006, 07:45
    #33523377
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Код: 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.
PUBLIC oform1

oform1=NEWOBJECT("form1")
oform1.Show
RETURN

DEFINE CLASS form1 AS form
	Top =  0 
	Left =  0 
	Height =  305 
	Width =  388 
	DoCreate = .T.
	Caption = "Net Tree"
	Icon = (_Screen.Icon)
	enabledrag = .F.
	onode = .NULL.
	Name = "Form1"
	indrag = .F.

	ADD OBJECT tree AS olecontrol WITH ;
		DragIcon = "images\dragmove.cur", ;
		Top =  0 , ;
		Left =  0 , ;
		Height =  206 , ;
		Width =  281 , ;
		Name = "Tree"


	ADD OBJECT images AS olecontrol WITH ;
		Top =  265 , ;
		Left =  0 , ;
		Height =  100 , ;
		Width =  100 , ;
		Name = "Images"

	PROCEDURE loadnode
		Lparameters m.parentid
		With this
			Local o, tmp[ 1 ], m.id
			Select * from NetTree where parentid=m.parentid into cursor _
			If _TALLY >  0 
				Scan all
					.Tree.Nodes.Add(m.parentid, 4 ,id,name,NodeType)
					m.id=id
					select count(*) from NetTree where ParentId=m.Id into array tmp
					If TMP[ 1 ]> 0 
						o=.Tree.Nodes.Add(m.id, 4 ,,)
						o.Tag='~'
					EndIf
				EndScan 
			EndIf
			USE in _
		EndWith
	ENDPROC

	PROCEDURE makevisible
		Lparameters m.id
		With this
			Local tmp[ 1 ], tmpcount, oNode, m.ParentID
			Select NetTree
			Locate for ID=m.ID 
			If Found()
				Dimension tmp[ 1 ]
				tmpCount= 0 
				m.ParentId=ParentID
				DO While Found()
					tmpCount = tmpCount +  1  
					Dimension tmp[tmpCount]
					Tmp[tmpCount]=ID
					If Type(".Tree.Nodes.Item(id)")='O' 
						Exit
					Else
						m.ParentID=ParentID
						Locate for ID=m.ParentID
					EndIf
				EndDo
				For i=tmpCount to  1  step - 1 
					Select NetTree
					Locate for Id=TMP[i]
					oNode=.Tree.Nodes.Item(id)
					.Tree.Expand(oNode)
				Next
				oNode.EnsureVisible()
				.Tree.SelectedItem=oNode
			EndIf
		EndWith
	ENDPROC

	PROCEDURE Init
		With this
			Select NetTree
			Go TOP
			.Tree.ImageList=.Images.Object
			.Tree.Nodes.Add(, 0 ,id,"Acme Network", 5 , 5 )
			.LoadNode(id)

			.Resize()

		EndWith
	ENDPROC

	PROCEDURE Resize
		With this
			.Tree.Width=.Width
			.Tree.Height=.Height
		EndWith
	ENDPROC

	PROCEDURE tree.Expand
		*** ActiveX Control Event ***
		LPARAMETERS node
		With this
			If Node.Children >  0 
				If Node.Child.Tag='~'
					Local m.Index
					m.Index=Node.Child.Index
					This.Nodes.Remove(m.index)
					This.parent.LoadNode(Node.Key)
				EndIf
			EndIf
		EndWith
	ENDPROC

	PROCEDURE tree.MouseDown
		*** ActiveX Control Event ***
		LPARAMETERS button, shift, x, y
		If button= 1  and ThisForm.EnableDrag 
			ThisForm.onode=This.SelectedItem 
		EndIf
	ENDPROC

	PROCEDURE tree.MouseMove
		*** ActiveX Control Event ***
		LPARAMETERS button, shift, x, y
		If Button= 1 
			If ThisForm.EnableDrag
				If Not ThisForm.oNode.Key='__________'
					ThisForm.Indrag=.T.
					This.Drag( 1 )
				EndIf
			EndIf
		EndIf
	ENDPROC

	PROCEDURE tree.NodeCheck
		*** ActiveX Control Event ***
		LPARAMETERS node

		this.Object.Enabled=.F.

		IF node.checked=.f. && Крыжик убираем - обычный шрифт и "-" в тексте
			node.Bold=.f.
			node.text=node.text+' -'
		ELSE && Крыжик добавляем - жирный шрифт и "+" в тексте
			node.Bold=.t.
			node.text=node.text+' +'
		ENDIF 
		this.Object.Enabled=.T.
	ENDPROC


	PROCEDURE tree.DragDrop
		LPARAMETERS oSource, nXCoord, nYCoord
		If IsNull(This.DropHighlight)
			thisform.indrag=.F.
		Else
			If ThisForm.oNode=This.DropHighlight
			Else
				If Type("ThisForm.oNode.Parent")="O" ;
				and Not IsNull(ThisForm.oNode.Parent) 

					Local m.Id, m.ParentID

					Select NetTree
					Locate for Id=ThisForm.oNode.Key
					If Found()
						Replace ParentID with This.DropHighlight.Key
						ThisForm.oNode.Parent=This.DropHighlight
					EndIf
				EndIf
				thisform.indrag=.F.
				this.DropHighlight=.NULL.
			EndIf
		EndIf
	ENDPROC

	PROCEDURE tree.DragOver
		LPARAMETERS oSource, nXCoord, nYCoord, nState
		If ThisForm.indrag 
			Local x,y, o
			x=nXCoord-This.Left
			y=nYCoord-This.Top
			This.DropHighlight=This.HitTest(x* 15 , y* 15 )

			If Vartype(This.DropHighlight)="O" ;
				and not IsNull(This.DropHighlight)

				If This.DropHighlight.Children >  0  ;
				and Not This.DropHighlight.Expanded 

					This.Expand(This.DropHighlight)
					This.DropHighlight.Expanded=.T.

				EndIf
			EndIf
		EndIf
	ENDPROC

ENDDEFINE
...
Рейтинг: 0 / 0
07.02.2006, 03:29
    #33527321
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Hi piva!

Не виснит закрытие формы по причине неразгружаемого нигде Form.oNode ?
Кстати поленился оформить пример чтоб он по Copy'n'Paste заработал :( А
всего-то и надо было описать olecontrol классы отдельно с указанием ProgId,
картинки в ImageList кодом напихать - скажем из Home(4), да тестовый курсор
на пяток записей сварганить...
А код на досуге сравню с тем что у меня накропано - я кстати сам Node не
сохраняю нигде - тока его Key :) И автозагрузку свёрнутых узлов при
Drag'n'Drop тоже не делал - зато делал "прокрутку" при нахождении курсора
вблизи верхнего или нижнего краёв контрола... Ну и коэффициенты перевода
твипов в пиксели (15) я считаю в Init дерева и сохраняю в его свойствах -
бывает что используют люди "большие" темы и там коэффициент будет другой...

Блин, давно вот зреет мысль сделать более-менее универсальный класс дерева -
т.е. вынести в свои понятные методы возможные действия - ну там CanDragNode,
CanDropNode, DoDragDrop, AddNode, NavigateToNode, FindInTree,
FindInCursor... Ну конечно завязать всё это по дефолту на одной простой
структуре курсора - чтоб среднестатистическое дерево можно было за пять
минут делать - указать пару свойств, прописать если надо пару "добавчиков" к
стандартно уже прописанным методам и вперёд...

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
07.02.2006, 07:29
    #33527381
piva
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Игорь - это просто заготовка для работы была - пробовал drag'ать узлы - только до реальной реальзации так дело и не дошло - оказались другие работы важнее - а сюда выложил просто в качестве примера, который просил автор темы. Хотя наверное сначала автору было бы неплохо почитать статьи Юры Шутенко про treeview
...
Рейтинг: 0 / 0
10.02.2006, 15:07
    #33537314
S_Fandey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Вот рисунок организации католога
...
Рейтинг: 0 / 0
10.02.2006, 15:22
    #33537384
S_Fandey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Вот фрагмент базы данных работающей с деревом катологизатора
С меня сто грамм и пончик
...
Рейтинг: 0 / 0
12.02.2006, 02:28
    #33539232
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Hi piva!

А, ну тогдя понятно...
Кстати вот очередная фишка дерева - Пишем в Expand event код по "подгрузке
уровня" - т.е. динамическое заполнение делаем - а оказывается этот код не
всегда вызывается!!! Если активировать Shortcut меню, а потом сразу (не
закрывая его отдельно) давить на "плюсик" для раскрытия узла, событие Expand
не срабатывает :(
Пришлось для фиктивных узлов-заглушек (ну те которые помогают вывести
"плюсик") писать осмысленный текст - типа "Надави на этот узел чтобы увидеть
реальные данные", и текст ставить серым (слегка блеклым) цветом - ну а уж в
NodeClick добавить вызов Expand для Parent - узла, ежели тиснули по этой
страшной заглушке :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
15.02.2006, 10:52
    #33545537
S_Fandey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Деревянный каталог
Спасибо Всем Вам за ваши ответы и время уделённое мне!!!
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Деревянный каталог / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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