?? archiveeditunit.pas
字號:
pchar(Format(String_FileTaskResult,[name,AttachedNum,(Time2-Time1)/1000])),
pchar(String_FileTaskResultTitle),
MB_OK);
end;
////////////////////////////第二三..次低階掃描/////////////////////////////////////////
///if (scantype<>number_scan) and (scantype<>String_Scan)and (scantype<>InitialLowLevel_Scan) then
if VarType=LowLevel_value then
begin
Time1:=GetTickCount;
if ArchiveEditForm.checkAndgetfileSize(Filepathname)=0 then exit;
if ArchiveEditForm.checkAndgetfileSize(SaveFilename)=0 then exit;
if (SearchTimes=2) then
begin
TempLength:=ArchiveEditForm.checkAndgetfileSize(Filepathname);
TempSize:=TempLength;
end else
begin
TempLength:=AddressMemStream.Size;
TempSize:=TempLength shr 2; ////Dword Address Dword Size
end;
AttachedNum:=0;
tempFileMemStreamNew:=TmemoryStream.Create;
tempFileMemStreamNew.LoadFromFile(SaveFilename);
if SearchTimes=2 then
begin
AddressMemStream.Clear;
AddressMemStream.Seek(0,soFromBeginning);
time1:=GetTickCount;
For i:=0 to TempSize-1 do
begin
tempFileMemStream.Seek(i,sofrombeginning);
try
tempFileMemStream.ReadBuffer(FileReadByte,1);
except
continue;
end;
tempFileMemStreamNew.Seek(i,sofrombeginning);
try
tempFileMemStreamNew.ReadBuffer(FileReadByteNew,1);
except
continue;
end;
Application.ProcessMessages;
//////_+++++//////////////////////////
if scantype=Increased_Scan then
begin
if FileReadByte>FileReadByteNew then
begin
TempAddress:=i;
AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
//////--------//////////////////////////
if scantype=Decreased_Scan then
begin
if FileReadByte<FileReadByteNEw then
begin
TempAddress:=i;
AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
//////!!!!!!!!!!!!//////////////////////////
if scantype=Changed_Scan then
begin
if FileReadByte<>FileReadByteNew then
begin
TempAddress:=i;
AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
//////============//////////////////////////
if scantype=UnChanged_Scan then
begin
if FileReadByte=FileReadByteNew then
begin
TempAddress:=i;
AddressMemStreamNew.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
end;///for end
///
end else ///searchtimes=2
begin
AddressMemStream.Seek(0,soFromBeginning);
time1:=GetTickCount;
for i:=0 to TempSize-1 do
begin
Application.ProcessMessages;
try
AddressMemStream.ReadBuffer(TempAddress,Sizeof(TempAddress));
except
continue;
end;
tempFileMemStream.Seek(TempAddress,sofrombeginning);
try
tempFileMemStream.ReadBuffer(FileReadByte,1);
except
continue;
end;
tempFileMemStreamNew.Seek(TempAddress,sofrombeginning);
try
tempFileMemStreamNew.ReadBuffer(FileReadByteNew,1);
except
continue;
end;
//////_+++++//////////////////////////
if scantype=Increased_Scan then
begin
if FileReadByte>FileReadByteNew then
begin
TempAddress:=i;
AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
//////--------//////////////////////////
if scantype=Decreased_Scan then
begin
if FileReadByte<FileReadByteNEw then
begin
TempAddress:=i;
AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
//////!!!!!!!!!!!!//////////////////////////
if scantype=Changed_Scan then
begin
if FileReadByte<>FileReadByteNew then
begin
TempAddress:=i;
AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
//////============//////////////////////////
if scantype=UnChanged_Scan then
begin
if FileReadByte=FileReadByteNew then
begin
TempAddress:=i;
AddressMemStreamNEw.WriteBuffer(TempAddress,Sizeof(TempAddress));
inc(AttachedNum);
end;
inc(NowProcess);
Continue;
end;
////////////////////////////////////////////////////////////
end; ///for end
end;///ebnd if else searchtime>2
AddressMemStream.Clear;
AddressMemStream.CopyFrom(AddressMemStreamNew,0);
FreeAndNil(tempFileMemStreamNew);
tempFileMemStream.SaveToFile(SaveFileName); /////覆蓋
NowProcess:=totalProcess;
Time2:=getTickCount;
CanUpdateFileTask:=messageBox(Application.handle,
pchar(Format(String_FileTaskResult,[name,AttachedNum,(Time2-Time1)/1000])),
pchar(String_FileTaskResultTitle),
MB_OK);
end; ////if VarType=LowLevel_value
InSearchProcess:=False;
FreeandNil(TempFileMemStream);
FreeandNil(AddressMemStreamNew);
end;//with scan end;
end; ///
procedure TArchiveEditForm.DisplayFileScanProcessTimer(Sender: TObject);
begin
if FiletaskNum=0 then exit;
with theFiletask[CurrentFileTaskIndex] do
begin
if (Scan_Gauge.MaxValue<>totalProcess) then Scan_Gauge.MaxValue:=TotalProcess;
Scan_Gauge.Progress:=NowProcess;
///只有在掃描過程中更新
UpdateTaskInfo(CurrentFileTaskIndex);
/////////////
if CanUpdateFileTask=IDOK then
begin
AddFoundToListView(CurrentFileTaskIndex);
CanUpdateFileTask:=-999;
end;
end;
end;
procedure TArchiveEditForm.InputHelp_SBClick(Sender: TObject);
begin
if not assigned(InputhelpForm)then InputhelpForm:=TInputhelpForm.Create(self);
InputhelpForm.Showmodal;
InputhelpForm.Free;
InputhelpForm:=nil;
end;
procedure TArchiveEditForm.Value_EditKeyPress(Sender: TObject;
var Key: Char);
begin
if key=#13 then Scan_bn.Click;
end;
procedure TArchiveEditForm.VarType_CBChange(Sender: TObject);
begin
if (FileTaskNUm=0) or (theFileTask[CurrentFileTaskIndex].InSearchProcess) then exit;
theFileTask[CurrentFileTaskIndex].VarType:=VarType_cb.ItemIndex;
end;
procedure TArchiveEditForm.ClearFileTask_menuClick(Sender: TObject);
var i,SelListIndex,theIndex:integer;
begin
if Filetasknum=0 then Exit;
for I:=1 to Filetasks_LV.Items.Count do
begin
SelListIndex:=i;
theIndex:=ListToFileTaskIndex[SelListIndex];
if theFileTask[theIndex].InSearchProcess then
begin
MessageBox(Application.Handle,pchar(String_FileInScan),pchar(String_FileInScanTitle),
MB_OK or MB_ICONINFORMATION);
Exit;
end;
end;
for I:=1 to Filetasks_LV.Items.Count do
begin
SelListIndex:=i;
theIndex:=ListToFileTaskIndex[SelListIndex];
theFileTask[theIndex].Applyed:=False;
theFileTask[theIndex].AddressMemStream.Clear;
DeleteFile(theFileTask[theIndex].SaveFileName);
end;
FiletaskNUm:=0;
FileTasks_lv.Items.Clear;
UpdateTaskInfo(theFileTask[theIndex].Index);
end;
procedure TArchiveEditForm.Found_LVDblClick(Sender: TObject);
begin
if Found_LV.Selected=nil then exit;
FileRecordForm.Show;
end;
Function TArchiveEditForm.ReadFileData(theFileName:String;theAddress:Dword;valuetype:integer):string;
var AddressBuf:Dword;
i:Integer;
TempByte:Byte;
TempWord:Word;
TempDword:Dword;
Tempint64:int64;
TempSingle:Single;
TempDouble:Double;
TempStringBYTE:BYTE;
Tempstring:string;
tempFileStream:TmemoryStream;
begin
result:='Error!';
if checkAndGetFileSize(theFileName)=0 then exit;
tempFileStream:=TmemoryStream.Create;
try
tempFileStream.LoadFromFile(theFileName);
tempFileStream.Seek(theAddress,soFrombeginning);
try
case ValueType of
Byte_value: begin
tempFileStream.ReadBuffer(TempByte,1);
result:=IntTOStr(TempByte);
end;
Word_value: begin
tempFileStream.ReadBuffer(TempWord,2);
result:=IntTOStr(TempWord);
end;
Dword_value:begin
tempFileStream.ReadBuffer(TempDWord,4);
result:=IntTOStr(TempDword);
end;
Int64_value:begin
tempFileStream.ReadBuffer(TempInt64,8);
result:=IntTOStr(Tempint64);
end;
Single_value:begin
tempFileStream.ReadBuffer(TempSingle,4);
result:=FloatTOStr(TempSingle);
end;
Double_value:begin
tempFileStream.ReadBuffer(TempDouble,8);
result:=FloatTOStr(TempDouble);
end;
String_Value:begin
Tempstring:='';
for i:=1 to 16 do
begin
tempFileStream.ReadBuffer(TempStringBYTE,1);
Tempstring:=Tempstring+chr(TempstringBYTE);
end;
Result:=Tempstring;
end;
end;//case end
except
end;
finally
FreeandNIl(tempFileStream);
end;
end;
procedure TArchiveEditForm.Found_LVMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var tempAddress:Dword;
Ecode:integer;
TempByte:Byte;
TempWord:Word;
TempDword:Dword;
Tempint64:int64;
TempSingle:Single;
TempDouble:Double;
TempString:String[16];
begin
if Found_LV.Selected=nil then exit;
Val('$'+Found_lv.Selected.Caption,tempAddress,Ecode);
File_Data_Caption:='Money';
File_name:=theFileTask[CurrentFiletaskIndex].FilepathName;
EditFileName:=File_name;
File_Address:=tempAddress;
if (theFileTask[CurrentFiletaskIndex].ScanType<>Number_Scan) and
(theFileTask[CurrentFiletaskIndex].ScanType<>String_Scan) then
File_ValueType:=Word_Value else
File_ValueType:=theFileTask[CurrentFiletaskIndex].VarType;
case File_ValueType of
Byte_value: begin
File_value:=ReadFileData(File_name,File_Address,Byte_value);
end ;
Word_value: begin
File_value:=ReadFileData(File_name,File_Address,Word_value);
end ;
Dword_value: begin
File_value:=ReadFileData(File_name,File_Address,DWord_value);
end ;
Int64_value: begin
File_value:=ReadFileData(File_name,File_Address,Int64_value);
end ;
Single_value: begin
File_value:=ReadFileData(File_name,File_Address,Single_value);
end ;
Double_value: begin
File_value:=ReadFileData(File_name,File_Address,Double_value);
end ;
String_value: begin
File_value:=ReadFileData(File_name,File_Address,String_value);
end ;
end;
File_Info:=0;
FileRecordForm.FormRefresh;
end;
procedure TArchiveEditForm.EditFile_SbClick(Sender: TObject);
begin
if Filetasknum=0 then Exit;
if FileEditForm.Visible then FileEditForm.Close;
File_name:=theFileTask[CurrentFiletaskIndex].FilepathName;
EditFileName:=File_name;
if checkandGetFileSize(EditFileName)=0 then exit;
NowPos:=0;
FileEditForm.Show;
end;
procedure TArchiveEditForm.EditAddressClick(Sender: TObject);
var TempAddress:DWORD;
ECode:integer;
begin
if Found_LV.Selected=nil then Exit;
if Filetasknum=0 then Exit;
if FileEditForm.Visible then FileEditForm.Close;
File_name:=theFiletask[CurrentFileTaskIndex].FilepathName;
EditFileName:=File_name;
if checkandGetFileSize(EditFileName)=0 then exit;
Val('$'+Found_LV.Selected.Caption,TempAddress,Ecode);
Nowpos:=TempAddress;
FileEditForm.Show;
end;
procedure TArchiveEditForm.DeleteFileEditAddressClick(Sender: TObject);
begin
if Edit_lv.Selected<>nil then
Edit_lv.Selected.Delete;
end;
procedure TArchiveEditForm.ClearAllAddressClick(Sender: TObject);
begin
Edit_lv.Clear;
end;
procedure TArchiveEditForm.ModifyFileEditClick(Sender: TObject);
var TempAddress:DWORD;
ECode:integer;
begin
if Edit_lv.Selected=nil then exit;
FileRecordForm.Show;
end;
procedure TArchiveEditForm.Edit_LVMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var tempAddress:Dword;
Ecode:Integer;
begin
if Edit_lv.Selected=nil then exit;
File_Data_Caption:=Edit_lv.Selected.Caption;
//File_name:string;
///File_Address:Dword;
///File_value:String;
///File_ValueType:integer;
File_Info:=2;
File_name:=Edit_lv.Selected.SubItems[3];
EditFilename:=File_name;
if checkandGetFileSize(File_name)=0 then exit;
Val('$'+Edit_lv.Selected.subitems[0],TempAddress,Ecode);
File_Address:=TempAddress;
File_value:=Edit_lv.Selected.subitems[1];
if Edit_lv.Selected.subitems[2]='Byte_Type' then File_ValueType:=Byte_value else
if Edit_lv.Selected.subitems[2]='Word_Type' then File_ValueType:=Word_value else
if Edit_lv.Selected.subitems[2]='Dword_Type'then File_ValueType:=Dword_value else
if Edit_lv.Selected.subitems[2]='Int64_Type' then File_ValueType:=Int64_value else
if Edit_lv.Selected.subitems[2]='Single_Type' then File_ValueType:=Single_value else
if Edit_lv.Selected.subitems[2]='Double_Type' then File_ValueType:=Double_value else
if Edit_lv.Selected.subitems[2]='String_Type'then File_ValueType:=String_value;
FileRecordForm.FormRefresh;
end;
procedure TArchiveEditForm.EditFileAddressClick(Sender: TObject);
var TempAddress:DWORD;
ECode:integer;
begin
if Edit_LV.Selected=nil then Exit;
if Filetasknum=0 then Exit;
if FileEditForm.Visible then FileEditForm.Close;
File_Name:=Edit_lv.Selected.subitems[3];
EditFileName:=File_Name;
if checkandGetFileSize(File_Name)=0 then exit;
Val('$'+Edit_lv.Selected.subitems[0],TempAddress,Ecode);
Nowpos:=TempAddress;
FileEditForm.Show;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -