
22.05.2010, 17:40
|
Прохожий
|
|
Регистрация: 22.05.2010
Сообщения: 2
Репутация: 10
|
|
Код:
procedure TForm1.Button2Click(Sender: TObject);
Var
ThId : DWORD;
begin
BeginThread(Nil,0,@OpenFile,nil,0,ThId);
end;
procedure OpenFile;
Var
hFile :Cardinal;
dwReaded : DWORD;
Buff : array [1..16] of Byte;
c : Char;
i,j,n,rez : Integer;
CharStr,Tmp : String;
begin
hFile:= CreateFile(PChar(Form1.ListView1.Selected.SubItems.Strings[3]),
GENERIC_READ,
FILE_SHARE_READ,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
n:=16;
j:=0;
Form1.StringGrid1.RowCount:=1;
Form1.StringGrid1.ColCount:=round(n/2)+2;
Form1.StringGrid1.ColWidths[0]:=70;
For i:=1 to Form1.StringGrid1.ColCount-2 do
Form1.StringGrid1.ColWidths[i]:=40;
Form1.StringGrid1.ColWidths[Form1.StringGrid1.ColCount-1]:=150;
Repeat
Form1.StringGrid1.Rows[j].Clear;
For i:=1 to n do Buff[i]:=0;
ReadFile(hFile,Buff,n,dwReaded,nil);
tmp:='';
CharStr:='';
if dwReaded=n then
for i:=1 to n do
Begin
If Buff[i]<=127 then
If ((Buff[i]>=0) and (Buff[i]<=31) or(Buff[i]=127)) then c:='.'
Else c:=Char(Buff[i])
Else c:=Char(Buff[i]);
CharStr:=CharStr+c;
Tmp:=Tmp+IntToHex(Buff[i],2);
if i mod 2 =0 then
Begin
rez:=Round(i/2);
Form1.StringGrid1.Cells[rez,j]:=Tmp;
Tmp:='';
End;
End
Else
for i:=1 to dwReaded do
Begin
If Buff[i]<=127 then
If ((Buff[i]>=0) and (Buff[i]<=31)or(Buff[i]=127)) then c:='.'
Else c:= Char(Buff[i])
Else c:= Char(Buff[i]);
If (i > dwReaded) then Tmp:= Tmp + ' '
else Tmp:= Tmp + IntToHex(Buff[i],2);
CharStr:= CharStr + c;
if i mod 2 =0 then
Begin
rez:= Round(i/2);
Form1.StringGrid1.Cells[rez,j]:= Tmp;
Tmp:='';
End;
End;
If Form1.RadioGroup1.ItemIndex = 1 then
Form1.StringGrid1.Cells[0,j]:=IntToHex(j*n,8)
Else
Begin
tmp:=IntToHex(j*n,8);
Form1.StringGrid1.Cells[0,j]:=IntToStr(StrToInt( '$' +tmp));
End;
Form1.StringGrid1.Cells[Form1.StringGrid1.ColCount-1,j]:=CharStr;
Inc(j);
If dwReaded=n then
Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount+1;
Until (dwReaded<n);
CloseHandle(hFile);
end;
Admin: Пользуемся тегами!
|