Как построить tree?
Модераторы: m0p3e, edward_K, Модераторы
Как построить tree?
Проблема такова, программист по Галактике ушел, а остался я, так вот с Object Pascal у меня очень туго. А надо сделать форму в которой нужно, что бы было дерево организации, соответствено с этими организациями заключены различные договора, также имеются акты выполненых работ. Дерево по организациям с горем построил, а вот чтобы дерево открывалось и там были договора не получается. Как это сделать? Подскажите, желательно на примере с подробными комминтариями, а то чего то непонимаю я как это все делается или ссылку на литературу хорошую, или где можно почитать про это.
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
1. Vip это другой язык.
2. речь идет усе таки не об отчете, а о фейсе?
3. проще всего конечно реализовать во временную таблу.
тогда пойдут все рекомендации по работе с деревом на этом форуме
4. как вариант могет быть организовать внизу закладки с договорами и прочей бодягой аналогично фейсу "исполнение договоров"?
2. речь идет усе таки не об отчете, а о фейсе?
3. проще всего конечно реализовать во временную таблу.
тогда пойдут все рекомендации по работе с деревом на этом форуме
4. как вариант могет быть организовать внизу закладки с договорами и прочей бодягой аналогично фейсу "исполнение договоров"?
-
- Местный житель
- Сообщения: 216
- Зарегистрирован: 25 апр 2006, 12:05
- Откуда: г.Ростов-на-Дону
- Контактная информация:
Посмотри вот это может идеи появятся...
Код: Выделить всё
interface ETree 'Tree';
Show at (0,0,300,300);
Table STRUCT TreeRols ""
(
nRec : comp ,
Name : String[40] ,
Node : Word
)
With Index
(
main01 = nRec
)
;
Var
CurOwner:Comp;
CurNode :Word;
qwe:Word;
Create view TreeView as
Select * from TreeRols,RolsCEX,RolsLine,SpRols,KatPodr,KatMC, KatPodr KatPodr1
Where
((
rolscex.nrec==rolsline.crec and
rolsline.nrec==sprols.cline and
rolscex.CEX==katpodr.nrec and
rolsline.Line==katpodr1.nrec and
sprols.cmc==katmc.nrec
))
;
ToolBar TreeCtrl;
Tree myTree 'Дерево';
Show at (,,100,);
Fields
if(TreeGetNodeTable(myTree) = #TreeRols,TreeRols.Name,
if(TreeGetNodeTable(myTree) = #Rolscex,KatPodr.Name,
if(TreeGetNodeTable(myTree) = #Rolsline,KatPodr1.Name,
if(TreeGetNodeTable(myTree) = #spRols,KatMC.Name,KatMC.Name)))):[50];
End;
browse spRols;
show (101,,,);
Table spRols;
Fields
spRols.NPP '№ П/П':Protect;
spRols.Date 'Дата';
//KatMC.Name 'Маценность';
spRols.PRIZN 'Признок износа';
spRols.FAKT 'Фактически';
spRols.Procizn 'Процент износа';
end;
HandleEvent
cmDefault: message(RolsCEX.CEX+' '+RolsLine.Line)
end;
Window EditCEX 'Дерево' EscClose, DoAccept;
Show at (10,10,70,16);
Screen ScrRepGrLst1;
Table RolsCEX;
Fields
KatPodr.Name ('Цех',,) ,PickButton,Protect;
<<
Cчет .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End; //'screen
HandleEvent
//cmDefault:{ message(TreeGetNodeTable(myTree)+' '+CurTable+' '+CurField);}
cmPick:
{
runinterface('GETAPODR',RolsCEX.CEX,qwe);
set RolsCEX.Nrec:=KatPodr.NREC;
set RolsCEX.CEX:=KatPodr.NREC;
if INSERT CURRENT RolsCEX=tsDuplicateKey then
{message('Данный Цех существует! Выберите другой')};
}
end;
End; //'window
Window EditLINE 'Дерево' EscClose, DoAccept;
Show at (10,10,70,16);
Screen ScrRepGrLst2;
Table RolsLine;
Fields
KatPodr1.Name ('Цех',,) ,PickButton,Protect;
<<
Cчет .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End; //'screen
HandleEvent
//cmDefault:{ message(TreeGetNodeTable(myTree)+' '+CurTable+' '+CurField);}
cmPick:
{
runinterface('GETAPODR',RolsLine.Line,qwe);
set RolsLine.Nrec:=RolsCEX.NREC+KatPodr1.NREC;
set Rolsline.crec:=RolsCEX.NREC;
set Rolsline.Line:=KatPodr1.NREC;
if INSERT CURRENT RolsLine=tsDuplicateKey then
{message('Данная Линия существует! Выберите другую!')};
}
end;
End; //'window
Window EditRols 'Дерево' EscClose, DoAccept;
Show at (10,10,70,16);
Screen ScrRepGrLst3;
Table spRols;
Fields
KatMC.Name ('Цех',,) ,PickButton,Protect;
<<
Cчет .@@@@@@@@@@@@@@@@@@@@@@@@@@@@
>>
End; //'screen
HandleEvent
//cmDefault:{ message(TreeGetNodeTable(myTree)+' '+CurTable+' '+CurField);}
cmPick:
{
runinterface('GETMC',spRols.cmc);
//set spRols.Nrec:=KatMC.NREC;
set spRols.cLine:=RolsLine.NREC;
set spRols.cmc:=KatMC.NREC;
if INSERT CURRENT spRols=tsDuplicateKey then
{message('Данная Линия существует! Выберите другую!')};
}
end;
End; //'window
HandleEvent
cmInit:
{
ClearBuffer(#TreeRols);
set TreeRols.Nrec:=1;
set TreeRols.Name:='Система';
set TreeRols.Node:=1;
INSERT CURRENT TreeRols;
}
cmDefault:{ message(RolsCEX.NREC+' '+TreeGetNodeTable(myTree)+' '+CurTable+' '+CurField);}
cmTreeDown:
{
case TreeGetNodeTable(myTree) of
#TreeRols:{TreeSetNodeTable(myTree,#Rolscex);
RescanPanel(#TreeRols);}
#Rolscex:{TreeSetNodeTable(myTree,#Rolsline);
RescanPanel(#Rolscex);}
#Rolsline:{TreeSetNodeTable(myTree,#spRols);
RescanPanel(#Rolsline);}
end;
};
cmTreeNodeType :
{ if (TreeGetNodeTable(myTree) = #spRols)
then {TreeSetNodeType(myTree,2,'RemBADPOINT')}
}
cmInsert:{
if (TreeGetNodeTable(myTree)=0) then {RunWindow(EditCEX)};
if (TreeGetNodeTable(myTree)=1) then {RunWindow(EditLine)};
if (TreeGetNodeTable(myTree)=2) then {RunWindow(EditRols)};
}
cmDeleteRecord:{DELETE spRols;DELETE RolsLine;DELETE
CURRENT RolsCEX;RescanPanel(#RolsCEX);}
end;
end.
-
- Местный житель
- Сообщения: 216
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Беларусь, Минск
- Контактная информация:
Я когда давно баловался
страница с советами
http://www.randun.ws/howto.php
в частности
http://www.randun.ws/h_body.php?id=25

страница с советами
http://www.randun.ws/howto.php
в частности
http://www.randun.ws/h_body.php?id=25
dP
-
- Слесарь-системщик
- Сообщения: 304
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
- Контактная информация:
Ничего страшного, если только вы не пытаетесь одновременно разворачивать естественную иерархию объектов. То есть, дерево на нескольких узлах можно построить только в том случае, если все записи некоторого узла располагаются на одинаковой глубине. Лично мне больше нравится такой способ: всё, что можно, запихнуть в таблицу в памяти. В разумных пределах, конечно.
Виталий