📄 memeditunit.pas
字号:
SearchRow:=ARow;
SearchCol:=ACol;
offsetindex:=(Nowrow-1)*16+(NOWCol-1);
if (NowCol>=1) and (NOwCol<=16) then
begin
MemWriteStartAddress:=MemReadStartAddress+offsetIndex;
end
else
begin
MemWriteStartAddress:=MemReadStartAddress+offsetIndex-16;
end;
Address_Edit.Text:=intToHex(MemWriteStartAddress,8);
if (NowCol>=1) and (NOwCol<=16) then
begin
try
if GPKernel.ReadMemory(CurrentProcessID,MemWriteStartAddress,@TempByte,Byte_value)then
byteshow_Edit.Text:=intToStr(TempByte) else byteshow_Edit.Text:='--';
if GPKernel.ReadMemory(CurrentProcessID,MemWriteStartAddress,@TempWord,Word_value) then
wordshow_Edit.Text:=intToStr(TempWord) else wordshow_Edit.Text:='--';
if GPKernel.ReadMemory(CurrentProcessID,MemWriteStartAddress,@TempDword,Dword_value) then
Dwordshow_Edit.Text:=intToStr(TempDword) else Dwordshow_Edit.Text:='--';
if GPKernel.ReadMemory(CurrentProcessID,MemWriteStartAddress,@Tempint64,Int64_value) then
Int64show_Edit.Text:=intToStr(Tempint64) else Int64show_Edit.Text:='--';
if GPKernel.ReadMemory(CurrentProcessID,MemWriteStartAddress,@TempSingle,Single_value)then
singleshow_Edit.Text:=FloatToStr(TempSingle) else singleshow_Edit.Text:='--';
if GPKernel.ReadMemory(CurrentProcessID,MemWriteStartAddress,@TempDouble,Double_value) then
doubleshow_Edit.Text:=FloatToStr(TempDouble) else doubleshow_Edit.Text:='--';
except
end;
end; ///end show if
end;
procedure TMemEditForm.byteEdit_sbClick(Sender: TObject);
var Ecode:integer;
TempByte:Byte;
begin
val(byteshow_Edit.Text,TempByte,Ecode);
if Ecode=0 then
if not WriteMemory(CurrentProcessID,MemWriteStartAddress,@TempByte,byte_value,1) then
showmessage(String_CannotWrite);
end;
procedure TMemEditForm.WordEdit_sbClick(Sender: TObject);
var Ecode:integer;
TempWord:Word;
begin
val(Wordshow_Edit.Text,TempWord,Ecode);
if Ecode=0 then
if not WriteMemory(CurrentProcessID,MemWriteStartAddress,@TempWord,Word_value,2)then
showmessage(String_CannotWrite);
end;
procedure TMemEditForm.DwordEdit_sbClick(Sender: TObject);
var Ecode:integer;
TempDword:Dword;
begin
val(Dwordshow_Edit.Text,TempDword,Ecode);
if Ecode=0 then
if not WriteMemory(CurrentProcessID,MemWriteStartAddress,@TempDword,Dword_value,4)then
showmessage(String_CannotWrite);
end;
procedure TMemEditForm.int64Edit_sbClick(Sender: TObject);
var Ecode:integer;
TempInt64:Int64;
begin
val(int64show_Edit.Text,TempInt64,Ecode);
if Ecode=0 then
if not WriteMemory(CurrentProcessID,MemWriteStartAddress,@TempInt64,int64_value,8)then
showmessage(String_CannotWrite);
end;
procedure TMemEditForm.singleEdit_sbClick(Sender: TObject);
var Ecode:integer;
TempSingle:single;
begin
val(singleshow_Edit.Text,TempSingle,Ecode);
if Ecode=0 then
if not WriteMemory(CurrentProcessID,MemWriteStartAddress,@TempSingle,Single_Value,4)then
showmessage(String_CannotWrite);
end;
procedure TMemEditForm.doubleEdit_sbClick(Sender: TObject);
var Ecode:integer;
TempDouble:Double;
begin
val(doubleshow_Edit.Text,TempDouble,Ecode);
if Ecode=0 then
if not WriteMemory(CurrentProcessID,MemWriteStartAddress,@TempDouble,Double_Value,8)then
showmessage(String_CannotWrite);
end;
procedure TMemEditForm.help_sbClick(Sender: TObject);
begin
ShowMessage(String_MemEditHelp);
end;
procedure TMemEditForm.Search_SBClick(Sender: TObject);
var TempByte:byte;
Ecode:integer;
I:integer;
begin
i:=1;
Val(Search_Edit.Text,TempByte,Ecode);
if Ecode=0 then
begin
While i<=256 do
begin
if SearchCol=17 then
begin
SearchCol:=1;
inc(SearchRow);
if SearchRow>=17 then SearchRow:=1;
end else inc(SearchCol);
if Mem_Sg.Cells[SearchCol,SearchRow]=intToHex(TempByte,2) then
begin
Myrect.Left:=SearchCol;
Myrect.Top:=SearchRow;
myrect.Right:=Myrect.Left;
Myrect.Bottom:=Myrect.Top;
Mem_SG.Selection:=myRect;
Exit;
end;
INC(i);
end; ///whitle end;
end ;
end;
procedure TMemEditForm.call_calc_sbClick(Sender: TObject);
begin
MyCalcForm.show;
end;
procedure TMemEditForm.Search_EditKeyPress(Sender: TObject; var Key: Char);
begin
if key=chr(VK_RETURN) then Search_sb.Click;
end;
procedure TMemEditForm.byteshow_EditKeyPress(Sender: TObject;
var Key: Char);
begin
if key=chr(VK_RETURN) then byteEdit_sb.Click;
end;
procedure TMemEditForm.Dwordshow_editKeyPress(Sender: TObject;
var Key: Char);
begin
if key=chr(VK_RETURN) then DwordEdit_sb.Click;
end;
procedure TMemEditForm.Wordshow_EditKeyPress(Sender: TObject;
var Key: Char);
begin
if key=chr(VK_RETURN) then WordEdit_sb.Click;
end;
procedure TMemEditForm.int64show_editKeyPress(Sender: TObject;
var Key: Char);
begin
if key=chr(VK_RETURN) then int64Edit_sb.Click;
end;
procedure TMemEditForm.singleshow_editKeyPress(Sender: TObject;
var Key: Char);
begin
if key=chr(VK_RETURN) then SingleEdit_sb.Click;
end;
procedure TMemEditForm.doubleshow_editKeyPress(Sender: TObject;
var Key: Char);
begin
if key=chr(VK_RETURN) then DoubleEdit_sb.Click;
end;
procedure TMemEditForm.mem_SGDblClick(Sender: TObject);
begin
MemRecordForm.Show;
end;
procedure TMemEditForm.mem_SGMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var offsetIndex:integer;
TempByte:Byte;
TempString:String[16];
begin
offsetindex:=(Nowrow-1)*16+(NOWCol-1);
if (NowCol>=1) and (NOwCol<=16) then
begin
Lock_Address:=MemReadStartAddress+offsetindex;
Address_Edit.Text:=intToHex(Lock_Address,8);
Lock_ValueType:=Word_value;
GPKernel.ReadMemory(CurrentProcessID,Lock_Address,@TempByte,Lock_ValueType);
Lock_value:=intToStr(TempByte);
end
else
begin
Lock_Address:=MemReadStartAddress+offsetindex-16;
Address_Edit.Text:=intToHex(Lock_Address,8);
Lock_ValueType:=String_value;
GPKernel.ReadMemory(CurrentProcessID,Lock_Address-1,@TempString,Lock_ValueType);
Lock_value:=TempString;
end;
Lock_Name:='Money';
Lock_Type:=0;
Lock_Info:=0;
MemRecordForm.FormRefresh;
end;
procedure TMemEditForm.MemRefresh;
var i,j:integer;
tempNUm:Integer;
begin
Mem_SGScrollBar.Position:=MemReadStartAddress shr 4;
for j:=1 to 16 do
Mem_SG.Cells[0,j]:=intToHex(MemReadStartAddress+16*(j-1),8);
if GPKernel.ReadMemory_Array(CurrentProcessID,MemReadStartAddress) then
begin
MemEditForm.Caption:=String_MemEditTitle +'<'+thetask[CurrenttaskIndex].Name+'>';
for j:=1 to 16 do
for i:=1 to 16 do
begin
tempNUm:=MemReaddata[(i-1)+(j-1)*16+1];
if tempNUm=-999 then
begin
Mem_SG.Cells[i,j]:='??';
Mem_SG.Cells[i+16,j]:='.';
end
else
begin
Mem_SG.Cells[i,j]:=intToHex(tempNUm ,2);
if ((tempNUm>=$20) and (tempNUm<=$7E)) then Mem_SG.Cells[i+16,j]:=chr(TempNum)
else Mem_SG.Cells[i+16,j]:='.';
end;
end;
end else
begin
MemEditForm.Caption:=String_MemEditTitle+'<'+String_Taskinvalid+'>';
for j:=1 to 16 do
for i:=1 to 16 do
begin
Mem_SG.Cells[i,j]:='--';
mem_Sg.Cells[i+16,j]:='.';
end;
end;
end;
procedure TMemEditForm.MemRefresh_TimerTimer(Sender: TObject);
begin
MemRefresh;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -