Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #41  
Antiguo 11-05-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
elmago00,

Cita:
Empezado por elmago00
...este es tu código que trato de usar sin el control...la idea es modificar el archivo sin visualizarlo...así la corrección en el inChipset.bin se hace mas rápido...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
  System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
  FMX.StdCtrls;

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

var
  Form1: TForm1;

implementation

{$R *.fmx}

// Cambia n ocurrencias de una cadena Hex por una nueva cadena Hex en un archivo
function ChangeFileHex(OldHex, NewHex, FileName : String) : Boolean;
var
   F1, F2 : TFileStream;
   Buffer : Array of Byte;
   AuxHex : String;
   i,p : Integer;

begin

   try

      F1 := TFileStream.Create(FileName, fmOpenRead);
      F2 := TFileStream.Create(ChangeFileExt(FileName,'.new'), fmCreate);

      SetLength(Buffer, Length(OldHex) div 2);

      while F1.Position < F1.Size do
      begin
         F1.Read(Buffer[0], Length(Buffer));

         AuxHex := EmptyStr;
         for i := Low(Buffer) to High(Buffer) do
            AuxHex := AuxHex + IntToHex(Buffer[i],2);

         if OldHex = AuxHex then
         begin
            p := 1;
            i := 0;
            while p <= Length(NewHex) do
            begin
               Buffer[i] := StrToInt('$' + Copy(NewHex,p,2));
               Inc(p,2);
               Inc(i,1);
            end;
            F2.Write(Buffer[0], Length(Buffer));
         end
         else
            F2.Write(Buffer[0], Length(Buffer));
      end;

      F1.Free;
      F2.Free;
      Result := True;

   except

      F1.Free;
      F2.Free;
      Result := False;

   end;

end;

// Sustituye en un Offset de archivo una cadena Hex
function ChangeFileOffset(Offset : Integer; NewHex, FileName : String) : Boolean;
var
   F1, F2 : TFileStream;
   Buffer : Array of Byte;
   AuxHex : String;
   i,p : Integer;
   CurrOffset,Step : Integer;

begin

   try

      F1 := TFileStream.Create(FileName, fmOpenRead);
      F2 := TFileStream.Create(ChangeFileExt(FileName,'.new'), fmCreate);

      Step := Length(NewHex) div 2;

      SetLength(Buffer, Step);

      CurrOffset := 0;

      while F1.Position < F1.Size do
      begin
         F1.Read(Buffer[0], Length(Buffer));

         if Offset = CurrOffset then
         begin
            p := 1;
            i := 0;
            while p <= Length(NewHex) do
            begin
               Buffer[i] := StrToInt('$' + Copy(NewHex,p,2));
               Inc(p,2);
               Inc(i,1);
            end;
            F2.Write(Buffer[0], Length(Buffer));
         end
         else
            F2.Write(Buffer[0], Length(Buffer));

         Inc(CurrOffset, Step);
      end;

      F1.Free;
      F2.Free;
      Result := True;

   except

      F1.Free;
      F2.Free;
      Result := False;

   end;

end;

// Cambia n ocurrencias de una cadena Hex por una nueva cadena Hex en un archivo
procedure TForm1.Button1Click(Sender: TObject);
var
   OldHex, NewHex, Filename : String;

begin

   OldHex := '671254437573746F6D466F726D2E4C6F';
   NewHex := 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF';
   FileName := 'C:\Developers\Delphi XE4\Test-17 (ChangeFileHex)\FileTest.dcu';

   if ChangeFileHex(OldHex,NewHex,Filename) then
      MessageDlg('Cambio de Archivo Realizado', TMsgDlgType.mtInformation,[TMsgDlgBtn.mbOk],0)
   else
      MessageDlg('Error en Cambio de Archivo', TMsgDlgType.mtError,[TMsgDlgBtn.mbOk],0);

end;

// Sustituye en un Offset de archivo una cadena Hex
procedure TForm1.Button2Click(Sender: TObject);
var
   Offset : Integer;
   NewHex, Filename : String;

begin

   Offset := 480;
   NewHex := 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
   FileName := 'C:\Developers\Delphi XE4\Test-17 (ChangeFileHex)\FileTest.dcu';

   if ChangeFileOffset(Offset,NewHex,Filename) then
      MessageDlg('Cambio de Archivo Realizado', TMsgDlgType.mtInformation,[TMsgDlgBtn.mbOk],0)
   else
      MessageDlg('Error en Cambio de Archivo', TMsgDlgType.mtError,[TMsgDlgBtn.mbOk],0);

end;

end.
El código anterior en Delphi XE4 (FireMonkey) bajo Windows 7 Professional x32, permite cambiar una cadena hexadecimal en un archivo por medio de dos funciones:

1- Función ChangeFileHex: Cambia n ocurrencias de una cadena hexadecimal por una nueva cadena hexadecimal en un archivo dado y salva los cambios en un nuevo archivo del mismo nombre del original con extensión .new, en el mismo directorio del archivo de entrada.

2- Función ChangeFileOffset: Sustituye en un Offset (Dirección en Decimal) de un archivo dado una cadena hexadecimal y salva los cambios en un nuevo archivo del mismo nombre del original con extensión .new, en el mismo directorio del archivo de entrada.

Los Bytes Per Row (BPF) de ambas funciones están en función de la longitud de la cadenas de entrada OldHex (Función ChangeFileHex) y NewHex (Función ChangeFileOffset), siendo importante recordar que ambas cadenas deben ser del mismo tamaño en las funciones mencionadas.

Nota: Las dos funciones anteriores leen y modifican los archivos de entrada y salida directamente en disco, lo cual les permite procesar archivos de cualquier tamaño, limitados solo por las características del Sistema de Archivos del Sistema Operativo de forma rápida y eficiente e independientemente de cualquier componente de Delphi, funcionado correctamente según lo esperado en las pruebas realizadas.

Espero sea útil

Nelson.
Responder Con Cita
  #42  
Antiguo 11-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
Muchas gracias ya esta resuelto todo. finalice el proyecto y mañana lo entrego a la empresa.
Gracias Nelson y ecfisa.
Responder Con Cita
  #43  
Antiguo 11-05-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
elmago00,

Cita:
Empezado por elmago00
...finalice el proyecto y mañana lo entrego a la empresa...
Falta una pequeña corrección

Revisa este código:
Código Delphi [-]
 unit Unit1;
 
 interface
 
 uses
   System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
   System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
   FMX.StdCtrls;
 
 type
   TForm1 = class(TForm)
     Button1: TButton;
     Button2: TButton;
     procedure Button1Click(Sender: TObject);
     procedure Button2Click(Sender: TObject);
   private
     { Private declarations }
   public
     { Public declarations }
   end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.fmx}
 
 // Cambia n ocurrencias de una cadena Hex por una nueva cadena Hex en un archivo
 function ChangeFileHex(OldHex, NewHex, FileName : String) : Boolean;
 var
    F1, F2 : TFileStream;
    Buffer : Array of Byte;
    AuxHex : String;
    i,p : Integer;
    BPF, NBR : Integer;  // BPF = Bytes Per Row, NBR = Number of Bytes Read
 
 begin
 
    try
 
       F1 := TFileStream.Create(FileName, fmOpenRead);
       F2 := TFileStream.Create(ChangeFileExt(FileName,'.new'), fmCreate);
 
       BPF := Length(OldHex) div 2;
 
       SetLength(Buffer, BPF);
 
       while F1.Position < F1.Size do
       begin
          NBR := F1.Read(Buffer[0], BPF);
 
          AuxHex := EmptyStr;
          for i := Low(Buffer) to High(Buffer) do
             AuxHex := AuxHex + IntToHex(Buffer[i],2);
 
          if OldHex = AuxHex then
          begin
             p := 1;
             i := 0;
             while p <= Length(NewHex) do
             begin
                Buffer[i] := StrToInt('$' + Copy(NewHex,p,2));
                Inc(p,2);
                Inc(i,1);
             end;
             F2.Write(Buffer[0], NBR);
          end
          else
             F2.Write(Buffer[0], NBR);
       end;
 
       F1.Free;
       F2.Free;
       Result := True;
 
    except
 
       F1.Free;
       F2.Free;
       Result := False;
 
    end;
 
 end;
 
 // Sustituye en un Offset de archivo una cadena Hex
 function ChangeFileOffset(Offset : Integer; NewHex, FileName : String) : Boolean;
 var
    F1, F2 : TFileStream;
    Buffer : Array of Byte;
    AuxHex : String;
    i,p : Integer;
    CurrOffset : Integer;
    BPF, NBR : Integer;  // BPF = Bytes Per Row, NBR = Number of Bytes Read
 
 begin
 
    try
 
       F1 := TFileStream.Create(FileName, fmOpenRead);
       F2 := TFileStream.Create(ChangeFileExt(FileName,'.new'), fmCreate);
 
       BPF := Length(NewHex) div 2;
 
       SetLength(Buffer, BPF);
 
       CurrOffset := 0;
 
       while F1.Position < F1.Size do
       begin
 
          NBR := F1.Read(Buffer[0], BPF);
 
          if Offset = CurrOffset then
          begin
             p := 1;
             i := 0;
             while p <= Length(NewHex) do
             begin
                Buffer[i] := StrToInt('$' + Copy(NewHex,p,2));
                Inc(p,2);
                Inc(i,1);
             end;
             F2.Write(Buffer[0], NBR);
          end
          else
             F2.Write(Buffer[0], NBR);
 
          Inc(CurrOffset, BPF);
       end;
 
       F1.Free;
       F2.Free;
       Result := True;
 
    except
 
       F1.Free;
       F2.Free;
       Result := False;
 
    end;
 
 end;
 
 // Cambia n ocurrencias de una cadena Hex por una nueva cadena Hex en un archivo
 procedure TForm1.Button1Click(Sender: TObject);
 var
    OldHex, NewHex, Filename : String;
 
 begin
 
    OldHex := '671254437573746F6D466F726D2E4C6F';
    NewHex := 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF';
    FileName := 'C:\Developers\Delphi XE4\Test-17 (ChangeFileHex)\FileTest.dcu';
 
    if ChangeFileHex(OldHex,NewHex,Filename) then
       MessageDlg('Cambio de Archivo Realizado', TMsgDlgType.mtInformation,[TMsgDlgBtn.mbOk],0)
    else
       MessageDlg('Error en Cambio de Archivo', TMsgDlgType.mtError,[TMsgDlgBtn.mbOk],0);
 
 end;
 
 // Sustituye en un Offset de archivo una cadena Hex
 procedure TForm1.Button2Click(Sender: TObject);
 var
    Offset : Integer;
    NewHex, Filename : String;
 
 begin
 
    Offset := 480;
    NewHex := 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
    FileName := 'C:\Developers\Delphi XE4\Test-17 (ChangeFileHex)\FileTest.dcu';
 
    if ChangeFileOffset(Offset,NewHex,Filename) then
       MessageDlg('Cambio de Archivo Realizado', TMsgDlgType.mtInformation,[TMsgDlgBtn.mbOk],0)
    else
       MessageDlg('Error en Cambio de Archivo', TMsgDlgType.mtError,[TMsgDlgBtn.mbOk],0);
 
 end;
 
 end.
El código anterior en Delphi XE4 (FireMonkey) bajo Windows 7 Professional x32, es la versión 2 del código del Msg #41 con los siguientes cambios:

1- Optimiza el código y lo hace más legible.

2- Corrige el Número de Bytes a Escribir en función del NBR (Number of Bytes Read) en el caso de que los archivos procesados no sean múltiplos de BPF (Bytes Per Row).

Espero sea útil

Nelson.
Responder Con Cita
  #44  
Antiguo 11-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
gracias, lo tendré en cuenta, ya que hoy lo enviare por correo a la empresa. muchas gracias
sin ustedes nunca hubiera solucionado el problema, gracias
Responder Con Cita
  #45  
Antiguo 06-01-2015
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
Hola Nelson,
Perdona la molestia, pero ahora tengo una pregunta, sera posible cambiar todas las cadenas hexadecimales, que tengan un mismo valor?
es que tu código solo me permite, cambiar una sola linea, pero debo cambiar varias, y con tu código, solo cambia una a la vez.

Gracias por tu respuesta.
Responder Con Cita
  #46  
Antiguo 06-01-2015
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
elmago00,

Cita:
Empezado por elmago00
...¿Sera posible cambiar todas las cadenas hexadecimales, que tengan un mismo valor?...


Revisa la función ChangeFileHex del Msg #43, esta permite cambiar n ocurrencias de una cadena Hex por una nueva cadena Hex en un archivo.

Espero sea útil

Nelson.
Responder Con Cita
  #47  
Antiguo 06-01-2015
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
Si precisamente es la función. Q utilizo.
Seguramente algo no e hecho bien por que solo
Cambia una solí cadena, pero las otras siguen igual.
Es decir si yo tengo 6 cadenas hexadecimales de. 16. Bytes.
Solo cambia la primera cadena de 16 y las demás no.


Volvere a rebisar gracias de nuevo.

Última edición por elmago00 fecha: 06-01-2015 a las 10:39:02.
Responder Con Cita
  #48  
Antiguo 06-01-2015
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
no Nelson, sigue cambiando una sola cadena, veras si yo tengo esto.

2D 55 FD 85 CD 22 63 EE ED B7 EE 44 01 DD 44
2D 55 FD 85 CD 22 63 EE ED B7 EE 44 01 DD 44
2D 55 FD 85 CD 22 63 EE ED B7 EE 44 01 DD 44
2D 55 FD 85 CD 22 63 EE ED B7 EE 44 01 DD 44

solo cambia la primera cadena, y a veces la segunda o tercera, pero solo una. las otras siguen igual.
Responder Con Cita
  #49  
Antiguo 06-01-2015
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
elmago00,

Cita:
Empezado por elmago00
...sigue cambiando una sola cadena...


Te comento:

1- Reviso la función ChangeFileHex del Msg #43 y en lo que tenga una respuesta la publico.

2- Te sugiero publicar un link con el archivo que quieres modificar y el detalle de la modificación (Hexadecimal-Anterior y Hexadecimal-Nuevo).

Saludos,

Nelson.

Última edición por nlsgarcia fecha: 06-01-2015 a las 22:18:45.
Responder Con Cita
  #50  
Antiguo 07-01-2015
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
elmago00,

Cita:
Empezado por nlsgarcia
...Reviso la función ChangeFileHex del Msg #43 y en lo que tenga una respuesta la publico...


Te comento:

1- Revise la función ChangeFileHex del Msg #43 y funciona correctamente según lo esperado en pruebas realizadas en archivos de texto y binarios.

2- Te sugiero publicar un link con el archivo que quieres modificar y el detalle de la modificación (Hexadecimal-Anterior y Hexadecimal-Nuevo), para poder hacer pruebas con la data real.

Saludos,

Nelson.
Responder Con Cita
  #51  
Antiguo 07-01-2015
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
lo hago asi
Código Delphi [-]
 
var
    OldHex, NewHex, Filename : String;
 
 begin
OldHex := '35740203652537'; // cadena de 7
   NewHex := '25632322EFDDE7';
   FileName := 'dump.dll';   // 

   if ChangeFileHex(OldHex,NewHex,Filename) then
   begin

  Memo1.Lines.Add('Done!');
 
       end
   else
      begin
      ShowMessage('Error');
 
     end;

el archivo para esta cadena es este:
dump.rar

y si yo intento cambiar varias cadenas de 16 me cambia solo una, y las otras no.
entre menor es la cadena, mayor es el cambio que hace y viceversa.


gracias por tu tiempo.
Responder Con Cita
  #52  
Antiguo 07-01-2015
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
Veras que la cadena anterior aparece 6. Veces pero solo cambia 3 cadenas y las otras se mantienen.
Y si cambias cadenas de mayor tamaño solo cambia una.
Responder Con Cita
  #53  
Antiguo 08-01-2015
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
El silencio. Me hace temer lo peor.
Esta difícil y la vez extraño verdad? Yo llevó 2 semanas y nada.

Disculpa el haberte puesto en este lío Nelson. Agradezco tu ayuda.

Última edición por elmago00 fecha: 08-01-2015 a las 07:41:33.
Responder Con Cita
  #54  
Antiguo 08-01-2015
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
elmago00,

Cita:
Empezado por elmago00
...El silencio. Me hace temer lo peor...


En lo que lo tenga listo lo publico, me falta un detalle

Saludos,

Nelson.

Última edición por nlsgarcia fecha: 08-01-2015 a las 12:50:22.
Responder Con Cita
  #55  
Antiguo 08-01-2015
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
elmago00,

Cita:
Empezado por nlsgarcia
...En lo que lo tenga listo lo publico, me falta un detalle...


Revisa este código:
Código Delphi [-]
// Cambia n ocurrencias de una cadena Hex por una nueva cadena Hex en un archivo
function ChangeFileHex(OldHex, NewHex, FileName : String) : Boolean;
var
   F1, F2 : TFileStream;
   Buffer : Array of Byte;
   AuxHex : String;
   i,p, PosFile : Integer;
   BPF, NBR : Integer;  // BPF = Bytes Per Row, NBR = Number of Bytes Read

begin

   try

      F1 := TFileStream.Create(FileName, fmOpenRead);
      F2 := TFileStream.Create(ChangeFileExt(FileName,'.new'), fmCreate);

      BPF := Length(OldHex) div 2;

      SetLength(Buffer, BPF);

      PosFile := 0;

      while F1.Position < F1.Size do
      begin

         Application.ProcessMessages;

         NBR := F1.Read(Buffer[0], BPF);

         AuxHex := EmptyStr;

         for i := Low(Buffer) to High(Buffer) do
            AuxHex := AuxHex + IntToHex(Buffer[i],2);

         if OldHex = AuxHex then
         begin
            for i := Low(Buffer) to High(Buffer) do
               Buffer[i] := 0;
            p := 1;
            i := 0;
            while p <= Length(NewHex) do
            begin
               Buffer[i] := StrToInt('$' + Copy(NewHex,p,2));
               Inc(p,2);
               Inc(i,1);
            end;
            F2.Write(Buffer[0], NBR);
            Inc(PosFile,BPF);
         end
         else
         begin
            F2.Write(Buffer[0], 1);
            Inc(PosFile);
            F1.Seek(PosFile,soFromBeginning);
         end;

      end;

      F1.Free;
      F2.Free;
      Result := True;

   except

      F1.Free;
      F2.Free;
      Result := False;

   end;

end;
El código anterior en Delphi 7 sobre Windows 7 Professional x32, permite cambiar N ocurrencias de una cadena hexadecimal por una nueva sin importar el tamaño de la misma, esta es una modificación de la función publicada en el Msg #43.

Nota:

1- La velocidad de procesamiento es un bit menor dado que se lee el archivo por medio de una ventana deslizante determinada por la cadena de búsqueda, lo cual garantiza que se encuentren y modifiquen todas las ocurrencias de la misma.

2- La cadena de búsqueda y su sustituto (OldHex y NewHex), deben ser del mismo tamaño.

3- La función fue probada con archivos de texto y binarios (.exe y .dll), funcionado correctamente según lo esperado en todos los casos.

El archivo dump.dll original y su versión modificada dump.new en función de lo publicado en el Msg #51, esta disponible en : Test Dump

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 08-01-2015 a las 14:26:14.
Responder Con Cita
  #56  
Antiguo 08-01-2015
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 12
elmago00 Va por buen camino
Muchas Gracias Nelson
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
ayuda con este codigo kurono Varios 5 02-04-2014 01:25:11
Se estrena este foro sobre FireMonkey Neftali [Germán.Estévez] FireMonkey 9 09-11-2012 14:05:30
ayuda con este codigo kurono Varios 4 13-06-2008 02:03:29
necesito ayuda con este codigo kurono Varios 4 06-05-2008 08:02:07
procedimiento almacenado ayuda con este codigo pipecato Varios 5 16-12-2005 13:24:34


La franja horaria es GMT +2. Ahora son las 19:59:26.


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