 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
jeloguin Ens

Registrado: 16 Dic 2003Mensajes: 25Ubicación: MADRID
|
Publicado: Lun 16 Ene, 2006 12:32 pm Asunto: SELECCIONAR MANUALMENTE NODOS EN TTREEVIEW |
|
|
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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 16 Ene, 2006 5:43 pm Asunto: |
|
|
¿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 |
|
 |
jeloguin Ens

Registrado: 16 Dic 2003Mensajes: 25Ubicación: MADRID
|
Publicado: Lun 16 Ene, 2006 5:53 pm Asunto: |
|
|
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 |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Lun 16 Ene, 2006 7:45 pm Asunto: |
|
|
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 |
|
 |
jeloguin Ens

Registrado: 16 Dic 2003Mensajes: 25Ubicación: MADRID
|
Publicado: Mie 18 Ene, 2006 8:18 pm Asunto: |
|
|
Gracias Buildero !!!
Probe el codigo y me va bien.
Gracias otra vez.
Un saludo. |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|