Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

SELECCIONAR MANUALMENTE NODOS EN TTREEVIEW

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: SELECCIONAR MANUALMENTE NODOS EN TTREEVIEW Responder citando

Buenas.
Mi problema es que quiero que al pinchar con el raton sobre un nodo Raiz en un TreeView, se seleccionen automaticamente todos sus nodos hijos.
Mi principal problema es que usando la funcion Select(TTreeNode *,TShiftState*) del TreeView, no soy capaz de seleccionar un Nodo.
Alguien sabe como hacerlo ??

Muchas gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

¿Tienes establecida la propiedad MultiSelect del Treeview a True.?
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Buenas Buildero.

Si, tengo puesta la propiedad MultiSelect a true, y las opciones msShift Select, y msControlSelect a true.

El problema, es que cuando selecciono manualmente un nodo, con la funcion Select, se me borra la seleccion anterior, a no ser que presione la tecla Ctrl o shift de teclado.

Entonces se me ocurrio simular la pulsacion de esas teclas con una funcion que vi en el foro keybd_event(VK_CONTROL, 1, 0, 0), pero no me funciona. Porque siempre se me queda pinchada la tecla ctrl, y si pongo
despues la linea keybd_event(VK_CONTROL, 1, KEYEVENTF_KEYUP, 0); pues el codigo deja de funcionar.

La verdad es que estoy muy perdido ya, no se como hacerlo, porque lo unico que quiero es poder seleccionar un grupo de nodos manualmente sin que se me borre la seleccion anterior.

Muchas gracias por contestar.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Bien, te mando una pequeña prueba que he hecho. Claro es posible que haya que modificarle algo para que se aducúe a tus necesidades, pero es solo para que te des una idea.

Agrega un TreeView con algunos elementos en modo diseño....sólo para hacer la prueba..

Asignar valor a las propiedades:

HideSelection = false
MultiSelect = true

y de preferencia
ReadOnly = true;

La idea es crear una Lista de los nodos que serán seleccionados, para esto realizaremos la declaracion de una lista....esta declaracion la puedes hacer en la parte pública o privada de la clase. Crea una función que se encargue de llenar la lista... la llamaremos AgregarNodos.

Código:

private:
        TList * Lista;
        void __fastcall AgregarNodos(TTreeNode * Nodo);   // User declarations


En el constructor del form creas una instancia de la lista

Código:

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
         Lista = new TList();
}


En el evento MouseUp del TreeView agregar el siguiente código:

Código:


//---------------------------------------------------------------------------
void __fastcall TForm1::TreeView1MouseUp(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
        // Si esta presionada la tecla Control
        // Se agregan los nodos a la lista
        // en caso contrario, se limpia la lista
        if( Shift.Contains(ssCtrl))
                AgregarNodos(TreeView1->Selected);
        else
                Lista->Clear();
}
//---------------------------------------------------------------------------



Y esta es la implementación de la función.
Código:


void __fastcall TForm1::AgregarNodos(TTreeNode * Nodo)
{
        //Se agrega a la lista el nodo seleccionado
        Lista->Add(Nodo);

        // obtiene el primer nodo hijo del nodo seleccionado
        Nodo = Nodo->getFirstChild();

        //Mientras el nodo tenga hermanos
        // Agregar a la lista
        while ( Nodo )
        {
                Lista->Add(Nodo);
                Nodo = Nodo->getNextSibling();
        }
       
        // Seleccionar los nodos pasando como parámetro la lista
        // de nodos
        TreeView1->Select(Lista);
}


Toma en cuanta en que momento debes limpiar la lista, eso dependera de tus necesidades.

Saludos
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias Buildero !!!

Probe el codigo y me va bien.

Gracias otra vez.

Un saludo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.