Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Problema al guardar lista en fichero

Hola, intento guardar el contenido de una lista (TListview), pero lo que guarda en el archivo en disco no tiene nada que ver con el contenido de la lista. Por ejemplo, una lista que contiene

[Num. caracteres]: 256
[Clave]: adaiewoi32[$%k,.
[Asociada a]: Google

Y lo que guarda en el archivo en disco es " põ " excluyendo las comillas dobles. Por otra parte, no carga nada al iniciar el programa.
Me ayude de este código, yo lo he implementado para mi caso, cambiando nombre de archivo y extension (mysignature). Alguna idea? un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #2  
Antiguo 28-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Mejor que copies exactamente el código que estás usando, si has modificado algo, entonces ya no es el mismo código.
Responder Con Cita
  #3  
Antiguo 28-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola,

Cita:
Mejor que copies exactamente el código que estás usando, si has modificado algo, entonces ya no es el mismo código.
Obvio, si cambio en algo el código, ya no es el mismo código, pero es evidente que debo modificar las lineas necesarias para acomodarlo a lo que necesito. El problema es que cuando cambio esas minimas cosas (básicamente el nombre y la extensión del archivo), ya no funciona, aunque si que guarda un archivo con el nombre que yo quiera, su contenido simplemente es "LVF" y no el contenido de la lista.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #4  
Antiguo 28-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por eso mismo hace falta ver tu código, porque si probamos el original, funciona, según comentas.
Responder Con Cita
  #5  
Antiguo 28-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 danielmj.

Tal vez el autor del enlace anterior no haya echo una transcripción totalmente fidedigna...

Intenta usando el código de TORRY's Delphi Pages: ...Save/Load a TListView?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 29-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola buenos dias.

perdona que no haya contestado antes pero no sé por que extraña razón, no me ha llegado ninguna notificación a la bandeja del correo. En cuanto a lo que comentas ecfisa, ahora me pongo con ello, aún así a continuación pongo el código tal como lo tengo yo.

Código Delphi [-]
procedure TForm1.SaveLista(AListView: TListView; sFileName: string);
var
  idxItem, idxSub, IdxImage: Integer;
  F: TFileStream;
  pText: PChar;
  sText: string;
  W, ItemCount, SubCount: Word;
  MySignature: array [0..2] of Char;

begin
  // Inicio
  with Lista do
  begin
    ItemCount := 0;
    SubCount  := 0;
    //****
    MySignature := 'cl';
    //  ListViewFile
    F := TFileStream.Create('clvs.cl', fmCreate or fmOpenWrite);
    F.Write(MySignature, SizeOf(MySignature));

    if Items.Count = 0 then
      // List is empty
      ItemCount := 0
    else
      ItemCount := Items.Count;
    F.Write(ItemCount, SizeOf(ItemCount));

    if Items.Count > 0 then
    begin
      for idxItem := 1 to ItemCount do
      begin
        with Items[idxItem - 1] do
        begin
          // Guardamos los SubItems
          if SubItems.Count = 0 then
            SubCount := 0
          else
            SubCount := Subitems.Count;
          F.Write(SubCount, SizeOf(SubCount));
          // Guardamos el Index
          IdxImage := ImageIndex;
          F.Write(IdxImage, SizeOf(IdxImage));
          // Guardamos la Caption
          sText := Caption;
          w     := Length(sText);
          pText := StrAlloc(Length(sText) + 1);
          StrPLCopy(pText, sText, Length(sText));
          F.Write(w, SizeOf(w));
          F.Write(pText^, w);
          StrDispose(pText);
          if SubCount > 0 then
          begin
            for idxSub := 0 to SubItems.Count - 1 do
            begin
              // Guardamos los Items y SubItems
              sText := SubItems[idxSub];
              w     := Length(sText);
              pText := StrAlloc(Length(sText) + 1);
              StrPLCopy(pText, sText, Length(sText));
              F.Write(w, SizeOf(w));
              F.Write(pText^, w);
              StrDispose(pText);
            end;
          end;
        end;
      end;
    end;
    F.Free;
  end;
end;

procedure TForm1.LoadListViewToFile(AListView: TListView; sFileName: string);
var
  F: TFileStream;
  IdxItem, IdxSubItem, IdxImage: Integer;
  W, ItemCount, SubCount: Word;
  pText: PChar;
  PTemp: PChar;
  MySignature: array [0..2] of Char;
  sExeName: string;

begin
  MySignature:= 'cl';
  with AListView do
  begin
    ItemCount := 0;
    SubCount  := 0;

    sExeName := ExtractFileName('clvs.cl');

    if not FileExists('clvs.cl') then
    begin
      MessageBox(Handle, PChar(Format(Msg1, [sExeName])), 'I/O Error', MB_ICONERROR);
      Exit;
    end;

    F := TFileStream.Create('clvs.cl', fmOpenRead);
    F.Read(MySignature, SizeOf(MySignature));

    if MySignature <> 'cl' then
    begin
      MessageBox(Handle, PChar(Format(Msg2, [sExeName])), 'I/O Error', MB_ICONERROR);
      Exit;
    end;

    F.Read(ItemCount, SizeOf(ItemCount));
    Items.Clear;

    for idxItem := 1 to ItemCount do
    begin
      with Items.Add do
      begin
        // Leemos el Index
        F.Read(SubCount, SizeOf(SubCount));
        // Re Leemos el Index
        F.Read(IdxImage, SizeOf(IdxImage));
        ImageIndex := IdxImage;
        // Leemos el Caption
        F.Read(w, SizeOf(w));
        pText := StrAlloc(w + 1);
        pTemp := StrAlloc(w + 1);
        F.Read(pTemp^, W);
        StrLCopy(pText, pTemp, W);
        Caption := StrPas(pText);
        StrDispose(pTemp);
        StrDispose(pText);
        if SubCount > 0 then
        begin
          for idxSubItem := 1 to SubCount do
          begin
            F.Read(w, SizeOf(w));
            pText := StrAlloc(w + 1);
            pTemp := StrAlloc(w + 1);
            F.Read(pTemp^, W);
            StrLCopy(pText, pTemp, W);
            Items[idxItem - 1].SubItems.Add(StrPas(pText));
            StrDispose(pTemp);
            StrDispose(pText);
          end;
        end;
      end;
    end;

    F.Free;
  end;
end;

Siendo las llamadas a estos procedimientos...
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  memo1.Text:= '';
  LoadListViewToFile(Lista, 'clvs.cl');
end;

Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  SaveLista(Lista, 'clvs.cl');
  Lista.Items.Clear;
end;

Esta ultima llamada también la tengo en el OnClose del formulario. Tal como está ahora, me guarda un archivo tal como yo quiero (nombre y extensión) pero el contenido del archivo es "FLV" por lo que no tiene nada que ver con la lista.

Bueno, voy a mirar la web de torrys a ver que tal.
Un saludo y gracias.

Edito: Si mal no veo, el código que he puesto antes es igual que el de la web de torrys, salvando las diferencias en cuanto a nombre de archivo y extensión y un "if" dentro de la carga del archivo, por lo que sigo igual. No sé por que dentro del archivo escribe "LVF"
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.

Última edición por danielmj fecha: 29-11-2014 a las 12:07:57.
Responder Con Cita
  #7  
Antiguo 29-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 danielmj.
Cita:
Edito: Si mal no veo, el código que he puesto antes es igual que el de la web de torrys, salvando las diferencias en cuanto a nombre de archivo y extensión y un "if" dentro de la carga del archivo, por lo que sigo igual.
...
Estuve revisándolos a fondo y tenes razón, el código es casi igual y ambos no realizan bién su cometido.

Pero como me parecieron unas funciones que a varios resultarían útiles, me puse a teclear un poco
Código Delphi [-]
unit ListViewExt;

interface

uses SysUtils, Classes, ComCtrls;

type
  TListView = class(ComCtrls.TListView)
  public
    procedure SaveToFile(const FileName: TFileName);
    procedure LoadFromFile(const FileName: TFileName);
  end;

implementation

(* Guarda el contenido del ListView en un archivo *)
procedure TListView.SaveToFile(const FileName: TFileName);
var
  i, j, aux: Integer;
  Stream: TStream;
  str,signat: string;
  ItemCount, SubCount: Word;
begin
  // Crear archivo
  Stream := TFileStream.Create(FileName, fmCreate);
  // guardar firma
  signat := Name;
  aux:= Length(signat);
  Stream.Write(aux, SizeOf(aux));
  Stream.Write(PChar(signat)^, aux);

  // guardar nro items
  ItemCount:= Items.Count;
  Stream.Write(ItemCount, SizeOf(ItemCount));

  if Items.Count > 0 then
  begin
    for i:= 0 to ItemCount-1 do
    begin
      // guardar ImageIndex
      aux:= Items[i].ImageIndex;
      Stream.Write(aux, SizeOf(aux));
      // guardar Caption
      str:= Items[i].Caption;
      aux:= Length(str);
      Stream.Write(aux, SizeOf(aux));      
      Stream.Write(PChar(str)^, aux);
      SubCount:= Items[i].Subitems.Count;
      if SubCount > 0 then
      begin
        // guardar nro subitems
        Stream.Write(SubCount, SizeOf(SubCount));
        for j:= 0 to SubCount - 1 do
        begin
          // guardar Caption
          str:= Items[i].SubItems[j];
          aux:= Length(str);
          Stream.Write(aux, SizeOf(aux));
          Stream.Write(PChar(str)^, aux);
          // guardar ImageIndex
          aux:= Items[i].SubItemImages[j];
          Stream.Write(aux, SizeOf(aux));
        end;
      end;
    end;
  end;
  Stream.Free;
end;

(* Carga el contenido, previamente guardado, en el ListView *)
procedure TListView.LoadFromFile(const FileName: TFileName);
var
  Stream: TStream;
  i, j, aux: Integer;
  ItemCount, SubCount: Word;
  str, signat: string;
  it: TListItem;
begin
  // verificar existencia
  if not FileExists(FileName) then
    raise Exception.Create(Format('No se encuentra el archivo %s',[FileName]));
  // Abrir archivo
  Stream := TFileStream.Create(FileName, fmOpenRead);
  // leer firma
  Stream.Read(aux, SizeOf(aux));
  SetLength(signat, aux);
  Stream.Read(PChar(signat)^, aux);
  // verificar firma
  if signat <> Name then
  begin
    Stream.Free;
    raise Exception.Create(Format('%s no es el archivo correcto',[FileName]));
  end;
  Items.Clear;
  // leer nro items
  Stream.Read(ItemCount, SizeOf(ItemCount));
  for i := 0 to ItemCount-1 do
  begin
    it:= Items.Add;
    //leer ImageIndex
    Stream.Read(aux, SizeOf(aux));
    it.ImageIndex := aux;
    //leer caption
    Stream.Read(aux, SizeOf(aux));
    SetLength(str, aux);
    Stream.Read(PChar(str)^, aux);
    it.Caption:= str;
    //leer nro subitems
    Stream.Read(SubCount, SizeOf(SubCount)); 
    if SubCount > 0 then
    begin    
      for j := 0 to SubCount-1 do
      begin
        // leer Caption
        Stream.Read(aux, SizeOf(aux));
        SetLength(str, aux);
        Stream.Read(PChar(str)^, aux);
        it.SubItems.Add(str);
        // leer ImageIndex
        Stream.Read(aux, SizeOf(aux));
        it.SubItemImages[j]:= aux;
      end;
    end;
  end;
  Stream.Free;
end;
end.

Para usarlo en cualquier otra unidad, solo agrega la unidad ListViewExt al final del uses de la sección interface:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ImgList, ComCtrls, StdCtrls, ListViewExt; // <<== Aqui
type
  TForm1 = class(TForm)
    ListView1: TListView;
    ImageList1: TImageList;
    btnSave: TButton;
    btnLoad: TButton;
    procedure btnSaveClick(Sender: TObject);
    procedure btnLoadClick(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.btnSaveClick(Sender: TObject);
begin
  ListView1.SaveToFile(ListView1.Name + '.DAT');
end;

procedure TForm1.btnLoadClick(Sender: TObject);
begin
  ListView1.LoadFromFile(ListView1.Name + '.DAT');
end;
end.

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 22-10-2016 a las 17:34:40. Razón: ortografía
Responder Con Cita
  #8  
Antiguo 29-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
Hola ecfisa, gracias por tu tiempo y por tu trabajo, pero no sé si solo me pasan a mi estas cosas, el caso es que sigue fallando. Si crea un archivo con el nombre de lista+'.dat', pero el contenido de este archivo es "NUL NUL NUL NUL..."
He agregado la unidad al proyecto y la llamada la hago con estos eventos:

Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  clvs.SaveToFile(clvs.Name+'.dat');
  clvs.Items.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i: byte;

begin
  for i:= 8 to 255 do
    other.Items.Add(IntToStr(i)); //esto lo hago para cargar un combo, sin efecto sobre la lista.
    memo1.Text:= '';
    clvs.LoadFromFile(clvs.Name+'.dat');
end;

Y el mensaje de error que da es este...


Y cuando pulso el botón y llego al formulario, la lista está vacía, no ha cargado nada, supongo que por el "NUL..." que mencione antes. De la unidad no he cambiado nada, tan solo he cambiado el nombre de la lista para que el archivo a guardar (y para no tocar codigo), tenga el nombre que yo quiera, que es clvs, con lo que el archivo creado es "clvs.dat", pero como te digo da error al cargarlo y el archivo está vacío o mejor dicho tiene seis veces la palabra "NUL"

Un saludo.

Edito: Los listviews serán muy practicos, pero son un autentico coñazo XD
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #9  
Antiguo 29-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 danielmj.

Te adjunto una prueba que hace uso de la unidad y funciona correctamente (Delphi 7 y Windows 7), cotejala con tu código.

Cita:
Edito: Los listviews serán muy practicos, pero son un autentico coñazo XD
Coincido


Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 29-11-2014 a las 19:02:06.
Responder Con Cita
  #10  
Antiguo 29-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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
Perdón , me olvidé el adjunto...
Archivos Adjuntos
Tipo de Archivo: zip ListViewExt.zip (9,2 KB, 3 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 29-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola,

pues... debe ser mi version de delphi (sigo con los 30 dias de prueba de la xe7) pero mi me sale esto ecfisa...

1º Ejecuto...


2º Salta error...


Ese error sale cuando pulso sobre "save", "clear" y luego sobre "load". O xe7 tiene algunas lagunas o no es compatible con ciertas cosas de versiones anteriores de delphi o no sé... por que los mismos pasos los he hecho en delphi 7 y tienes razon, no falla, guarda y carga correctamente el archivo, pero en xe7 no. Aunque el icono del formulario sea el de d7, esa captura es de xe7

No soy ningun experto en delphi, eso lo veis por las preguntas o los pedidos de ayuda que hago, pero si una cosa funciona bien en d7 y la misma cosa no corre como debe en la ultima version, algo no cuadra.

En fin, creo que voy a borrar ya la xe7 que solo me trae de cabeza. Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.

Última edición por danielmj fecha: 29-11-2014 a las 20:30:04.
Responder Con Cita
  #12  
Antiguo 29-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 danielmj.

Tal vez (no lo sé) en XE_n haya que declarar la variable signat de otro tipo en lugar de string. Prueba con AnsiString.
Código Delphi [-]
...
var
  signat: AnsiString;
  ...

String Types (Delphi)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 29-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola ecfisa, ya he probado a cambiar el tipo de variable, pero sigue dando el mismo error. Por otra parte el error de no guardar el contenido de la lista (tambien en xe7) lo he solucionado usando un savedialog, con eso consigo que guarde correctamente el contenido del listview, aunque a la hora de cargar, sigue dandome el mismo error de "archivo xxxxxx no es correcto".

Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #14  
Antiguo 29-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Qué cosa más rara.
¿No será que estás guardando el fichero en un directorio donde no tienes permisos?
Responder Con Cita
  #15  
Antiguo 29-11-2014
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 13
danielmj Va por buen camino
hola casimiro,
que va, el fichero se guarda por defecto en el mismo directorio donde está el ejecutable, que al menos en XE7 es "\nombre proyecto\versionWindows\debug" y como digo en el mensaje anterior, usando un savedialog, consigo salvar el contenido del listview, así que supongo que si fuera una carpeta sin permisos tampoco podría aunque use el savedialog ¿correcto? Lo extraño es que sin cambiar una sola "," en D7 funciona (espero cuando lo termine de volcar veré) y en xe7 no, así que ahora mismo estoy volcando todo a D7 y los 13 o 14 dias que me quedan de prueba del xe7 los gastaré en hacer experimentos, digamos que hará las veces de gaseosa

Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
Respuesta



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
[qreport]-.qrp quitar de lista guardar jonydread Impresión 0 30-05-2013 06:58:12
Guardar un fichero Intelhex. JoseFco ASM y Microcontroladores 20 12-06-2008 18:13:26
Guardar palabras en una lista dinamica mcalmanovici Varios 1 19-12-2007 19:22:37
guardar en 1 fichero 1 tabla adaypr C++ Builder 2 09-09-2006 10:29:10
Guardar un fichero Excel auxifs Servers 2 16-06-2003 16:50:47


La franja horaria es GMT +2. Ahora son las 20:38:23.


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