![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
Eljuan: te paso un procedimiento que que cambia el texto a toda la descendencia de un nodo determinado, supongo que es parecido a lo que quieres hacer:
Como bien dijo Lepe, HasChildren devuelve true si el nodo tiene descendencia. Item[n] te permite trabajar con el hijo número n del nodo actual (están indexados a partir de 0). Count cuenta cuantos hijos tiene el nodo actual. Para ejecutarlo, suponiendo que queres alterar el texto de la descendecia del nodo seleccionado:
Para adaptarlo a lo que necesitas, solo tendrías que cambiar la asignación de texto al nodo por la/s operación/es que necesitas realizar. Espero que te sirva. Saludos, Enrique Gabriel Baquela. Última edición por egbaquela fecha: 23-02-2008 a las 04:33:30. |
|
#2
|
|||
|
|||
|
Hola de nuevo, sabriais alguno decirme como resaltar (cambiando el color o el fondo por ejemplo), de ciertos nodos que son el resultado de una busqueda?
procedure TFHSFabaMain.BuscayResaltaNodo(n:string); var Nodo: TTreeNode; I: Integer; begin for I := 0 to tv.Items.Count - 1 do begin Nodo := tv.Items[i]; if Pos(n,Nodo.Text)>0 then begin Nodo.Selected := true; Nodo.MakeVisible; AQUI NECESITO COLOREAR O RESALTAR DE ALGUNA MANERA LOS NODOS COINCIDENTES break; end; end; end; |
|
#3
|
|||
|
|||
|
Resaltar o colorear nodos
Elijuan: la verdad es que no tenía ni idea
, pero buscando en el google encontre esta web :http://delphiallimite.blogspot.com/2...view-y-ii.html Fijate que explica como cambiar los atributos de las fuentes y como asociarle imágenes a cada ícono. Saludos, Enrique Gabriel Baquela. Http://enrique-gabriel-baquela.neurona.com |
|
#4
|
|||
|
|||
|
Dado el procedimiento
para cargar el arbol de la BD procedure TFrmAuditoriaArbolCausa.CargarTree(Sender: TObject; SQL: String); os consulto lo siguiente: he añadido un campo orden a cada registro de la base de datos para mostrar los nodos de una forma ordenada, y en la consulta del procedimiento, hago "order by orden". Pues da un fallo, invalid index ¿Alguna sugerencia? |
|
#5
|
|||
|
|||
|
Falla en el SQL
¿Podrías poner la sentencia SQL de la consulta que generás?
¿Con que base de datos trabajás?. Saludos, Enrique Gabriel Baquela. |
|
#6
|
|||
|
|||
|
Este es el procedimiento, el que tu indicaste pero
modificado para mi consulta: procedure TFHSFabaMain.CargarTree(Sender: TObject; SQL: String;raiz:integer); var I, X, N,C: Integer; Nod: TTreeNode; NodSuplementario: TTreeNode; MiPunteroInteger:^Integer; q:TDataSet; color:string; begin //Proceso que carga el arbol desde la BD //Obtenemos los parametros para los colores e.g('_col1',e.ValorParametro('FAB/NOD/NIV1/COLOR',False)); e.g('_col2',e.ValorParametro('FAB/NOD/NIV2/COLOR',False)); e.g('_col3',e.ValorParametro('FAB/NOD/NIV3/COLOR',False)); e.g('_col4',e.ValorParametro('FAB/NOD/NIV4/COLOR',False)); e.g('_col5',e.ValorParametro('FAB/NOD/NIV5/COLOR',False)); e.g('_col6',e.ValorParametro('FAB/NOD/NIV6/COLOR',False)); e.g('_col7',e.ValorParametro('FAB/NOD/NIV7/COLOR',False)); e.g('_col8',e.ValorParametro('FAB/NOD/NIV8/COLOR',False)); e.g('_col9',e.ValorParametro('FAB/NOD/NIV9/COLOR',False)); e.g('_col10',e.ValorParametro('FAB/NOD/NIV10/COLOR',False)); //Bloqueamos el onChange para que no se ejecute e.g('_bloqchange',1); tv.Items.Clear; // Cargo la consulta a mostrar en el TreeView q :=e.DataSetFromSQL(self,'select codigo,padre,nombre,nivel from fab_nodos where emp=:e_empresa and dep=:e_departamento order by orden'); q.Close; q.Open; if (q.eof) then exit; //Recorro la consulta registro por registro C:=0; q.First; while not q.eof do begin C:=C+1; q.Next; end; q.First; for X:=0 to (C-1) do begin I:=q.fieldByName('Padre').asinteger; // Si el campo padre vale 0 (no tiene padre) if I=raiz then begin //Agrego un nuevo nodo, que nazca directamente del raíz Nod:=tv.Items.Add (nil,q.FieldByName('nivel').asstring+'.'+q.FieldByName('codigo').asstring+' '+q.FieldByName('nombre').asstring); Nod.ImageIndex:=-1; New(MiPunteroInteger); MiPunteroInteger^:=q.Fieldbyname('Codigo').asinteger; nod.Data:=MiPunteroInteger; nod.Selected :=true; end else begin //Agrego un nuevo nodo hijo al padre que le corresponda //Recorro desde el último nodo al primero, hasta que la propiedad data (donde guardo //el código de cada nodo, sea igual al campo padre del nodo a agregar N:=tv.Items.Count -1; while PunteroInteger(tv.Items[N].Data)^ <>I do Dec(N); //Agrego el nodo hijo nodSuplementario:=tv.Items.AddChild(tv.Items[N],q.FieldByName('nivel').asstring+'.'+q.FieldByName('codigo').asstring+' '+q.FieldByName('nombre').asstring); nodSuplementario.ImageIndex:=-1; New(MiPunteroInteger); MiPunteroInteger^:= q.Fieldbyname('Codigo').asinteger; nodSuplementario.Data:=MiPunteroInteger; Nod.selected:=True; Nod.Expanded:=False; end; q.Next; end; if (e.ValorParametro('FAB/TV','')=1) then tv.FullExpand; if (e.ValorParametro('FAB/TV','')=2) then tv.FullCollapse; e.g('_bloqchange',0); if (tv.Items.Count>0) then tvChange(tv,tv.Selected); end; Cuando se crea un nuevo nodo en el arbol el campo orden se inicializa a 100; como tengo implementada una opcion de copiar y pegar en el arbol lo que pretendes que cuando copio y pego , el nodo copiado se inserte inmediatamente antes que el destino en el que lo estoy pegando (orden 99), pues hasta ahi lo hace bien, incluso si copio y pego alguno mas, el problema viene al ejecutar el procedure para cargar el arbol, da un error de index, supongo que porque al no estar ordenado de padres a hijoss... ¿se os ocurre algo? Me seria de gran ayuda. La base de datos es Firebird 2.0 |
|
#7
|
|||
|
|||
|
Cortar y pegar nodos
Para lo que queres hacer no es necesario agregar un campo a la BD, los TreeNode tienen métodos para moverse.
Podes hacerlo de la siguiente manera:
Antes de eso tenes que declarar una variable en la unidad del tipo TTreeNode llamada NodoCortado (o podes heredar el TTreeNode y agregarle un campo para este uso y poner las funciones anteriores como métodos). El segundo parámetro del MoveTo indica donde mover el nodo respecto del nodo pasado como primer parámetro, puede valer: * naInsert: hermano inmediatamente superior * naAdd: último hermano * naAddFirst: primer hermano * naChild: ultimo hijo * naChildFirst: primer hijo Fijate si te sirve. Saludos, Enrique Gabriel Baquela. http://enrique-gabriel-baquela.neurona.com |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Copiar un treeview a otro treeview | mierda | OOP | 0 | 26-07-2006 13:29:17 |
| treeview | kiringui | OOP | 4 | 18-07-2006 12:52:38 |
| Ver Mi Pc en un TreeView | gilberto_1126 | API de Windows | 2 | 22-06-2004 02:07:36 |
| Como utilizar el Treeview, desplegar la info del arbol binario al treeview | leo21 | Varios | 2 | 08-04-2004 23:47:30 |
| Como utilizar el Treeview, desplegar la info del arbol binario al treeview | leo21 | OOP | 1 | 08-04-2004 23:42:44 |
|