Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-06-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 24
lbidi Va por buen camino
Gracias ecfisa por responder. He tratado de hacer como tu indicas, pero no funciona como yo necesito.

Con el codigo que tu pusistes, el resultado que me devuelve es variable y no se porque.

A veces me devuelve el texto de la rama del arbol seleccionada y en otras veces, el texto de otra
rama, pero nunca el nivel que yo necesito.

Muchas gracias.

Seguiremos intentando.

Saludos
Responder Con Cita
  #2  
Antiguo 22-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Ibidi.

Me pregunto si el campo Nivel no será numerico...

Proba de este modo:
Código Delphi [-]
...
begin
  nodo0:= tvCatalogo.Items.AddFirst(nil, 'ARTICULOS');
  while not Qry_Cata.Eof do
  begin
    case Length(Qry_Cata.FieldByName('Nivel').AsString) of
      2:begin
          nodo1:= tvCatalogo.Items.AddChild(nodo0, Qry_Cata.FieldByName('Texto').AsString);
          nodo1.Data:= Pointer(Qry_Cata.FieldByName('Nivel').AsInteger);
        end;
      4:begin
          nodo2:= tvCatalogo.Items.AddChild(nodo0, Qry_Cata.FieldByName('Texto').AsString);
          nodo2.Data:= Pointer(Qry_Cata.FieldByName('Nivel').AsInteger);
        end;

        ...

    end;
    Qry_Cata.Next;
  end;
  tvCatalogo.FullExpand;
end;
...

procedure TForm1.tvCatalogoClick(Sender: TObject);
var
  Nodo: TTreeNode;
begin
  Nodo:= tvCatalogo.Selected;
  if Assigned(Nodo) and (Nodo.Level > 0) then
    ShowMessage(IntToStr(Integer(Nodo.Data)));
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 26-06-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 24
lbidi Va por buen camino
Hola, ecfisa.

Gracias por responder..

El campo NIVEL no es numerico. A proposito lo cree del tipo string para que su ordenacion me quedara
como quiero que quede el arbol.

Sigo probando..

Saludos y gracias otra vez.

Leonardo
Responder Con Cita
  #4  
Antiguo 27-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Leonardo.

Código Delphi [-]
....
implementation

var
  Nivel: TStrings;

procedure TForm1.FormCreate(Sender: TObject);
var
  nodo0,nodo1,nodo2,nodo3,nodo4: TTreeNode;
  ix: Integer;
begin
  Nivel:= TStringList.Create;
  ix:=0;
  nodo0:= tvCatalogo.Items.AddFirst(nil, 'ARTICULOS');
  while not Qry_Cata.Eof do
  begin
    Nivel.Add(Qry_Cata.FieldByName('Nivel').AsString);
    case Length(Nivel[ix]) of
      2: nodo1:= tvCatalogo.Items.AddChildObject(nodo0,
            Qry_Cata.FieldByName('Texto').AsString, Pointer(Nivel[ix]));
      4: nodo2:= tvCatalogo.Items.AddChildObject(nodo0,
            Qry_Cata.FieldByName('Texto').AsString,Pointer(Nivel[ix]));
      6: nodo3:= tvCatalogo.Items.AddChildObject(nodo0,
            Qry_Cata.FieldByName('Texto').AsString,Pointer(Nivel[ix]));
      8: nodo4:= tvCatalogo.Items.AddChildObject(nodo0,
            Qry_Cata.FieldByName('Texto').AsString,Pointer(Nivel[ix]));
    end;
    Qry_Cata.Next;
    Inc(ix);
  end;
  tvCatalogo.FullExpand;
end;
procedure TForm1.tvCatalogoClick(Sender: TObject);
begin
  with tvCatalogo do
    if Assigned(Selected) and (Selected.Level > 0) then
       ShowMessage(string(Selected.Data));
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Nivel.Free;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 27-06-2012 a las 06:01:39.
Responder Con Cita
  #5  
Antiguo 28-06-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 24
lbidi Va por buen camino
Muchisimas gracias ecfisa. Con el codigo que tu pusistes , funciona como lo necesitaba.

Ahora tengo que molestarte por una consulta mas, espero que sea la ultima de este post .

En el caso que el usuario necesite crear mas nodos y subnodos al arbol, como puedo hacer
para ir grabando el "nivel" dentro del nodo, para asi luego grabarlo en la bd.? Me explico?

si tengo creados 2 niveles.

01 - Hombres
02 - Mujeres

y el usuario me crea un nivel dentro de hombres, quedaria

01 - Hombres
0101 - Pantalones <-- como saber que numero asignarle a este nivel? y los sucesivos?
02 - Mujeres

Te agradezco nuevamente por tu invalorable aporte.

saludos

Leonardo
Responder Con Cita
  #6  
Antiguo 28-06-2012
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por lbidi Ver Mensaje
En el caso que el usuario necesite crear mas nodos y subnodos al arbol, como puedo hacer
para ir grabando el "nivel" dentro del nodo, para asi luego grabarlo en la bd.? Me explico?
El nodo de un árbol tiene la propiedad Level que indica su nivel de profundidad en el árbol. Ese sería el nivel.

// Saludos
Responder Con Cita
  #7  
Antiguo 28-06-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 24
lbidi Va por buen camino
Hola roman, gracias por responder y perdon por mi ignorancia.

Es la primera vez que uso los treeview.

Ahora, siguiendo un poco mi problema, y viendo tu respuesta, como hapo para que los "niveles" o
levels de cada nodo que voy agregando me queden grabados en el nodo para luego volcarlos a la
bd ?

Necesito una rutina en la cual el usuario pueda hacer un "ABM" del arbol y volcarlo en la bd.

Mil gracias por tu colaboracion y por la existencia de este foro.

Saludos
Responder Con Cita
  #8  
Antiguo 29-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por lbidi Ver Mensaje
En el caso que el usuario necesite crear mas nodos y subnodos al arbol, como puedo hacer
para ir grabando el "nivel" dentro del nodo, para asi luego grabarlo en la bd.? Me explico?

si tengo creados 2 niveles.

01 - Hombres
02 - Mujeres

y el usuario me crea un nivel dentro de hombres, quedaria

01 - Hombres
0101 - Pantalones <-- como saber que numero asignarle a este nivel? y los sucesivos?
02 - Mujeres
Hola Ibidi.

Bueno, en ese caso usando TStrings nos quedamos cortos...

Fijate si te sirve este ejemplo:
Código Delphi [-]
uses Contnrs;

type
  TClase = class(TObject)
   Nivel: string;
   Texto: string;
   Level: string;
  end;

var
 ObjLst: TObjectList;
 Clase: TClase;

procedure TForm1.FormCreate(Sender: TObject);
var
  nodo0,nodo1,nodo2,nodo3,nodo4: TTreeNode;
begin
  ObjLst:= TObjectList.Create;
  nodo0:= tvCatalogo.Items.AddFirst(nil, 'ARTICULOS');
  while not Qry_Cata.Eof do
  begin
    Clase:= TClase.Create;
    ObjLst.Add(Clase);
    Clase.Nivel:= Qry_Cata.FieldByName('Nivel').AsString;
    Clase.Texto:= Qry_Cata.FieldByName('Texto').AsString;
    Clase.Level:= '01';  { Aca iría el nivel a asignar }
    case Length(Clase.Nivel) of
      2: nodo1:= tvCatalogo.Items.AddChildObject(nodo0,Clase.Texto,Clase);
      4: nodo2:= tvCatalogo.Items.AddChildObject(nodo0,Clase.Texto,Clase);
      6: nodo3:= tvCatalogo.Items.AddChildObject(nodo0,Clase.Texto,Clase);
      8: nodo4:= tvCatalogo.Items.AddChildObject(nodo0,Clase.Texto,Clase);
    end;
    Qry_Cata.Next;
  end;
  tvCatalogo.FullExpand;
end;

procedure TForm1.btnAddNodeClick(Sender: TObject);
var
  nodo: TTreeNode;
begin
  Clase:= TClase.Create;
  ObjLst.Add(Clase);
  Clase.Nivel:= 'Nuevo valor nivel';
  Clase.Texto:= 'Nuevo valor texto';
  { Concatenar niveles ( 010203... ) }
  with tvCatalogo do
  begin
    Clase.Level:= TClase(Selected.Data).Level +
     StringOfChar('0', 2-Length(IntToStr(Selected.Level+1))) +
     IntToStr(Selected.Level+1);
    nodo:= Items.AddChildObject(Selected,Clase.Texto,Clase)
  end;
end;

procedure TForm1.tvCatalogoClick(Sender: TObject);
begin
   with tvCatalogo do
    if Assigned(Selected) and (Selected.Level > 0) then
      with TClase(Selected.Data) do
       Caption:=Format('Nivel: %s ~ Texto: %s ~ Level: %s',[Nivel,Texto,Level]);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   ObjLst.Free;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 30-06-2012 a las 02:09:48. Razón: Agregar comentario al código
Responder Con Cita
  #9  
Antiguo 04-07-2012
Avatar de lbidi
lbidi lbidi is offline
Miembro
 
Registrado: oct 2003
Ubicación: Montevideo- URUGUAY
Posts: 417
Poder: 24
lbidi Va por buen camino
Muchas gracias ecfisa por tu pronta respuesta y tu colaboracion.

He probado con tu nuevo codigo , asignandole una clase pero me da un error de memoria cuando creo un nuevo nodo.

En esta parte del codigo

Código Delphi [-]
procedure TForm1.btnAddNodeClick(Sender: TObject);
var
  nodo: TTreeNode;
begin
  Clase:= TClase.Create;
  ObjLst.Add(Clase);
  Clase.Nivel:= 'Nuevo valor nivel';
  Clase.Texto:= 'Nuevo valor texto';
  { Concatenar niveles ( 010203... ) }
  with tvCatalogo do
  begin
    Clase.Level:= TClase(Selected.Data).Level +
     StringOfChar('0', 2-Length(IntToStr(Selected.Level+1))) +
     IntToStr(Selected.Level+1);   <---------- aqui me salta cuando lo ejecuto, no al compilar.
    nodo:= Items.AddChildObject(Selected,Clase.Texto,Clase)
  end;
end;

Es un error tipo "acceso de violacion....", no puedo ( a menos yo ), porque se genera.

Nuevamente mil gracias por tu ayuda.

Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Acceder al "data" de un treeview newtron OOP 25 02-06-2012 11:01:52
nodos y la propiedad data en un Treeview david_uh Varios 1 22-09-2007 01:12:31
Missing data provider or data packet mcalmanovici Providers 1 11-09-2007 06:55:15
Como Acceder a un Objeto de un TreeView!! Velia OOP 2 03-08-2007 18:51:37
Como utilizar el Treeview, desplegar la info del arbol binario al treeview leo21 OOP 1 08-04-2004 23:42:44


La franja horaria es GMT +2. Ahora son las 11:04:19.


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