TMemo 의 Font 를 고정폭 글꼴로 해놓으면 제법 간지가 비슷하게 남.
하지만 스트링그리드 등을 이용하는게 옳겠지.
바이너리로 읽어서 Memo 에 뿌려주는 함수
procedure ShowBinary(var Data; Count: Cardinal);
const
POS_START=1;
BIN_START=7;
ASC_START=57;
HEX_CHARS: PChar='0123456789ABCDEF';
var
Line: String[80];
i: Cardinal;
p: PChar;
nStr: String[4];
begin
Form1.Memo1.Lines.Clear;
Form1.ProgressBar1.Position:=0;
p:=@Data; // 메모리를 포인터에 연결
Line:='';
// 매개변수로 넘어온 길이만큼 읽어들이기 시작
for i:=0 to Count-1 do begin
Form1.ProgressBar1.Position:=Round((i / Count)*100);
// 16진수니까 16으로 나눈 나머지가 0 이면 새로운 라인 시작
if (i mod 16)=0 then begin
if Length(Line)>0 then begin
Form1.Memo1.Lines.Add(Line);
Application.ProcessMessages;
end;
// Line 초기화
FillChar(Line, SizeOf(Line), ' ');
Line[0]:=Chr(72);
nStr:=Format('%4.4X', [i]); // 오프셋
Move(nStr[1], Line[POS_START], Length(nStr));
Line[POS_START+4]:=':';
end;
if p[i]>=' ' then Line[i mod 16 + ASC_START]:=p[i] // 아스키
else Line[i mod 16 + ASC_START]:='.';
Line[BIN_START+3*(i mod 16)]:=HEX_CHARS[(Ord(p[i]) shr 4) and $F]; // 16진수
Line[BIN_START+3*(i mod 16)+1]:=HEX_CHARS[Ord(p[i]) and $F];
end; // for
Form1.Memo1.Lines.Add(Line);
end;
이런식으로 사용하면 됨.
procedure TForm1.Button1Click(Sender: TObject);
var
mStream: TMemoryStream;
dlgOpen: TOpenDialog;
begin
dlgOpen:=TOpenDialog.Create(Self);
mStream:=TMemoryStream.Create;
try
if dlgOpen.Execute then begin
mStream.LoadFromFile(dlgOpen.FileName);
ShowBinary(mStream.Memory^, mStream.Size);
end;
finally
FreeAndNil(mStream);
FreeAndNil(dlgOpen);
end;
end;
'Delphi' 카테고리의 다른 글
[Delphi] MS Excel 문서 읽기 (0) | 2009.04.18 |
---|---|
[Delphi] MAC Address 확인 (2) | 2009.04.18 |
[Delphi] 텍스트 파일읽기 비교 (0) | 2009.04.18 |
[Delphi] 유니코드로 인코딩 된 텍스트 파일 읽기 (0) | 2009.04.18 |
[Delphi] 다른 프로그램에서 wav 파일 재생시 가로채기 (0) | 2009.04.18 |