📄 unit1.pas
字号:
end;
procedure TForm1.LabeledEdit2KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ssCtrl in shift then
begin
if key=67 then
labelededit2.CopyToClipboard;
if key=86 then
labelededit2.PasteFromClipboard;
if key=88 then
labelededit2.CutToClipboard;
end;
end;
procedure TForm1.labelededit1Change(Sender: TObject);
begin
data_address:=address_conv(labelededit1.Text,true);
//labelededit1.EditLabel.Caption:=data_address;
LabeledEdit5Change(Sender);
end;
procedure TForm1.LabeledEdit2Change(Sender: TObject);
begin
//name_address:=address_conv(labelededit2.Text,true);
//labelededit2.EditLabel.Caption:=name_address;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
iFileHandle:integer;
i,j:int64;
t1,t2:int64;
begin
if FileExists(OpenDialog1.FileName) and (get_rom_info()<>-1) then
begin
iFileHandle := FileOpen(Opendialog1.Filename, fmOpenRead);
if iFileHandle >0 then
begin
try
num_org:= num_mod +num_filent;//
ListView1.Clear;//清除列表
if (num_filent>0)and(num_filent<=4096) then //增加上限
begin
i:=rom_in+84+longword(32*num_mod)+longword(28*num_filent);//Filent文件指针结束
j:=num_filent;
ProgressBar1.max:=num_filent+num_mod;
ProgressBar1.Visible:=true;
t1:= GetTickCount;///
ListView1.Visible:=false;
while j>=1 do
begin
application.ProcessMessages;
get_info(iFileHandle,i);
i:=i-28;
ProgressBar1.position:= ProgressBar1.position +1;
j:=j-1
end;
i:=rom_in+84+longword(32*num_mod);//Mod文件指针结束
j:=num_mod;
while j>=1 do
begin
application.ProcessMessages;
get_info_mod(iFileHandle,i);
i:=i-32;
ProgressBar1.position:= ProgressBar1.position +1;
j:=j-1
end;
//ValueListEditor1.KeyOptions:=[keyedit];//不能重复KEY:,keyunique
ListView1.Visible:=true;
ProgressBar1.position:=0;
ProgressBar1.Visible:=false;
t2:=GetTickCount;///
op_log('读取"'+ExtractFileName(Opendialog1.Filename)+'"用时:'+inttostr(t2-t1)+'ms');
end
else op_log('无法得到文件信息!');
finally
FileClose(iFileHandle);
end;
end;
end;
end;
procedure TForm1.About_btClick(Sender: TObject);
begin
aboutbox.Show;
end;
{
procedure TForm1.Button6Click(Sender: TObject);
var
i:integer;
s:string;
cmd:string;
del_mod:string;
begin
if fileexists(opendialog1.FileName) then
begin
//Button5.Click;
s:=trim(labelededit3.Text);
i:=0;
repeat
i:=i+1;
Until (s=ValueListEditor1.Keys[i]) or (i>=(ValueListEditor1.RowCount-1));
if (s=ValueListEditor1.Keys[i]) then
begin
if Win32Platform=VER_PLATFORM_WIN32_NT then cmd:='cmd /k ' else cmd:='command /k ';
if fileexists(ExtractFilePath(Application.ExeName)+'RomMaster.exe') then
begin
begin
if CheckBox2.Checked=true then del_mod:='-dm ' else del_mod:='-d ';
winexec(Pchar(cmd+ExtractFilePath(Application.ExeName)+'RomMaster.exe '
+del_mod + ' "'+s +'" '+'-o'+' "'+OpenDialog1.FileName+'" '
+' "'+OpenDialog1.FileName+'" '),SW_SHOW);
end;
end else showmessage(ExtractFilePath(Application .ExeName)+'RomMaster.exe未找到!');
end else showmessage('ROM中无此文件');
end;
if debug then richedit1.Text:=(cmd+ExtractFilePath(Application.ExeName)+'RomMaster.exe '
+del_mod + ' "'+s +'" '+'-o'+' "'+OpenDialog1.FileName+'" '
+' "'+OpenDialog1.FileName+'" ');
end;
}
procedure TForm1.Button7Click(Sender: TObject);
var
s:string;
i:integer;
begin
if (OpenDialog1.FileName<>'') then
begin
s:=LowerCase(edit1.Text);
i:=-1;
repeat
i:=i+1;
Until (s=LowerCase(ListView1.Items[i].Caption)) or (i>=(ListView1.Items.Count-1));
if (s=LowerCase(ListView1.Items[i].Caption)) then
begin
ListView1.SetFocus;
//ListView1.ItemIndex:=i;
ListView1.Items[i].Selected := True;
ListView1.Selected.MakeVisible(true);//其中PartialOK参数决定是否该item整体可见还是只要可见就可以了.
end;
end;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
aboutbox.Show;
end;
procedure TForm1.LabeledEdit4KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','a'..'f','A'..'F',#8,#13]) then
key:= #0;
//if (key in [#13]) then labelededit2Change(Sender);
end;
procedure TForm1.LabeledEdit4KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ssCtrl in shift then
begin
if key=67 then
labelededit4.CopyToClipboard;
if key=86 then
labelededit4.PasteFromClipboard;
if key=88 then
labelededit4.CutToClipboard;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (key in [#13]) then button7.Click;
end;
procedure TForm1.LabeledEdit3KeyPress(Sender: TObject; var Key: Char);
begin
if (key in [#13]) then del_btn.Click;
end;
procedure TForm1.ROM1Click(Sender: TObject);
begin
Button1.Click;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Button3.Click;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
Button2.Click;
end;
procedure TForm1.LabeledEdit5KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['0'..'9','a'..'f','A'..'F',#8,#13]) then
key:= #0;
end;
procedure TForm1.LabeledEdit5KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ssCtrl in shift then
begin
if key=67 then
labelededit5.CopyToClipboard;
if key=86 then
labelededit5.PasteFromClipboard;
if key=88 then
labelededit5.CutToClipboard;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
str:tstringlist;
s:string;
i:integer;
begin
rom_base:=Longword($80040000);
Version.Caption:=get_version;
Debug:=false;
e8_ini:=ExtractFilePath(Application.ExeName)+'E8.ini';
if not FileExists(e8_ini) then FileClose(FileCreate(e8_ini));
if not FileExists(e8_ini) then showmessage('无法创建'+e8_ini)
else
begin
str:=tstringlist.Create;
str.LoadFromFile(e8_ini);
if str.Count<64 then
begin
for i:=0 to str.Count-1 do
begin
s:=trim(str.Strings[i]);
if pos('name:',s)>0 then
begin
Labelededit2.text:=copy(s,pos('name:',s)+5,8);//跳过name段
Labelededit4.text:=copy(s,pos('-',s)+1,8);
end
else if pos('data:',s)>0 then
begin
Labelededit1.text:=copy(s,pos('data:',s)+5,8);
Labelededit5.text:=copy(s,pos('-',s)+1,8);
end;
//if s<>'//' then ComboBox1.Items.Add(str.Strings[i]);
end;
end;
str.Free;
end;
end;
procedure TForm1.Button8Click(Sender: TObject);
var
str:tstringlist;
i:integer;
info_file:string;
begin
//e8_ini:=ExtractFilePath(Application.ExeName)+'rominfo.txt';
if FileExists(OpenDialog1.FileName) then
begin
info_file:=OpenDialog1.FileName+'_info.txt';
if not FileExists(info_file) then FileClose(FileCreate(info_file));
if not FileExists(info_file) then showmessage('无法创建'+info_file)
else
begin
//valueListEditor1.Strings.SaveToFile(info_file);
str:=tstringlist.Create;
str.Add('文件总数:'+ inttostr(num_mod+num_filent)+' [modent:'+inttostr(num_mod)+' filent:'+inttostr(num_filent)+']');
str.Add('文件名'+chr(9)+'数据地址区'+chr(9)+'[ROM中/实际大小]'+chr(9)+'类型');
for i:=0 to ListView1.Items.Count-1 do //与RowCount不一样,
begin
//str.Add(ansiReplaceText(valueListEditor1.strings[i],'=',chr(9)));
with ListView1.Items[i] do
str.Add(Caption+chr(9)+SubItems.strings[0]+'-'+SubItems.strings[1]+chr(9)+'['+SubItems.strings[2]+'/'+SubItems.strings[3]+']'+' '+SubItems.strings[4]);
end;
str.SaveToFile(info_file);
str.Free;
op_log('文件信息成功导出到'+info_file);
end;
end;
end;
procedure TForm1.Button9Click(Sender: TObject);
var
str:tstringlist;
begin
if (trim(Labelededit2.text)<>'')and(trim(Labelededit4.text)<>'')and
(trim(Labelededit1.text)<>'')and(trim(Labelededit5.text)<>'') then
if not FileExists(e8_ini) then FileClose(FileCreate(e8_ini));
if not FileExists(e8_ini) then showmessage('无法创建'+e8_ini)
else
begin
str:=tstringlist.Create;
str.add('name:'+Labelededit2.text+'-'+Labelededit4.text);
str.add('data:'+Labelededit1.text+'-'+Labelededit5.text);
str.SaveToFile(e8_ini);
str.Free;
op_log('配置保存成功!');
end;
end;
procedure TForm1.LabeledEdit5Change(Sender: TObject);
var
i:integer;
begin
if (labelededit1.Text<>'')and(labelededit5.Text<>'') then
begin
i:=strtoint64def('$'+address_conv(labelededit5.text,false),-1)
-strtoint64def('$'+address_conv(labelededit1.text,false),-1);
if i>=0 then
begin label3.Font.Color:=clblack; label3.Caption:='数据区大小 :'+inttostr(i);
end
else begin label3.Font.Color:=clred; label3.Caption:='错误!'; end;
end;
end;
procedure TForm1.labelededit1DblClick(Sender: TObject);
var
s:string;
begin
s:= trim(Clipboard.AsText);
if strtoint64def('$'+s,-1)<>-1 then
labelededit1.PasteFromClipboard;
end;
procedure TForm1.LabeledEdit5DblClick(Sender: TObject);
var
s:string;
begin
s:= trim(Clipboard.AsText);
if strtoint64def('$'+s,-1)<>-1 then
labelededit5.PasteFromClipboard;
end;
procedure TForm1.Button10Click(Sender: TObject);
var
iFileHandle:integer;
i:int64;
s1,srom_size,s2:string;
begin
if FileExists(OpenDialog1.FileName) and (get_rom_info()<>-1) then
begin
iFileHandle := FileOpen(opendialog1.filename, fmOpenRead);
if iFileHandle >0 then
begin
try
if (num_filent>0)and(num_filent<=4096) then //增加上限
begin
i:=rom_in+84+longword(32*num_mod)+longword(28*num_filent)-longword((num_mod+num_filent-num_org-1)*28);//Filent文件指针结束
if num_org=(num_mod+num_filent) then
Labelededit1.Text:=inttohex(strtoint64def('$'+get_ibyte(iFileHandle,i-4-28,4),0) +strtoint64def('$'+get_ibyte(iFileHandle,i-12-28,4),0),8)
else
while num_org<(num_mod+num_filent) do
begin
s1:=get_ibyte(iFileHandle,i-4,4);
srom_size:=get_ibyte(iFileHandle,i-12,4);
s2:=inttohex(strtoint64def('$'+s1,0) +strtoint64def('$'+srom_size,0),8);
with ListView1 do
begin
Items.Insert(0);//一定要add
Items[0].Caption:=getname(iFileHandle,(get_ibyte(iFileHandle,i-8,4)));
Items[0].SubItems.add(s1);
Items[0].SubItems.add(s2);
Items[0].SubItems.add(ihextoint(srom_size));
Items[0].SubItems.add(ihextoint(get_ibyte(iFileHandle,i-16,4)));
Items[0].SubItems.add('F'+get_ibyte(iFileHandle,i-28,4));
end;
{ValueListEditor1.Row:=1;
ValueListEditor1.SetFocus;
ValueListEditor1.InsertRow(getname(iFileHandle,(get_ibyte(iFileHandle,i-8,4))),
s1 + ' - ' + s2+' ['+ ihextoint(srom_size) +'/'+ihextoint(get_ibyte(iFileHandle,i-16,4))
+'] F'+get_ibyte(iFileHandle,i-28,4),false);
}
i:=i+28;
num_org:=num_org+1;
labelededit1.Text:=s2;//复制到数据开始
end;
end;
finally
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -