Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Guardar y cargar datos XML en un TreeView con Delphi
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Guardar y cargar datos XML en un TreeView con Delphi

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Guardar y cargar datos XML en un TreeView con Delphi Responder citando

¿Cómo se pueden guardar los datos de un TreeView en un fichero y luego volver a cargarlos en un TreeView?

¿Se pueden guardar en formato XML?

Utilizo Borland Delphi 6.
MensajePublicado:
Jue Sep 24, 2009 2:33 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Guardar y cargar datos XML en un TreeView con Delphi Responder citando



Anuncios



varios escribió:
¿Cómo se pueden guardar los datos de un TreeView en un fichero y luego volver a cargarlos en un TreeView?

¿Se pueden guardar en formato XML?

Utilizo Borland Delphi 6.


Aquí te mostramos dos funciones den Delphi, una para cargar los datos desde un fichero XML existente y otra para guardar los datos de un TreeView en un fichero con formato XML:

Código:

procedure exportarTreeAXML (tree: TTreeView; fichero : string);
var
  tn : TTreeNode;
  XMLDoc : TXMLDocument;
  iNode : IXMLNode;

  procedure ProcessTreeItem(tn : TTreeNode; iNode : IXMLNode);
  var
    cNode : IXMLNode;
  begin
    if (tn = nil) then Exit;
    cNode := iNode.AddChild('item');
    cNode.Attributes['text'] := tn.Text;
    cNode.Attributes['imageIndex'] := tn.ImageIndex;
    cNode.Attributes['stateIndex'] := tn.StateIndex;

    //child nodes
    tn := tn.getFirstChild;
    while tn <> nil do
    begin
      ProcessTreeItem(tn, cNode);
      tn := tn.getNextSibling;
    end;
  end; (*ProcessTreeItem*)
begin
  XMLDoc := TXMLDocument.Create(nil);
  XMLDoc.Active := True;
  iNode := XMLDoc.AddChild('tree2xml');
  iNode.Attributes['app'] := ParamStr(0);

  tn := tree.TopItem;
  while tn <> nil do
  begin
    ProcessTreeItem (tn, iNode);

    tn := tn.getNextSibling;
  end;

  XMLDoc.SaveToFile(fichero);
end;

procedure cargarXMLATree(tree : TTreeView; XMLDoc : TXMLDocument; fichero : string);
var
  jNode : IXMLNode;

  procedure ProcessNode(Node : IXMLNode; tn : TTreeNode);
  var
    cNode : IXMLNode;
  begin
    if Node = nil then Exit;
    tn := tree.Items.AddChild(tn, Node.Attributes['text']);
    tn.ImageIndex := Integer(Node.Attributes['imageIndex']);
    tn.StateIndex := Integer(Node.Attributes['stateIndex']);


    cNode := Node.ChildNodes.First;
    while cNode <> nil do
    begin
      ProcessNode(cNode, tn);
      cNode := cNode.NextSibling;
    end;
  end; (*ProcessNode*)
begin
  tree.Items.Clear;
  XMLDoc.FileName := fichero;
  XMLDoc.Active := True;

  if XMLDoc.ChildNodes.First = nil then
  begin
    ShowMessage('nil');
    Exit;
  end;

  jNode := XMLDoc.DocumentElement.ChildNodes.First;

  while jNode <> nil do
  begin
    ProcessNode(jNode,nil);
    jNode := jNode.NextSibling;
  end;

  XMLDoc.Active := False;
end;


Ejemplo de uso para guardar los datos de un TreeView en un fichero XML:

Código:

procedure TformMenuPrincipal.actGuardarDatosTVExecute(
    Sender: TObject);
begin
  dlGuardar.Filter := 'Archivos XML (*.xml)|*.xml|Todos los archivos (*.*)|*.*';
  dlGuardar.DefaultExt := 'xml';
  if dlGuardar.Execute then
    exportarTreeAXML(tv, dlGuardar.FileName);
end;


Ejemplo de uso para cargar los datos de un fichero XML en un TreeView:
Código:

procedure TformMenuPrincipal.actCargarDatosTVExecute(Sender: TObject);
var
  continuar : boolean;
begin
  dlAbrir.Filter := 'Archivos XML (*.xml)|*.xml|Todos los archivos (*.*)|*.*';
  dlAbrir.DefaultExt := 'xml';
  continuar := true;
  if tv.Items.Count > 0 then
  begin
    if MessageDlg('Hay elementos que serán reemplazados ¿desea continuar?',
        mtConfirmation, [mbyes,mbno], 0) = mryes then
      continuar := true
    else
      continuar := false;
  end;
 
  if continuar then
  begin
    if dlAbrir.Execute then
    begin
      cargarXMLATree (tv, XMLDocument1, dlAbrir.FileName);
    end;
  end;
end;


Nota 1: se necesita el compoente XMLDocument agregado al formulario.
Nota 2: el "tv" es el nombre del componente TreeView agregado al formulario.

Tienes el ejemplo de su uso en la aplicación open source AjpdSoft Notificador cambios en sistema:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=427
MensajePublicado:
Vie Sep 25, 2009 7:09 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A