Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 08-05-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
Cita:
Empezado por elmago00 Ver Mensaje
...
¿se puede recuperar el archivo original, pero después de haberlo modificado?.
Hola elmago00.

No me queda claro desde donde o a partir de qué pensas recuperar el archivo original, pero sin dudas agradecerás haber llamado a este procedimiento antes de modificar el ejecutable:
Código Delphi [-]
procedure BeforeDoingCrap(aFileName: TFileName);
begin
  if not CopyFile(PChar(aFileName),
                  PChar(ExtractFilePath(aFileName)+ChangeFileExt(ExtractFileName(aFileName),'')+'.BAK'),
                  True) then
    MessageBox(0,PChar('Error: ' + SysErrorMessage(GetLastError)), '', MB_ICONERROR);
end;
De este modo, si se estropea el ejecutable, basta con borrarlo y luego renombrar el archivo .BAK como .EXE.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #22  
Antiguo 08-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
...se podrá recuperar el archivo con su extensión original pues al hacer el cambio en el archivo después de editarlo, no vuelve a funcionar, por que esta en hexadecimal...
Pregunto:

1- ¿Realizastes las correcciones al código indicadas en el Msg #18?, son vitales para la correcta carga y visualización del archivo en proceso.

2- ¿Que tipo de archivos estas modificando y por que lo haces de esta forma?

3- En el Msg #10 indicas que la aplicación esta hecha en FireMonkey y que tiene más de 40000 líneas de código, ¿Cual es el objetivo de esta aplicación?.

4- ¿Puedes detallar el proceso de modificación del archivo(s) en cuestión?

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 08-05-2014 a las 14:57:06.
Responder Con Cita
  #23  
Antiguo 08-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
hola,
este es el tipo de archivo. por favor descarguen el archivo para que lo vean ustedes mismos.

http://www.mediafire.com/download/xj.../inChipset.rar

quiero restaurarlo a su estado original, después de editarlo. es decir guardar cambios.

les adjunto una imagen para que ven la dirección modificar. y la verdad haber si me ayudan ya que reemplazo la cadena hexadecimal, pero la anterior no se borra,
sino que sigue delante de la otra. como si añadiera string y no reemplaza el hexadecimal, pues debo borrar los siguientes 47 caracteres. solo puedo especificar la dirección, pues el hexadecimal es diferente en todos los archivos. no puedo especificar el hexadecimal a reemplazar. solo la dirección.

es poco difícil verdad. debo entregrarlo en dos días jeje

Última edición por elmago00 fecha: 08-05-2014 a las 20:42:30.
Responder Con Cita
  #24  
Antiguo 08-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
amigos alguna idea de como hacer todo esto? el tiempo se me agota jeje
Responder Con Cita
  #25  
Antiguo 08-05-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por nlsgarcia Ver Mensaje
elmago00,

Pregunto:

1- ¿Realizastes las correcciones al código indicadas en el Msg #18?, son vitales para la correcta carga y visualización del archivo en proceso.

2- ¿Que tipo de archivos estas modificando y por que lo haces de esta forma?

3- En el Msg #10 indicas que la aplicación esta hecha en FireMonkey y que tiene más de 40000 líneas de código, ¿Cual es el objetivo de esta aplicación?.

4- ¿Puedes detallar el proceso de modificación del archivo(s) en cuestión?

Espero sea útil

Nelson.
Esperando respuestas...
Responder Con Cita
  #26  
Antiguo 08-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Esperando respuestas...
si hice las correcciones, eso ya esta solucionado, veo el archivo y lo guardo, esta solucionado.
el tipo de archivo se los pues en el link de descarga.
el objetivo ya lo e detallado en el anterior mensaje. asi como el proceso de edición del mismo.


saludos
Responder Con Cita
  #27  
Antiguo 08-05-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
Cita:
Empezado por elmago00 Ver Mensaje
amigos alguna idea de como hacer todo esto? el tiempo se me agota jeje
Hola elmago00.

Sigo sin entender desde donde queres restaurar el archivo original, pero ya te sugerí una idea. Te ejemplifico el uso:
Código Delphi [-]
...
procedure BeforeDoingCrap(const aFileName: TFileName);
begin
  CopyFile(PChar(aFileName),
           PChar(ExtractFilePath(aFileName)+ChangeFileExt(ExtractFileName(aFileName),'')+'.BAK'),
           True);
end;

procedure FixCrap(const aFileName: TFileName);
begin
  if MessageBox(0,'¿ Desea restaurar el archivo original ?','',MB_ICONQUESTION+MB_YESNO)=IDYES then
  begin
    Windows.DeleteFile(PChar(aFileName));
    if not MoveFile(PChar(ExtractFilePath(aFileName)+ChangeFileExt(ExtractFileName(aFileName),'')+'.BAK'),
       PChar(aFileName)) then
    MessageBox(0,PChar('Error: ' + SysErrorMessage(GetLastError)), '', MB_ICONERROR);
  end;
end;

procedure TForm1.btnLoadFileClick(Sender: TObject);
begin 
  BeforeDoingCrap('C:\Carpeta\notepad.exe'); 
  // En este punto tenes realizado el resguardo y podes hacer 
  // con el archivo original todas las aberraciones se se te ocurran 
  procedure DumpFile('C:\Carpeta\notepad.exe',16); 
end;


// Boton anti-pánico
procedure TForm1.btnFixClick(Sender: TObject);
begin
  FixCrap('C:\Carpeta\notepad.exe'); // Restaurar original desde copia
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #28  
Antiguo 08-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
quiero editar el archivo en hexadecimal y guardarlo todo. guardar todo el archivo hexadecimal pero ya modificado y en su extensión original.
para que funciono como antes con la modificacion hecha.

Última edición por elmago00 fecha: 08-05-2014 a las 21:16:53.
Responder Con Cita
  #29  
Antiguo 08-05-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 elmago00.
Cita:
Empezado por elmago00 Ver Mensaje
quiero editar el archivo en hexadecimal y guardarlo todo. guardar todo el archivo hexadecimal pero ya modificado y en su extensión original.
para que funciono como antes con la modificacion hecha.
Ahora si te entiendo.

Pero es claro que, el que funcione o no, dependerá de los cambios que realizes. Basta una sóla modificación indebida sobre una dirección de memoria, puntero, segmento, offset, etc, como para hacer que la aplicación se cuelgue o peor aún... haga alguna cosa no deseada.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #30  
Antiguo 08-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
...el tiempo se me agota...
Te comento:

1- No has respondido en detalle las preguntas 2, 3 y 4 formuladas en el Msg #22.

2- No especificas ningún detalle de la funcionalidad del archivo inChipset.bin del Msg #23, ¿Que es ese archivo?, ¿Cual es su origen?, ¿Cual es su uso?, ¿Que es lo que quieres modificar y por que?.

Suerte en tu proyecto

Nelson.
Responder Con Cita
  #31  
Antiguo 09-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
el objetivo es modificar la función de este IC, por que funciona bien, y para eso debemos hacer lo antes descrito.
esto solo de puede hacer en ensamblador y hexadecimal. nosotros lo hacemos en hexadecimal.


y para colmo a la hora de modificar el archivo hexadecimal, no puedo eliminar la cadena anterior por que es diferente en todos los archivos, lo unico que se me ocurre es eliminar un conteo de los siguientes caracteres, pero hasta ahora no veo como.


después de hacer esto debo restaurarlo a su extensión original

ahora si conteste a sus preguntas?

se que es complicado, tienen alguna idea.

Última edición por elmago00 fecha: 09-05-2014 a las 07:27:51.
Responder Con Cita
  #32  
Antiguo 09-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Cita:
ahora si conteste a sus preguntas?

se que es complicado, tienen alguna idea.

intente realizar un conteo de caracteres siguientes para eliminarlo pero nada funciona.
y menos el recuperar el archivo despues de editarlo.
Responder Con Cita
  #33  
Antiguo 09-05-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 elmago00.
Cita:
Empezado por elmago00 Ver Mensaje
quiero editar el archivo en hexadecimal y guardarlo todo. guardar todo el archivo hexadecimal pero ya modificado y en su extensión original.
para que funciono como antes con la modificacion hecha.
Hola elmago00.

Este código permite abrir, modificar, buscar texto obre la columna ASCII y guardar el archivo modificado con el mismo nombre u otro.
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, XPMan, Menus, ComCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    FindDialog1: TFindDialog;
    Archivo1: TMenuItem;
    miOpen: TMenuItem;
    miSave: TMenuItem;
    Buscartexto1: TMenuItem;
    Panel1: TPanel;
    Label1: TLabel;
    ComboBox1: TComboBox;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure miOpenClick(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure Buscartexto1Click(Sender: TObject);
    procedure FindDialog1Find(Sender: TObject);
    procedure miSaveClick(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    FStream: TMemoryStream;
    FColAsc: TStrings;
    FFind: Integer;
    procedure DumpFile(aFileName:TFileName; const BPF: Word);
    procedure SaveDump(aFileName:TFileName; const BPF: Word);
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

{ Public declarations }
procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.CommaText:= '8,10,16,24,32,48,64,128,255';
  ComboBox1.ItemIndex:= 2;
  FStream:= TMemoryStream.Create;
  FColAsc:= TStringList.Create;
  with StringGrid1 do
  begin
    Options:= Options-[goVertLine]-[goHorzLine]+[goEditing];
    Font.Name:= 'Courier';
    Font.Size:= 10;
    Col:= 1;
    Row:= 1;
  end;
end;

procedure TForm1.miOpenClick(Sender: TObject);
begin
  with OpenDialog1 do
  begin
    Filter:= '*.*';
    if Execute then
    begin
      Caption:= FileName;
      DumpFile(FileName, StrToInt(ComboBox1.Items[ComboBox1.ItemIndex]) );
    end;
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  with TStringGrid(Sender) do
    CanSelect:= ((ACol>0)and(ACol < ColCount-1) and
      ((ARow>= FixedRows)and(ARow < RowCount)));
end;

procedure TForm1.miSaveClick(Sender: TObject);
begin
  with SaveDialog1 do
  begin
    Filter:= '*.*';
    if Execute then SaveDump(FileName, 16);
  end;
end;

procedure TForm1.Buscartexto1Click(Sender: TObject);
begin
  with FindDialog1 do
  begin
    FFind:= 0;
    Execute;
  end;
end;

procedure TForm1.FindDialog1Find(Sender: TObject);
begin
  while(FFind < FColAsc.Count)and(Pos(FindDialog1.FindText,FColAsc[FFind])=0) do
      Inc(FFind);
  if (FFind < FColAsc.Count-1) then
  begin
    Inc(FFind);
    StringGrid1.Row:= FFind;
    StringGrid1.Col:= 1;
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  FStream.Free;
  FColAsc.Free;
end;


{ Private declarations }
procedure TForm1.DumpFile(aFileName:TFileName; const BPF: Word);
var
  c, i, r: integer;
  ascii: string;
  aux: Byte;
begin
  FStream.LoadFromFile(aFileName);
  with StringGrid1 do
  begin
    ColWidths[0]:= 80;
    Cells[0,0]:= 'Offset (h)';
    ColCount:= BPF+2;
    ColWidths[ColCount-1]:= Canvas.TextWidth('X')*BPF+10;
    Cells[ColCount-1,0]:= 'ASCII';
    for i:= 0 to BPF-1 do
    begin
      ColWidths[i+1]:= 30;
      Cells[i+1,0]:= IntToHex(i, 2);
    end;
    RowCount:= FStream.Size div BPF+1;

    FStream.Seek(0, soBeginning);
    c:= 0;
    r:= FixedRows;
    while c < FStream.Size do
    begin
      Cells[0, r]:= Format('%s',[IntToHex(c, 8)]);
      ascii:= EmptyStr;
      i:= 0;
      while (i < BPF) and(i+c < FStream.Size) do
      begin
        FStream.Read(aux, SizeOf(Byte));
        Cells[i+1,r]:= IntToHex(aux,2);
        if aux in [$0..$0D,$80..$90] then aux:= Ord('.');
        ascii:= ascii + Chr(aux);
        Inc(i);
      end;
      FColAsc.Add(ascii);
      Cells[ColCount-1,r]:= ascii;
      Inc(c, BPF);
      Inc(r);
    end;
  end;
end;

procedure TForm1.SaveDump(aFileName:TFileName; const BPF: Word);
var
  MS: TMemoryStream;
  c,r: Integer;
  buff: array of Byte;
begin
  with StringGrid1 do
  begin
    MS:= TMemoryStream.Create;
    try
      SetLength(buff, BPF);
      for r:= FixedRows to RowCount-1 do
      begin
        for c:= 0 to BPF-1 do buff[c]:= StrToInt('$'+Cells[c+1, r]);
        MS.WriteBuffer(buff[0], BPF);
      end;
      MS.SaveToFile(aFileName);
    finally
      SetLength(buff,0);
      MS.Free;
    end;
  end;
end;
end.
Lamento no haberlo escrito para FireMonkey pero solo cuento con Delphi 7. Con seguridad lo podrás adaptar del modo como comentaste en el mensaje #19.

En todas las pruebas que realizé, modificando constantes de texto, el ejecutable resultante funcionó de modo correcto mostrando los valores modificados.

Descarga desde FTP Club Delphi: EditorHexadecimalBásico

Saludos
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 09-05-2014 a las 17:27:10.
Responder Con Cita
  #34  
Antiguo 09-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 ecfisa
...Lamento no haberlo escrito para FireMonkey pero solo cuento con Delphi 7...


Cita:
Empezado por elmago00
...¿Ahora si conteste a sus preguntas?...


Te comento: No puedes salvar la representación Hexadecimal del archivo cargado en el TStringGrid y que este tenga los atributos y comportamiento del original, debes salvar el archivo y sus modificaciones en Binario.

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

interface

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

type

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    ComboBox1: TComboBox;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button1: TButton;
    Button2: TButton;
    StatusBar1: TStatusBar;
    Label1: TLabel;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    SaveDialog2: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure DumpFile(aFileName:TFileName; SG: TStringGrid; const BPF: Word);
    procedure SaveDumpText(aFileName:TFileName; SG: TStringGrid);
    procedure SaveDumpBinary(aFileName:TFileName; const BPF: Word);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CancelProcess : Boolean;

implementation

{$R *.fmx}

procedure TForm1.DumpFile(aFileName:TFileName; SG: TStringGrid; const BPF: Word);
var
  c, i, r, b : Integer;
  Ascii: String;
  Aux: Byte;
  Col : Integer;

begin

  with TMemoryStream.Create do
  try

    LoadFromFile(aFileName);

    Caption:= Format('FileName = %s , FileSize = %d Bytes', [aFileName, Size]);

    // Configurar StringGrid

    SG.ShowHeader := False;
    SG.ShowHorzLines := False;
    SG.ShowVertLines := False;

    for i := 1 to BPF + 2 do
       SG.AddObject(TStringColumn.Create(nil));

    SG.RowCount := (Size div BPF) + 1;
    if (Size Mod BPF) <> 0 then
       SG.RowCount := SG.RowCount + 1;

    for Col := 0 to SG.ColumnCount - 1 do
    begin

        if (Col = 0) then
           SG.Columns[Col].Width := 80;

        if (Col <> SG.ColumnCount - 1) and (Col <> 0) then
           SG.Columns[Col].Width := 30;

        if (Col = SG.ColumnCount - 1) then
           SG.Columns[Col].Width := SG.Canvas.TextWidth('X') * BPF;

    end;

    SG.Cells[0,0]:= 'Offset(h)';
    SG.Cells[SG.ColumnCount-1,0]:= 'ASCII';

    for i:= 0 to BPF-1 do
    begin
      SG.Cells[i+1,0]:= IntToHex(i,2);
    end;

    // Cargar en StringGrid

    Seek(0, soBeginning);
    c:= 0;
    r:= 1;
    b := 0;

    while c < Size do
    begin

      Application.ProcessMessages;

      if CancelProcess then
      begin
         CancelProcess := False;
         Break;
      end;

      SG.Cells[0, r]:= Format('%s',[IntToHex(c, 8)]);
      Ascii:= EmptyStr;
      i:= 0;

      while (i < BPF) and (b < Size) do
      begin
        Read(Aux, SizeOf(Byte));
        SG.Cells[i+1,r]:= IntToHex(Aux,2);
        if Aux = 0 then Aux := 46;
        Ascii:= Ascii + Chr(Aux);
        Inc(i);
        if (b < Size) then Inc(b);
      end;

      SG.Cells[SG.ColumnCount-1,r]:= Format('%s',[Ascii]);
      Inc(c, BPF);
      Inc(r);
      Label1.Text := Format('Procesado Byte %d de %d',[b, Size]);

    end;

  finally

    Free;

  end;

end;

// Salvar StringGrig a TXT
procedure TForm1.SaveDumpText(aFileName:TFileName; SG: TStringGrid);
var
  c,r: Integer;
  s: String;
begin
  with TStringList.Create do
  try
    for r:= 0 to SG.RowCount-1 do
    begin
      s:= '';
      for c:= 0 to SG.ColumnCount-1 do s:= s + SG.Cells[c,r] + ' ';
      SetLength(s,Length(s)-1);
      Add(s);
    end;
    SaveToFile(aFileName);
  finally
    Free;
  end;
end;

// Salvar StringGrig a Binario
procedure TForm1.SaveDumpBinary(aFileName:TFileName; const BPF: Word);
var
  MS: TMemoryStream;
  c,r: Integer;
  buff: array of Byte;
begin
  with StringGrid1 do
  begin
    MS:= TMemoryStream.Create;
    try
      SetLength(buff, BPF);
      for r:= 1 to RowCount-1 do
      begin
        for c:= 0 to BPF-1 do buff[c]:= StrToInt('$'+Cells[c+1, r]);
        MS.WriteBuffer(buff[0], BPF);
      end;
      MS.SaveToFile(aFileName);
    finally
      SetLength(buff,0);
      MS.Free;
    end;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ComboBox1.Items.CommaText:= '8,10,16,24,32,48,64,128,255';
  ComboBox1.ItemIndex:= 2;
end;

// Carga un Archivo en Modo Hexadecimal en un StringGrid
procedure TForm1.Button1Click(Sender: TObject);
begin
  with OpenDialog1 do
  begin
    Filter:= '*.*';
    if Execute then
    begin
      DumpFile(FileName, StringGrid1,
        StrToInt(ComboBox1.Items[ComboBox1.ItemIndex]) );
    end;
  end;
end;

// Salva un Archivo en Modo Hexadecimal en un StringGrid a TXT
procedure TForm1.Button2Click(Sender: TObject);
begin
  with SaveDialog1 do
  begin
    Filter:= '*.txt';
    DefaultExt:= '*.txt';
    if Execute then
      SaveDumpText(FileName, StringGrid1);
  end;
end;

// Cancela Carga de un Archivo en Modo Hexadecimal en un StringGrid
procedure TForm1.Button3Click(Sender: TObject);
begin
   CancelProcess := True;
end;

// Inicializa el StringGrid
procedure TForm1.Button4Click(Sender: TObject);
var
   i : Integer;
begin
   StringGrid1.RowCount := 0;
   for i := StringGrid1.ColumnCount - 1 downto 0 do
         StringGrid1.Columns[i].DisposeOf;
end;

// Salva un Archivo en Modo Hexadecimal en un StringGrid a Binario
procedure TForm1.Button5Click(Sender: TObject);
begin
  with SaveDialog1 do
  begin
    Filter:= '*.*';
    if Execute then SaveDumpBinary(FileName, 16);
  end;
end;

end.
El código anterior en Delphi XE4 bajo Windows 7 Professional x32, es la versión 3 del código propuesto en el Msg #15 con las correcciones incluidas del Msg #18, el cual te permitirá: Cargar, Representar y Editar archivos visualmente en Hexadecimal y salvarlos posteriormente en su representación Hexadecimal (Modo Texto) o Binaria, como se muestra en la siguiente imagen:



El código esta disponible en : Visualizador de Archivos en Hexadecimal en FireMonkey v3

Suerte en tu proyecto

Nelson.

Última edición por nlsgarcia fecha: 09-05-2014 a las 17:57:04.
Responder Con Cita
  #35  
Antiguo 09-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,

Continuación del Msg #34

Una pequeña corrección :
Código Delphi [-]
// Salvar StringGrig a Binario
procedure TForm1.SaveDumpBinary(aFileName:TFileName; const BPF: Word);
var
  MS: TMemoryStream;
  c,r: Integer;
  Buffer: Byte;
  Msg : String;
begin
  with StringGrid1 do
  begin
    MS:= TMemoryStream.Create;
    try
      for r:= 1 to RowCount-1 do
      begin
        for c:= 0 to BPF-1 do
        begin
           if (Cells[c+1, r] <> '') then
           begin
              Buffer := StrToInt('$'+Cells[c+1, r]);
              MS.WriteBuffer(Buffer, 1);
           end;
        end;
      end;
      MS.SaveToFile(aFileName);
    finally
      MS.Free;
      Msg := 'Generación de Archivo Binario Completada Satisfactoriamente';
      MessageDlg(Msg,TMsgDlgType.mtInformation,[TMsgDlgBtn.mbOk],0);
    end;
  end;
end;
Código Delphi [-]
// Salva un Archivo en Modo Hexadecimal en un StringGrid a Binario
procedure TForm1.Button5Click(Sender: TObject);
var
   BPF : Integer;
begin
  with SaveDialog1 do
  begin
    Filter:= '*.*';
    BPF := StrToInt(ComboBox1.Items.Strings[ComboBox1.ItemIndex]);
    if Execute then SaveDumpBinary(FileName, BPF);
  end;
end;
El código anterior en Delphi XE4 bajo Windows 7 Professional x32, corrige el código del Msg #34 en los casos en que los archivos a visualizar no sean múltiplos del factor de visualización (BPF), como se muestra en la siguiente imagen:



Suerte en tu proyecto

Nelson.
Responder Con Cita
  #36  
Antiguo 10-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
llevo horas tratando, pero creo que mejor haré los cambios, y lo guardare en SaveToStream.
para que guarde los cambios en el archivo original. después de editarlo en memoria.
seguiré tratando y luego les cuento como fue.
Responder Con Cita
  #37  
Antiguo 10-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
...llevo horas tratando, pero creo que mejor haré los cambios, y lo guardare en SaveToStream para que guarde los cambios en el archivo original después de editarlo en memoria...
Pregunto: ¿Probastes el código del Msg #34 y la corrección del Msg#35?.

Nelson.
Responder Con Cita
  #38  
Antiguo 10-05-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 elmago00.

¿ Es imprescindible que uses FireMonkey ? Por que el código del mensaje #33 esta probado, hace lo que buscas y funciona correctamente. También pude apreciar que no son tan radicales las modificaciones echas al código que parten de este enlce Codigo Hexadecimal para adecuarlas a FireMonkey.

Por otro lado, si deseas usa un editor hexadecimal mas poderoso, te vuelvo a sugerir lo que te mencioné en el otro hilo: HxD es totalmente gratuito.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #39  
Antiguo 11-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Cita:
Empezado por nlsgarcia Ver Mensaje
elmago00,


Pregunto: ¿Probastes el código del Msg #34 y la corrección del Msg#35?.

Nelson.

Porsupuesto Nelson y dejame decirte que funciona perfecto. pero bajo un control TSringGrid.
y estoy usando el código de efisa del msg#17 este código me permite almacenarlo en variable y editarlo desde un archivo y sin usar el Control visible.
lo que hago en estos momentos es pasar tu código para que al igual al de ecfisa editarlo en un archivo guardado. y luego pasarlo a binario, tal y como lo tienes tu que funciona, pero que no eso ese método por que se demora, 15 minutos en cargar un archivo de 9mb.
Código Delphi [-]
// Salvar StringGrig a Binario
procedure TForm1.SaveDumpBinary(aFileName:TFileName; const BPF: Word);
var
  MS: TMemoryStream;
  c,r: Integer;
  Buffer: Byte;
  Msg : String;
begin
  with StringGrid1 do
  begin
    MS:= TMemoryStream.Create;
    try
      for r:= 1 to RowCount-1 do
      begin
        for c:= 0 to BPF-1 do
        begin
           if (Cells[c+1, r] <> '') then
           begin
              Buffer := StrToInt('$'+Cells[c+1, r]);
              MS.WriteBuffer(Buffer, 1);
           end;
        end;
      end;
      MS.SaveToFile(aFileName);
    finally
      MS.Free;
      Msg := 'Generación de Archivo Binario Completada Satisfactoriamente';
      MessageDlg(Msg,TMsgDlgType.mtInformation,[TMsgDlgBtn.mbOk],0);
    end;
  end;
end;

este es tu código que trato de usar sin el control.

dirás por que este se complica tanto. por la idea es modificar el archivo sin visualizarlo. así la corrección en el IC se hace mas rápido, y el procesador (que no es muy poderoso) lo ejecuta rápido.
Responder Con Cita
  #40  
Antiguo 11-05-2014
elmago00 elmago00 is offline
Miembro
NULL
 
Registrado: ago 2013
Posts: 86
Poder: 11
elmago00 Va por buen camino
Smile

Cita:
Empezado por ecfisa Ver Mensaje
Hola elmago00.

¿ Es imprescindible que uses FireMonkey ? Por que el código del mensaje #33 esta probado, hace lo que buscas y funciona correctamente. También pude apreciar que no son tan radicales las modificaciones echas al código que parten de este enlce Codigo Hexadecimal para adecuarlas a FireMonkey.

Por otro lado, si deseas usa un editor hexadecimal mas poderoso, te vuelvo a sugerir lo que te mencioné en el otro hilo: HxD es totalmente gratuito.

Saludos
todo el software tiene 15 unit, 6 dll. y 83 procesos y 57 funciones.
los procesos son muy grandes, el mínimo tiene 1200 lineas.

una unit tiene 11.453 lineas. las otras son de 2000. todo esto es bajo firemonkey, pasarlo a vcl es imposible en tan poco tiempo.
y la idea es que todo este en el mismo programa, pues el gerente informático de la otra empresa así lo solicito.(no se por que)


aun con VCL, tu me has ayudado enormemente y que decir de Nelson, tiene un cerebro para firemonkey, que me pregunto ¿son humanos?
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
ayuda con este codigo kurono Varios 5 02-04-2014 00:25:11
Se estrena este foro sobre FireMonkey Neftali [Germán.Estévez] FireMonkey 9 09-11-2012 13:05:30
ayuda con este codigo kurono Varios 4 13-06-2008 01:03:29
necesito ayuda con este codigo kurono Varios 4 06-05-2008 07:02:07
procedimiento almacenado ayuda con este codigo pipecato Varios 5 16-12-2005 12:24:34


La franja horaria es GMT +2. Ahora son las 23:26:11.


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