📄 addaddress.pas
字号:
// mainform.memrec[MainForm.NumberOfRecords-1].VarType:=Vartype.itemindex;
//
mainform.memrec[MainForm.NumberOfRecords-1].VarType:=vartype2;
mainform.memrec[MainForm.NumberOfRecords-1].Bit:=bit;
mainform.memrec[MainForm.NumberOfRecords-1].bitlength:=nrofbits;
mainform.memrec[MainForm.NumberOfRecords-1].unicode:=cbunicode.Checked;
{add pointer stuff}
mainform.memrec[MainForm.NumberOfRecords-1].IsPointer:=cbpointer.Checked;
setlength(mainform.memrec[mainform.NumberOfRecords-1].pointers,length(pointerinfo));
for i:=0 to length(pointerinfo)-1 do
begin
if i=length(pointerinfo)-1 then
begin
mainform.memrec[mainform.NumberOfRecords-1].pointers[i].Interpretableaddress:=pointerinfo[length(pointerinfo)-1].address.text;
mainform.memrec[mainform.NumberOfRecords-1].pointers[i].Address:=pt;
end;
mainform.memrec[mainform.NumberOfRecords-1].pointers[i].offset:=offsets[i];
end;
mainform.memrec[MainForm.NumberOfRecords-1].Frozen:=false;
mainform.memrec[MainForm.NumberOfRecords-1].FrozenValue:=0;
MainForm.FrozenFvalue[MainForm.NumberOfRecords-1]:=0;
mainform.FrozenStrings[MainForm.NumberOfRecords-1]:='';
mainform.Hotkeystrings[Mainform.NumberOfRecords-1]:='';
mainform.Hotkeys[MainForm.NumberOfRecords-1]:=-1;
MainForm.UpdateScreen;
MainForm.updatelist;
addform.close;
end else showmessage('This address is already in the list');
end;
procedure TAddForm.VarTypeChange(Sender: TObject);
begin
bitpanel.Visible:=Vartype.itemindex=0;
if vartype.ItemIndex=7 then
begin
valuepanel.visible:=true;
valuepanel.BringToFront;
label12.Caption:='Nr. of Characters';
end
else if vartype.itemindex=8 then
begin
valuepanel.visible:=true;
label12.Caption:='Nr. of Bytes';
end
else valuepanel.visible:=false;
end;
procedure TAddForm.FormShow(Sender: TObject);
begin
addform.cbPointer.checked:=false;
NewAddress.SetFocus;
NewAddress.SelectAll;
description.Text:='No description';
end;
procedure TAddForm.NewAddressKeyPress(Sender: TObject; var Key: Char);
begin
if cbpointer.checked then timer1.Interval:=1;
end;
procedure TAddForm.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
decimal(key);
end;
procedure TAddForm.cbPointerClick(Sender: TObject);
var i: integer;
begin
if cbpointer.checked then
begin
newaddress.Enabled:=false;
button3.visible:=true;
button4.visible:=true;
//create a address+offset combination and disable the normal address
setlength(pointerinfo,1);
pointerinfo[length(pointerinfo)-1].addresstext:=Tlabel.Create(self);
with pointerinfo[length(pointerinfo)-1].addresstext do
begin
top:=142;
left:=4;
caption:='Address of pointer';
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].address:=TEdit.create(self);
with pointerinfo[length(pointerinfo)-1].address do
begin
top:=140;
left:=92;
width:=105;
onkeypress:=newaddress.onkeypress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offsettext:=Tlabel.create(self);
with pointerinfo[length(pointerinfo)-1].offsettext do
begin
top:=142;
left:=212;
caption:='Offset (Hex)';
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offset:=TEdit.create(self);
with pointerinfo[length(pointerinfo)-1].offset do
begin
top:=140;
left:=275;
width:=70;
text:='0';
hint:='Fill in the nr. of bytes after the location the pointer points to';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].ValueAtAddressText:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].ValueAtAddressText do
begin
top:=126;
left:=4;
// width:=57;
caption:='This pointer points to address ????????.';// The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].FinalDestination:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].FinalDestination do
begin
top:=126;
left:=212;
// width:=57;
caption:='The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
height:=height+66;
end
else
begin
height:=170;
newaddress.enabled:=true;
button3.visible:=false;
button4.visible:=false;
for i:=0 to length(PointerInfo)-1 do
begin
pointerinfo[i].addresstext.free;
pointerinfo[i].address.Free;
pointerinfo[i].offsettext.Free;
pointerinfo[i].offset.Free;
pointerinfo[i].ValueAtAddressText.Free;
pointerinfo[i].FinalDestination.Free;
end;
setlength(pointerinfo,0);
end;
end;
procedure TAddForm.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if key<>'-' then hexadecimal(key);
end;
procedure TAddForm.Button4Click(Sender: TObject);
begin
if length(pointerinfo)=1 then cbPointer.checked:=false
else
begin
pointerinfo[length(pointerinfo)-1].addresstext.free;
pointerinfo[length(pointerinfo)-1].address.free;
pointerinfo[length(pointerinfo)-1].offsettext.free;
pointerinfo[length(pointerinfo)-1].offset.free;
pointerinfo[length(pointerinfo)-1].valueataddresstext.free;
pointerinfo[length(pointerinfo)-1].FinalDestination.free;
pointerinfo[length(pointerinfo)-2].address.enabled:=true;
pointerinfo[length(pointerinfo)-2].address.text:='';
setlength(pointerinfo,length(pointerinfo)-1);
height:=height-25;
end;
end;
procedure TAddForm.Button3Click(Sender: TObject);
begin
pointerinfo[length(pointerinfo)-1].address.text:='result of next pointer';
pointerinfo[length(pointerinfo)-1].address.enabled:=false;
setlength(pointerinfo,length(pointerinfo)+1);
pointerinfo[length(pointerinfo)-1].addresstext:=Tlabel.Create(self);
with pointerinfo[length(pointerinfo)-1].addresstext do
begin
top:=pointerinfo[length(pointerinfo)-2].addresstext.top+36;
left:=4;
caption:='Address of pointer';
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].address:=TEdit.create(self);
with pointerinfo[length(pointerinfo)-1].address do
begin
top:=pointerinfo[length(pointerinfo)-2].address.top+36;
left:=92;
width:=105;
onkeypress:=newaddress.onkeypress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offsettext:=Tlabel.create(self);
with pointerinfo[length(pointerinfo)-1].offsettext do
begin
top:=pointerinfo[length(pointerinfo)-2].offsettext.top+36;
left:=212;
caption:='Offset (Hex)';
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].offset:=TEdit.create(self);
with pointerinfo[length(pointerinfo)-1].offset do
begin
top:=pointerinfo[length(pointerinfo)-2].offset.top+36;
left:=275;
width:=70;
text:='0';
hint:='Fill in the nr. of bytes after the location the pointer points to';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].ValueAtAddressText:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].ValueAtAddressText do
begin
top:=pointerinfo[length(pointerinfo)-2].ValueAtAddressText.top+36;
left:=4;
caption:='This pointer points to address ????????.';// The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
pointerinfo[length(pointerinfo)-1].FinalDestination:=TLabel.Create(self);
with pointerinfo[length(pointerinfo)-1].FinalDestination do
begin
top:=pointerinfo[length(pointerinfo)-2].FinalDestination.top+36;
left:=212;
caption:='The offset you chose brings it to ????????';
showhint:=true;
onkeypress:=offsetKeyPress;
parent:=self;
end;
height:=height+36;
end;
procedure TAddForm.Timer1Timer(Sender: TObject);
begin
timer1.Interval:=1000;
if visible and cbpointer.checked then
processaddress;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -