Club Delphi  
    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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-04-2007
Chandra Chandra is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
Chandra Va por buen camino
Tutorial del VirtualTreeview

Hola.

Llevo semanas intentando encontrar por internet algún manualillo o tutorial para aprender a usar el VirtualTreeview, pero no encuentro nada en español.

Ya sé que en la web del componente hay un magnífico manual con ejemplos en pdf... pero está en inglés y, aunque normalmente me defiendo bien con el inglés, para cosas así muy nuevas para mí, como éste componente, digamos que me hago un lio .

Y es que, como el componente además se pone "espeso" con los punteros y las mil y una posibilidades que tiene (y, para colmo, yo quiero usarlo para bases de datos), pues la verdad es que se me hace muy cuesta arriba hincarle el diente.

Me he bajado todos los ejemplos que he podido encontrar (VST_DatabaseExample, VirtualStringTree, etc...), pero así, a pelo, es como intentar descifrar una transmisión alienígena.

¿Existe algún manualillo básico en español, para luego continuar yo ya en inglés?


Gracias
Responder Con Cita
  #2  
Antiguo 28-04-2007
Avatar de Maury Manosalva
Maury Manosalva Maury Manosalva is offline
Miembro
 
Registrado: ago 2005
Posts: 101
Poder: 19
Maury Manosalva Va por buen camino
TreeView BD

que quieres hacer con el treeview?
Responder Con Cita
  #3  
Antiguo 28-04-2007
Chandra Chandra is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
Chandra Va por buen camino
Se supone que el usuario va creando categorías en una base de datos (carpetas o contenedores) que, a su vez, pueden contener más subcategorías (subcarpetas) o, directamente, datos (por ejemplo, texto, imágenes, campos binarios para representar cualquier tipo de información...)

Es una especie de Explorador de archivos, pero en base de datos. Los "archivos" serían los datos y las carpetas serían la forma en que el usuario categoriza la información.

No sé si me explico...

Es una extructura que se puede aplicar a casi cualquier tipo de información categorializable: una colección de música (con géneros y subgéneros con varios niveles de anidamiento... y campos binarios para contener la propia música), un videoclúb (géneros y subgéneros y fichas con la película), una biblioteca (lo mismo... géneros, subgéneros y más subgéneros y, al final, la ficha del libro).

Pues eso, que yo quiero traducir la estructura gerárquica a una estructura arbórea y representarla. He hecho pruebas con un TTreeView de Delphi, pero cuando pasas de 10.000 o 20.000 registros, la cosa se hace insostenible, por el tiempo que tarda en reconstruir el árbol (unos 10 segundos con 20.000 nodos). En los ejemplos que he visto del VirtualTreeview aguanta mucho más (siempre que no le metas más de 5 millones de registros, porque entonces también se hace insostenible su utilización).

Pues eso

Última edición por Chandra fecha: 28-04-2007 a las 23:55:02.
Responder Con Cita
  #4  
Antiguo 29-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Ya le respondí a Chandra por privado (tal y como me pidió), pero dado que es costumbre poner las cosas en el foro para que esté a disposición de todos, ahí va (ampliando un poquito más):

La filosofía es usar un tipo Record que se asocia con todos los nodos del árbol. Cuando se quiere poner un dato en una columna, se debe usar el evento GetText, y pasar el campo de un registro a la columna que se quiera.

También se puede usar el evento OnPaintCell para ajustar las fuentes, el color de fondo, color de celda, etc.

Código Delphi [-]

// definimos el registro:
 TRecBase = record
    Nombre:string[50];
    direccion :string[80];   
    Nivel: Integer;
  end;
  PTrecBase = ^trecbase; // puntero al registro, se usa siempre.

procedure TFrmPrevFact.FormCreate(Sender: TObject);
begin
  arbol.NodeDataSize := SizeOf(TRecbase);
  // le decimos el tamaño del registro
end;

Procedure TFrmPrevFact.Crea4Nodos;
var
  prec: PTrecBase;
  var i:integer;
begin
  for i:= 0 to 3 do
  begin
  Result   := arbol.AddChild(NIL);
  prec     := arbol.GetNodeData(Result);
  prec.Nombre := 'nombre ' + inttostr(i);
  prec.direccion := 'direccion ' + inttostr(i);
  prec.nivel := i;
end;
end;
 

procedure TFrmPrevFact.arbolInitNode(Sender: TBaseVirtualTree;
  ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
  pRec: ^TRecBase;
begin
  Sender.CheckType[Node] := ctTriStateCheckBox;
  Sender.CheckState[Node] := csCheckedNormal;
  // añadimos casilla de verificación o CheckBox a cada nodo
end;
end;


procedure TFrmPrevFact.arbolGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  pRec: ^TRecBase;
begin
  pRec := Sender.GetNodeData(node);
// según la columna, ponemos un dato u otro.
  case Column of
    1: CellText := prec.Nombre;
    2: CellText := prec.direccion;
    3: CellText := prec.Nivel
  end;
end;
Para hacerlo más potente, se puede crear un objeto dentro del registro, así puedes almacenar elementos heterogéneos.

Código Delphi [-]

// definimos el registro:
  TNodoBase = class (TObject);

  TRecBase = record
    Obj:   TNodoBase;
    Nivel: Integer;
  end;
  PTrecBase = ^trecbase;

  TObjEmpresa = class (TNodoBase)
  public
    Id:         String;
    Alias:      String;
    TotalFacturado: Currency;
  end;

  TObjCliente = class (tnodobase)
  public
    IdCliente:    Integer;
    Denominacion: String;
 end;

  TObjFactura = class (tnodobase)
  public
    NFactura:    String; 
 end;

pero aquí ya depende tu pericia como programador y el nivel que tengas de programación orientada a objetos.

Ahora en el GetText podríamos hacer algo así:
Código Delphi [-]
procedure TFrmPrevFact.arbolGetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: WideString);
var
  pRec: ^TRecBase;
begin
  pRec := Sender.GetNodeData(node);
  if prec.Object is TObjEmpresa  then
   With TObjEmpresa(prec.Object) do 
   case Column of
    1: CellText := id;
    2: CellText := alias;
    3: CellText := CurToString(totalFacturado);
   end

  else if prec.Obj is TObjCliente then
   With TObjCliente(prec.Object) do 
   case Column of
    1: CellText := Inttostr(idCliente);
    2: CellText := Denominacion;
    3: CellText := '';
    end;
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #5  
Antiguo 29-04-2007
Chandra Chandra is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
Chandra Va por buen camino
Muchísimas gracias, Lepe.

Estoy analizándo todo lo que me pones y, la verdad, ya sí parece más abordable que hincarle el diente en inglés de primeras.

Lo dicho, muchas gracias; sigo mirándomelo con detenimento.
Responder Con Cita
  #6  
Antiguo 02-05-2007
Chandra Chandra is offline
Miembro
 
Registrado: jun 2006
Posts: 23
Poder: 0
Chandra Va por buen camino
Pero qué burro soy...

Me acabo de dar cuenta de que estaba rompiéndome los cuernos con el documento:

- "Virtual Treeview Help (pdf)"
(http://www.soft-gems.net/supplement/download.php?ID=67)

...y no había visto más abajo otro más corto y accesible, que va directamente al grano:

- "Virtual Treeview Tutorial translation"
English translation of the german VT tutorial written by Phillip Frenzel (PDF)
(http://www.soft-gems.net/supplement/download.php?ID=79)

Éste último es el que debería de haberme leído desde un principio .

Ahora sí que resulta comprensible el compo
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
Tutorial F1Book CARSOFT_AR Varios 6 09-10-2007 07:09:02
VirtualTreeview porreres Varios 8 19-09-2005 14:05:39
tutorial de firebird santiago14 Firebird e Interbase 3 30-06-2004 22:03:00
Tutorial Tchart??? el toluca Varios 1 24-06-2004 05:27:11
Tutorial de POO AbcXxx OOP 3 06-02-2004 17:29:48


La franja horaria es GMT +2. Ahora son las 17:38:08.


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