Es mucho mas simple que todo lo que estas haciendo con el stringrid, un ejemplo:
Código Delphi
[-]
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TFormFile = class(TForm)
FileGrid: TDrawGrid;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FileGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
FFileStream: TFileStream;
public
end;
var
FormFile: TFormFile;
implementation
{$R *.dfm}
procedure TFormFile.FormCreate(Sender: TObject);
begin
FFileStream:= TFileSTream.Create('c:\windows\explorer.exe',fmOpenRead);
FileGrid.RowCount:= ((FFileStream.Size + FileGrid.ColCount - 1) div FileGrid.ColCount) + 1;
end;
procedure TFormFile.FormDestroy(Sender: TObject);
begin
FFileStream.Free;
end;
procedure TFormFile.FileGridDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Car:Char;
begin
FFileStream.Position:= ARow * FileGrid.ColCount + ACol;
FFileStream.Read( Car,1);
FileGrid.Canvas.TextRect(Rect,Rect.Left,Rect.Top, IntToHex(Ord(Car),2) );
end;
end.
Faltarian algunos detallitos como comprobaciones para evitar que se pinte una fila y coordenada que realmente
no se corresponde con ningun byte en el fichero en la ultima fila de grid, pero bueno deberia ser suficiente para
darte una idea de como se hace y solo falta ampliarlo un poco para que muestre la informacion en ascii, etc.
Saludos