Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Tip: a vueltas con los TreeView (https://www.clubdelphi.com/foros/showthread.php?t=96660)

navbuoy 30-03-2024 19:27:02

Tip: a vueltas con los TreeView
 
Hola, os pongo un par de cosas que he ido viendo sobre los TreeView (que tienen un poco de mandanga los jodios)

1ª cosa) Un TreeView tiene un nodo ROOT (raiz) que es el principal y luego Sub-Nodos

si queremos añadir un nodo RAIZ ROOT lo haremos asi en C++ Builder

Código:


  /////// Suponiendo que tengamos un EditBox llamado Edit_Categoria
/////////////////////////////////////////////////////////////////////////////////

  TreeView1->Items->AddChild(NULL, Edit_Categoria->Text);

  //// Con esta linea guardamos la estructura del TreeView en un archivo para mas tarde si queremos "rehacer el TreeView"
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  TreeView1->SaveToFile("treeview_data.txt");


2ª cosa) si vamos a crear SubNodos, lo haremos sabiendo de que nodo parte como raiz,

Código:


 TTreeNode *Node1;

  Node1 = TreeView1->Selected;    //Usamos el Nodo que tengamos seleccionado como Base
  TreeView1->Items->AddChild(Node1, Edit_Categoria->Text);  //y le añadimos el nombre que tengamos en el supuesto EditBox para ello

 TreeView1->SaveToFile("treeview_data.txt");


Finalmente si lo que queremos es borrar una categoria o sub-nodo lo haremos asi:
(yo lo que hice es crear un button que es "Eliminar Categoria" que cuando cliqueas en el TreeView borra lo que has cliqueado en el arbol

este codigo lo coloque en el OnMouseDown del Treeview ayudado de una variable global bool llamada FLAG_DELETE_CAT que es la que se
activa cuando va a borrar algo del TreeView (para que no borre cuando pulsemos en el TreeView solo activandola cuando pulsamos el boton
de borrar Categoria

Código:


void __fastcall TForm1::TreeView1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift,
                  int X, int Y)
{
          THitTests HT;

  if (FLAG_DELETE_CAT == true && Sender->ClassNameIs("TTreeView"))
  {

        TTreeView *pTV = dynamic_cast<TTreeView *>(Sender);
        HT = pTV->GetHitTestInfoAt(X,Y);
        if (HT.Contains(htOnItem))
        {
                if(Application->MessageBox(TreeView1->Selected->Text.w_str(),
                                L"Esta seguro que quiere borrar la categoria", MB_OKCANCEL) == IDOK)
                {
                        if(Application->MessageBox(L"Notas de la Categoria",
                                L"Desea que se borren tambien las NOTAS asociadas a esa Categoria?", MB_OKCANCEL) == IDOK)
                                {
                                        pTV->Items->Delete(pTV->GetNodeAt(X,Y));

                                        TreeView1->SaveToFile("treeview_data.txt");
                                //Añadir aqui la funcion para borrar las notas (esto son cosas mias de mi programa,
                                ///////////////////////////////////////////////

                                        }


                                else {  //No quiere borrar las notas asociadas a la Categoria
                                          FLAG_DELETE_CAT = false;
                                          return;
                                }

                        }


                else {  //No quiere borrar la categoria...
                        FLAG_DELETE_CAT = false; 
                        return; }
                                }


  }

  FLAG_DELETE_CAT = false;

}



La franja horaria es GMT +2. Ahora son las 06:53:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi