Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
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
  #21  
Antiguo 11-10-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
gdlrinfo,

Cita:
Empezado por gdlrinfo
...en la búsqueda cuando copio...hay algunos archivos que tienen unas siglas que no me interesa copiar...


Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TCopyFiles = class(TThread)
  private
    DirSource, DirTarget, FileExt, FileExtNew : String;
    FilesExcluded : TStringList;
    MsgApp : String;
    IFile,FFile : LongWord;
  protected
    procedure SearchFiles(DirSource, DirTarget, FileExt : String; var
                          FileList : TStringList;
                          FilesExcluded : TStringList
                         );
    constructor Create(CreateSuspended : Boolean);
    procedure Execute; override;
    procedure MsgCopy;
    procedure MsgEnd;
  end;

var
  Form1: TForm1;
  CopyFiles : TCopyFiles;
  CopyFilesThread : THandle = 0;

implementation

{$R *.dfm}

// Constructor de la clase TCopyFiles
constructor TCopyFiles.Create(CreateSuspended : Boolean);
begin
   inherited;
   FilesExcluded := TStringList.Create;
end;

// Selecciona los archivos a ser copiados del directorio fuente al destino de forma recursiva
procedure TCopyFiles.SearchFiles(DirSource, DirTarget, FileExt : String;
                                 var FileList : TStringList;
                                 FilesExcluded : TStringList
                                );
var
   SR : TSearchRec;
   i : Integer;
   ExcludedFile : Boolean;

begin

   DirSource := IncludeTrailingPathDelimiter(DirSource);
   DirTarget := IncludeTrailingPathDelimiter(DirTarget);

   if (not DirectoryExists(DirSource)) or (not DirectoryExists(DirTarget)) then
      Exit;

   if FindFirst(DirSource + '*.*', faAnyFile, SR) = 0 then
   repeat
      if ((SR.Attr and fadirectory) = fadirectory) then
      begin
         if(SR.Name <> '.') and (SR.Name <> '..') then
            SearchFiles(DirSource + SR.Name, DirTarget, FileExt, FileList, FilesExcluded);
      end
      else
      begin
         ExcludedFile := False;

         for i := 0 to FilesExcluded.Count - 1 do
            if Pos(LowerCase(FilesExcluded.Strings[i]), LowerCase(SR.Name)) > 0 then
            begin
               ExcludedFile := True;
               Break;
            end;

         if ExcludedFile then Continue;

         if FileExt = EmptyStr then
            FileList.Add(DirSource + SR.Name)
         else
         if LowerCase(ExtractFileExt(SR.Name)) = LowerCase(FileExt) then
            FileList.Add(DirSource + SR.Name);
      end;
   until FindNext(SR) <> 0;

   FindClose(SR);

end;

// Ejecuta el hilo de copia de archivos
procedure TCopyFiles.Execute;
var
   FileList : TStringList;
   i : Integer;
   FromFileName, ToFileName : String;
   AuxFileName, AuxFileExt : String;
   CountFile : Integer;

begin

   FreeOnTerminate := True;

   FileList := TStringList.Create;

   SearchFiles(DirSource, DirTarget, FileExt, FileList, FilesExcluded);

   for i := 0 to FileList.Count - 1 do
   begin

      FromFileName := FileList.Strings[i];

      if FileExtNew <> EmptyStr then
         ToFileName := IncludeTrailingPathDelimiter(DirTarget)
                       + ChangeFileExt(ExtractFileName(FileList.Strings[i]),FileExtNew)
      else
         ToFileName := IncludeTrailingPathDelimiter(DirTarget) + ExtractFileName(FileList.Strings[i]);

      CountFile := 0;

      while True do
      begin
         if FileExists(ToFileName) then
         begin
            Inc(CountFile);
            AuxFileName := ExtractFileName(ChangeFileExt(FromFileName,''));
            AuxFileExt := ExtractFileExt(FromFileName);
            ToFileName := ExtractFilePath(ToFileName)
                          + AuxFileName
                          + '_' + IntToStr(CountFile)
                          + AuxFileExt;
         end
         else
            Break;
      end;

      IFile := i + 1;
      FFile := FileList.Count;

      Synchronize(MsgCopy);

      Copyfile(PChar(FromFileName),PChar(ToFileName),False);

   end;

   FileList.Free;
   FilesExcluded.Free;

   Synchronize(MsgEnd);

end;

// Muestra un mensaje de progreso de copia de archivos
procedure TCopyFiles.MsgCopy;
begin
   Form1.Caption := Format('Copiando %d de %d',[IFile, FFile]);
end;

// Muestra un mensaje de finalización de copia de archivos
procedure TCopyFiles.MsgEnd;
begin
   Form1.Caption := 'CopyFiles';
   MsgApp := Format('Copia Recursiva de Archivos *%s del Folder %s al Folder %s Completada',
                    [FileExt, DirSource,DirTarget]);
   Beep;
   MessageDlg(MsgApp, mtInformation, [mbOK], 0);
   CopyFilesThread := 0;
end;

// Inicia un proceso de copia recursiva de archivos desde el directorio fuente al destino
procedure TForm1.Button1Click(Sender: TObject);
var
   MsgApp : String;
   DirSource, DirTarget, FileExt, FileExtNew : String;
   FilesExcluded : TStringList;

begin

   DirSource := 'D:\HostDownload';
   DirTarget := 'D:\TestNelson-2';
   FileExt := '.rtf';
   FileExtNew := '.doc';

   // Exclusión de archivos a ser copiados (Se pueden excluir tantos como se requiera) 
   FilesExcluded := TStringList.Create;
   FilesExcluded.Add('x1'); // Excluye todos los archivos que incluyan x1 en su nombre
   FilesExcluded.Add('x2'); // Excluye todos los archivos que incluyan x2 en su nombre
   FilesExcluded.Add('x3'); // Excluye todos los archivos que incluyan x3 en su nombre

   if (CopyFilesThread = 0) then
   begin

      if (not DirectoryExists(DirSource)) or (not DirectoryExists(DirTarget)) then
      begin
         MsgApp := 'Error de I/O en Directorio Fuente o Destino';
         Beep;
         MessageDlg(MsgApp,mtInformation,[mbOK],0);
         Exit;
      end;

      CopyFiles := TCopyFiles.Create(True);
      CopyFiles.DirSource := DirSource;
      CopyFiles.DirTarget := DirTarget;
      CopyFiles.FileExt := FileExt; // CopyFiles.FileExt := '' copia todos los archivos
      CopyFiles.FileExtNew := FileExtNew; // CopyFiles.FileExtNew := '' no cambia la extensión
      CopyFiles.FilesExcluded.Assign(FilesExcluded);
      CopyFiles.Resume;
      CopyFilesThread := CopyFiles.Handle;

      FilesExcluded.Free;

   end
   else
   begin
      MsgApp := 'Hay un Proceso de Copia Activo, Favor Esperar que Finalize';
      Beep;
      MessageDlg(MsgApp,mtInformation,[mbOK],0);
      Exit;
   end;

end;

end.
El código anterior en Delphi 7 bajo Windows 7 Professional x32, es la versión 3 del código propuesto en el Msg #3 el cual permite: copiar de forma recursiva todos los archivos de un directorio y subdirectorios fuente a un directorio destino en función de una mascara de copia.

El código del ejemplo esta disponible en el link : CopyFiles.rar

Nota:

1- La copia de archivos se hace por medio de un hilo, lo cual permite que la aplicación no se bloque durante el proceso.

2- En el caso de haber archivos en el directorio y subdirectorios fuente con el mismo nombre, estos se copiaran al directorio destino con el mismo nombre más un prefijo (_Número), que indica la cantidad de veces que el archivo se repite, ejemplo: File.txt, File_1.txt, File_2, ... , File_N.txt

3- En el ejemplo, solo puede estar un hilo de copia activo a la vez, esto se puede modificar fácilmente para tener varios procesos de copia activos según se requiera.

4- Por simplicidad de código, solo se incluyo como referencia visual un contador de copia (Copiado XX de YY), que indica el archivo que esta siendo copiado en un momento determinado al directorio destino.

5- Si no se especifica la extensión de los archivos a copiar (TCopyFiles.FileExt), se copiaran todos los archivos recursivamente del directorio fuente al destino.

6- Si se especifica una nueva extensión (TCopyFiles.FileExtNew), se copiaran todos los archivos recursivamente del directorio fuente al destino con la nueva extensión.

7- Se pueden excluir archivos de la copia por medio de TCopyFiles.FilesExcluded, el cual permite crear una lista (TStringList) de nombres parciales o completos de archivos que no serán incluidos en la copia, ejemplo : Si se quiere excluir de la copia los archivos FileX1.rtf, FileX2.rtf y FileX3.rtf se puede realizar de las siguientes formas:
Código Delphi [-]
FilesExcluded.Add('x1'); // Excluye todos los archivos que incluyan x1 en su nombre
FilesExcluded.Add('x2'); // Excluye todos los archivos que incluyan x2 en su nombre
FilesExcluded.Add('x3'); // Excluye todos los archivos que incluyan x3 en su nombre
ó
Código Delphi [-]
FilesExcluded.Add('FileX1.rtf'); // Excluye el archivo que se llame FileX1.rtf
FilesExcluded.Add('FileX2.rtf'); // Excluye el archivo que se llame FileX2.rtf
FilesExcluded.Add('FileX3.rtf'); // Excluye el archivo que se llame FileX3.rtf
ó
Código Delphi [-]
FilesExcluded.Add('x'); // Excluye todos los archivos que incluyan x en su nombre
La exclusión de archivos es Case Insensitive

La opción de exclusión, tiende a disminuir los tiempos de copia según se muestra en la siguiente prueba:

1- 169 Files RTF, 2.19 GB Tamaño Total -> 00:01:55 (Sin exclusión)

2- 169 Files RTF, 2.19 GB Tamaño Total -> 00:01:38 (Con exclusión de 3 tipos de archivos)

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 11-10-2014 a las 05:54:44.
Responder Con Cita
  #22  
Antiguo 11-10-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 gdLrinfo.
[quote=gdlrinfo;482917]
Cita:
Empezado por ecfisa Ver Mensaje

Hola ecfisa te cuento que probé y funciona muy bien el único problema que hay es que no me deja poner todas las frases que quiero discriminar por ejemplo no quiero que copie nada que contenga CAC - CAM - RIB pero en el edit solo me deja poner uno ejemplo el CAC y si no lo copia la idea es poner todas las siglas juntas así no copia ninguno de esos archivos, pero la verdad que poniendo de a uno anda muy bien pero la idea es poner todas las siglas que no se quieren copiar desde ya como siempre gracias por tu ayuda
Permite poner la cantidad de monemas que deses separados por punto y coma ( ; ) por ejemplo:
Cita:
CAC;CAM;RIB;Sam;eno;ico;uVa;...
Los espacios entre punto y coma y monema serán considerados

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #23  
Antiguo 11-10-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 gdlrinfo.

Me quedé pensando que quizá te resulte mejor cotejar con el código fuente, así que te lo adjunto.

Es la versión para Delphi 7, así que no olvides reemplazar en la unidad uCopyAll todas las ocurrencias de PAnsiChar por PWideChar (Search->Replace).

Saludos
Archivos Adjuntos
Tipo de Archivo: zip CopyAllFiles.zip (6,5 KB, 4 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #24  
Antiguo 15-10-2014
gdlrinfo gdlrinfo is offline
Miembro
 
Registrado: may 2007
Posts: 131
Poder: 17
gdlrinfo Va por buen camino
Smile Muchassss Graciasssss

Chicos la verdad estoy muy agradecido por su ayuda, los foros funcionan gracias a personas como ustedes que se preocupan y nos ayudan a quienes somos novatos, a salir adelante con nuestros proyectos gracias por todo, ni bien arme todo estaré escribiendo nuevamente y agradecido por su apoyo es bueno ayudar sin pedir nada a cambio eso hace la grandeza de las personas muchas gracias !!!!!
Responder Con Cita
  #25  
Antiguo 18-11-2015
gdlrinfo gdlrinfo is offline
Miembro
 
Registrado: may 2007
Posts: 131
Poder: 17
gdlrinfo Va por buen camino
Incluir

Hola muchachos recuerdo cuando me dieron una mano con esto ahora tengo una duda asi como se excluyen se pude hacer que en vez de excluir incluya ? gracias como siempre !!!
Responder Con Cita
  #26  
Antiguo 19-11-2015
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 gdIrinfo.
Cita:
Empezado por gdlrinfo Ver Mensaje
Hola muchachos recuerdo cuando me dieron una mano con esto ahora tengo una duda asi como se excluyen se pude hacer que en vez de excluir incluya ? gracias como siempre !!!
Solo hay que cambiar la condición de retorno:
Código Delphi [-]
...
function TCopyAllFiles.IsBeCopied(FileName: string): Boolean;
var
  i: Integer;
  Name: string;
begin
  Result := False; // (antes True); 
  if FExclude.Count > 0 then
    Name := UpperCase(ChangeFileExt(ExtractFileName(FileName), ''));
    for i := 0 to FExclude.Count-1 do
      if AnsiPos(UpperCase(FExclude[i]), Name) <> 0 then
      begin
        Result := True;  // (antes False)
        Exit;
      end;
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #27  
Antiguo 23-11-2015
gdlrinfo gdlrinfo is offline
Miembro
 
Registrado: may 2007
Posts: 131
Poder: 17
gdlrinfo Va por buen camino
Geniallll gracias nuevamente!!! Atte. Gonzalo
Responder Con Cita
  #28  
Antiguo 23-11-2015
gdlrinfo gdlrinfo is offline
Miembro
 
Registrado: may 2007
Posts: 131
Poder: 17
gdlrinfo Va por buen camino
[quote=ecfisa;499607] [quote=ecfisa]

Perdon mi ignorancia pero no encuentro esto que me decis Aca---


Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TCopyFiles = class(TThread)
  private
    DirSource, DirTarget, FileExt, FileExtNew : String;
    FilesExcluded : TStringList;
    MsgApp : String;
    IFile,FFile : LongWord;
  protected
    procedure SearchFiles(DirSource, DirTarget, FileExt : String; var
                          FileList : TStringList;
                          FilesExcluded : TStringList
                         );
    constructor Create(CreateSuspended : Boolean);
    procedure Execute; override;
    procedure MsgCopy;
    procedure MsgEnd;
  end;

var
  Form1: TForm1;
  CopyFiles : TCopyFiles;
  CopyFilesThread : THandle = 0;

implementation

{$R *.dfm}

// Constructor de la clase TCopyFiles
constructor TCopyFiles.Create(CreateSuspended : Boolean);
begin
   inherited;
   FilesExcluded := TStringList.Create;
end;

// Selecciona los archivos a ser copiados del directorio fuente al destino de forma recursiva
procedure TCopyFiles.SearchFiles(DirSource, DirTarget, FileExt : String;
                                 var FileList : TStringList;
                                 FilesExcluded : TStringList
                                );
var
   SR : TSearchRec;
   i : Integer;
   ExcludedFile : Boolean;

begin

   DirSource := IncludeTrailingPathDelimiter(DirSource);
   DirTarget := IncludeTrailingPathDelimiter(DirTarget);

   if (not DirectoryExists(DirSource)) or (not DirectoryExists(DirTarget)) then
      Exit;

   if FindFirst(DirSource + '*.*', faAnyFile, SR) = 0 then
   repeat
      if ((SR.Attr and fadirectory) = fadirectory) then
      begin
         if(SR.Name <> '.') and (SR.Name <> '..') then
            SearchFiles(DirSource + SR.Name, DirTarget, FileExt, FileList, FilesExcluded);
      end
      else
      begin
         ExcludedFile := False;

         for i := 0 to FilesExcluded.Count - 1 do
            if Pos(LowerCase(FilesExcluded.Strings[i]), LowerCase(SR.Name)) > 0 then
            begin
               ExcludedFile := True;
               Break;
            end;

         if ExcludedFile then Continue;

         if FileExt = EmptyStr then
            FileList.Add(DirSource + SR.Name)
         else
         if LowerCase(ExtractFileExt(SR.Name)) = LowerCase(FileExt) then
            FileList.Add(DirSource + SR.Name);
      end;
   until FindNext(SR) <> 0;

   FindClose(SR);

end;

// Ejecuta el hilo de copia de archivos
procedure TCopyFiles.Execute;
var
   FileList : TStringList;
   i : Integer;
   FromFileName, ToFileName : String;
   AuxFileName, AuxFileExt : String;
   CountFile : Integer;

begin

   FreeOnTerminate := True;

   FileList := TStringList.Create;

   SearchFiles(DirSource, DirTarget, FileExt, FileList, FilesExcluded);

   for i := 0 to FileList.Count - 1 do
   begin

      FromFileName := FileList.Strings[i];

      if FileExtNew <> EmptyStr then
         ToFileName := IncludeTrailingPathDelimiter(DirTarget)
                       + ChangeFileExt(ExtractFileName(FileList.Strings[i]),FileExtNew)
      else
         ToFileName := IncludeTrailingPathDelimiter(DirTarget) + ExtractFileName(FileList.Strings[i]);

      CountFile := 0;

      while True do
      begin
         if FileExists(ToFileName) then
         begin
            Inc(CountFile);
            AuxFileName := ExtractFileName(ChangeFileExt(FromFileName,''));
            AuxFileExt := ExtractFileExt(FromFileName);
            ToFileName := ExtractFilePath(ToFileName)
                          + AuxFileName
                          + '_' + IntToStr(CountFile)
                          + AuxFileExt;
         end
         else
            Break;
      end;

      IFile := i + 1;
      FFile := FileList.Count;

      Synchronize(MsgCopy);

      Copyfile(PChar(FromFileName),PChar(ToFileName),False);

   end;

   FileList.Free;
   FilesExcluded.Free;

   Synchronize(MsgEnd);

end;

// Muestra un mensaje de progreso de copia de archivos
procedure TCopyFiles.MsgCopy;
begin
   Form1.Caption := Format('Copiando %d de %d',[IFile, FFile]);
end;

// Muestra un mensaje de finalización de copia de archivos
procedure TCopyFiles.MsgEnd;
begin
   Form1.Caption := 'CopyFiles';
   MsgApp := Format('Copia Recursiva de Archivos *%s del Folder %s al Folder %s Completada',
                    [FileExt, DirSource,DirTarget]);
   Beep;
   MessageDlg(MsgApp, mtInformation, [mbOK], 0);
   CopyFilesThread := 0;
end;

// Inicia un proceso de copia recursiva de archivos desde el directorio fuente al destino
procedure TForm1.Button1Click(Sender: TObject);
var
   MsgApp : String;
   DirSource, DirTarget, FileExt, FileExtNew : String;
   FilesExcluded : TStringList;

begin

   DirSource := 'D:\HostDownload';
   DirTarget := 'D:\TestNelson-2';
   FileExt := '.rtf';
   FileExtNew := '.doc';

   // Exclusión de archivos a ser copiados (Se pueden excluir tantos como se requiera) 
   FilesExcluded := TStringList.Create;
   FilesExcluded.Add('x1'); // Excluye todos los archivos que incluyan x1 en su nombre
   FilesExcluded.Add('x2'); // Excluye todos los archivos que incluyan x2 en su nombre
   FilesExcluded.Add('x3'); // Excluye todos los archivos que incluyan x3 en su nombre

   if (CopyFilesThread = 0) then
   begin

      if (not DirectoryExists(DirSource)) or (not DirectoryExists(DirTarget)) then
      begin
         MsgApp := 'Error de I/O en Directorio Fuente o Destino';
         Beep;
         MessageDlg(MsgApp,mtInformation,[mbOK],0);
         Exit;
      end;

      CopyFiles := TCopyFiles.Create(True);
      CopyFiles.DirSource := DirSource;
      CopyFiles.DirTarget := DirTarget;
      CopyFiles.FileExt := FileExt; // CopyFiles.FileExt := '' copia todos los archivos
      CopyFiles.FileExtNew := FileExtNew; // CopyFiles.FileExtNew := '' no cambia la extensión
      CopyFiles.FilesExcluded.Assign(FilesExcluded);
      CopyFiles.Resume;
      CopyFilesThread := CopyFiles.Handle;

      FilesExcluded.Free;

   end
   else
   begin
      MsgApp := 'Hay un Proceso de Copia Activo, Favor Esperar que Finalize';
      Beep;
      MessageDlg(MsgApp,mtInformation,[mbOK],0);
      Exit;
   end;

end;

end.
Responder Con Cita
  #29  
Antiguo 24-11-2015
gdlrinfo gdlrinfo is offline
Miembro
 
Registrado: may 2007
Posts: 131
Poder: 17
gdlrinfo Va por buen camino
Graciasss

Estaba de otra manera no me había dado cuenta muchas gracias funciona a la perfección!!! atte. Gonzalo
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
Búsqueda de archivos ordenada por fecha Faust Varios 10 26-07-2010 16:43:21
Habilitar Boton de Busqueda al enfocar Objetos Especificos ygkw API de Windows 6 01-11-2006 15:53:11
Busqueda de archivos jdattoli OOP 1 26-08-2005 19:44:24
Busqueda de Archivos jorgito PHP 7 03-08-2005 18:50:04
Busqueda de archivos Nathan Varios 1 17-03-2004 17:27:38


La franja horaria es GMT +2. Ahora son las 01:21:55.


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