![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
|||
|
|||
|
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; |
|
#2
|
|||
|
|||
|
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 |
|
#3
|
|||
|
|||
|
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? |
|
#4
|
|||
|
|||
|
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. |
|
#5
|
|||
|
|||
|
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 |
|
#6
|
|||
|
|||
|
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 |
|
#7
|
|||
|
|||
|
Mi probema no es con el metodo de cortar o pegar, eso ya lo tengo implementado sin problemas.
El campo en la BD me hace falta porque necesito guardar el orden en el cual aparecen los nodos, (a todos los niveles). El problema reside el el procedure CargarTree, cuando ordeno la consulta por el campo "orden", en lugar de por codigo, me da un error de indice no valido. Elemplo de arbol Nodo 1 orden 10 SubNodo 1 orden 20 SubNodo 2 orden 10 Nodo 2 orden 20 El orden es por nivel, es decir, el nivel 1 tiene que ordenarse primero,luego el nivel 2 y asi sucesivamente Resultado de la carga del arbol Nodo 1 SubNodo 2 SubNodo 1 Nodo 2 Alguna idea de como modificar el metodo CargarTree, para hacer esto? |
![]() |
| 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 12:29:17 |
| treeview | kiringui | OOP | 4 | 18-07-2006 11:52:38 |
| Ver Mi Pc en un TreeView | gilberto_1126 | API de Windows | 2 | 22-06-2004 01:07:36 |
| Como utilizar el Treeview, desplegar la info del arbol binario al treeview | leo21 | Varios | 2 | 08-04-2004 22:47:30 |
| Como utilizar el Treeview, desplegar la info del arbol binario al treeview | leo21 | OOP | 1 | 08-04-2004 22:42:44 |
|