mrrex
Junior Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору akaGM Цитата: ячейки грида делал редактируемыми? вполне хватило бы чисел и строк... можешь примером поделиться? а то поставляемый как-то не очень... | Все делал. Все.... тока яичницу не жарил на этом дереве... похож я сюда один заглядываю с возможностями поделиться примерами. братцы, у меня работы ща, жуть! так что если слегка торможу с ответами - не обессудьте, плиз. вот тут анату75 замылил ответ, чтоб втуне не пропадало повторяю здесь. немного не в тему akaGM, сорри > 1. Есть список имён с номерами для каждого. Например > Иванов(1-25,1-36), Петров(6-36, 7-48), Сидоров (8-48,9-21). не совсем понятно, но я предполагаю, что это номера служебных телефонов. Это просто уточнение структуры хранимой информации. т.е. каждый чел имеет два номера. > Как организовать дерево? Что объявить? Что-куда "запихивать"? для начала, создаем структуру, которая описывате хранимые данные. количество и типы полей НЕ обязателно соответсвуют столбцам таблицы. просто в большинстве случаев это (их соответсявие) гораздо .... ээээ.... проще. Итак. в начале Cpp файла (апосля инклюдов и прагм) объявляем (применительно к твоему примеру ): Код: typedef struct { Ansistring Name; //-- ФИО Ansistring tel1, tel2; //-- телефоны }TPeople; | далее, как строить дерево. где - сам решай. как: Код: __fastcall Func() { TVirtualNode *Node; TPeople *dat; trPep->RootNodeCount=0; ///------>>>>>trPep - твое дерево VirtualStringTree trPep->NodeDataSize=sizeof(TPeop); int cnt=???; //-- количество людей for (int i=0; i <cnt; i++) { Node=trPep->AddChild(NULL,NULL); dat= (TPeop*)trPep->GetNodeData(Node); dat->Name = "XXXXXXXXX"; dat->tel1 = "111111111"; dat->tel2 = "222222222"; } //-- далее необязательные но логичные по сути телодвижения //-- 1. принудительная сортировка trPep->SortTree(0/*колонка дерева*/,trPep->Header->SortDirection,true); //--2. первый элемент делаем текущим trPep->FocusedNode=trPep->GetFirst(); trPep->Selected[trPep->FocusedNode]=true; //-- 3. скролл дерева для показа в области отображения текущего элемента trPep->ScrollIntoView(trPep->FocusedNode,true,true); //-- управление командами редактирования if (trPep->RootNodeCount==0) { cmEdit->Enabled=false; cmDel->Enabled=false; } | >>> Node=trPep->AddChild(NULL,NULL); !!!! в этой строке задается структура дерева. если вместо первого параметра давать не NULL а ссылку на узел ( TVirtualNode *Node), то указанный узел будет родителем для вставляемого. ну, я думаю, что колонки в дерево ты сможешь добавить сам. далее, как дерево будет сортировать данные. Тут я немного сокращу повествование, устал после работы, но думаю будет понятно. извини, адаптируй к примеру сам. событие OnCompareNodes дерева: Код: void __fastcall TwinAgents::trAgCompareNodes(TBaseVirtualTree *Sender, PVirtualNode Node1, PVirtualNode Node2, TColumnIndex Column, int &Result) { TAg* dat1= (TAg*)trAg->GetNodeData(Node1); TAg* dat2= (TAg*)trAg->GetNodeData(Node2); if (Column>0) { Result=CompareText(dat1->Name,dat2->Name); } else { Result=dat1->ID-dat2->ID; } } | отображение СТРОКОВЫХ (И ТОЛЬКО!!!) данных в ячейках: событие - OnGetText Код: void __fastcall TwinAgents::trAgGetText(TBaseVirtualTree *Sender, PVirtualNode Node, TColumnIndex Column, TVSTTextType TextType, WideString &CellText) { TAg* dat= (TAg*)trAg->GetNodeData(Node); switch (Column) { case 0: { CellText=IntToStr(dat->ID); break; } case 1: { CellText=dat->Name; break; } case 2: { CellText=dat->Tel; break; } } } | событие смены текущей строки - OnFocusChange Внимание, парни. если есть вопросы прошу в мыло (я указал чуть выше) либо прямо в аську. Единственная просьба, представляйтесь в начале разговора нормальными именами. Да, еще, чтоб потом обид не было и разочарований. ВСЕ примеры ТОЛЬКО на С++ Builder. Дельфями не пользуюсь. akaGM с учетом вышесказанного разберешся, в исходнике на С++? У меня сейчас времени не хватает подробно расписывать.... вот после 20-23 сентября будет... сейчас могу скинуть кусок проекта (один из файлов) там все есть. мугу сразу сюда запостить. Либо, если народ простит, то чуть позже с комментариями... хотя там их будет просто куча. стока граблей, сразу все и не вспомниш. |