📄 formmemorymodifier.pas
字号:
temp:=length(tlabel2(frmtrainerdesigner.Components[i]).Command);
trainer.writebuffer(temp,4);
x:=pchar(tlabel2(frmtrainerdesigner.Components[i]).Command);
trainer.writebuffer(pointer(x)^,temp);
//cursor
trainer.WriteBuffer(tlabel2(frmtrainerdesigner.Components[i]).cursor,sizeof(tcursor));
//tag
trainer.WriteBuffer(tlabel2(frmtrainerdesigner.Components[i]).tag,sizeof(integer));
//fontstyle
tempb:=tlabel2(frmtrainerdesigner.Components[i]).Font.Style=[fsUnderline];
trainer.WriteBuffer(tempb,sizeof(tempb));
end;
end;
temp:=$ffffffff; //indicate no other objects (although the eof would be a good indication too...)
trainer.WriteBuffer(temp,4);
end;
//save to file
trainer.SaveToFile(savedialog1.filename);
trainer.free;
showmessage('Trainer generated');
end;
end;
procedure TfrmMemoryModifier.Button5Click(Sender: TObject);
var HI: HICON;
test: TMemorystream;
begin
if opendialog2.execute then
begin
HI:=ExtractIcon(hinstance,pchar(opendialog2.filename),0);
if hi=1 then
raise exception.Create('This file type is not supported');
if hi=0 then
raise exception.Create('No icon found in this file');
icon.Picture.Icon.Handle:=HI;
test:=TMemoryStream.Create;
icon.Picture.Icon.SaveToStream(test);
try
if test.Size<>766 then
raise exception.Create('The size of this icon is '+IntToStr(test.size)+'. It should be 766');
finally
test.free;
end;
frmMemoryTrainerPreview.Icon:=icon.Picture.Icon;
if frmTrainerDesigner<>nil then frmtrainerdesigner.Icon:=icon.Picture.Icon;
end;
end;
procedure TfrmMemoryModifier.editTitleChange(Sender: TObject);
begin
frmMemoryTrainerPreview.Caption:=edittitle.Text;
if frmTrainerDesigner<>nil then frmTrainerdesigner.Caption:=edittitle.Text;
changed:=true;
end;
procedure TfrmMemoryModifier.Button6Click(Sender: TObject);
var index: integer;
i,j: integer;
begin
index:=recordview.ItemIndex;
if index<>-1 then
begin
for i:=0 to length(trainerdata[index].codeentrys)-1 do
setlength(trainerdata[index].codeentrys[i].originalopcode,0);
setlength(trainerdata[index].codeentrys,0);
setlength(trainerdata[index].addressentrys,0);
for i:=index to length(trainerdata)-2 do
trainerdata[i]:=trainerdata[i+1];
setlength(trainerdata,length(trainerdata)-1);
recordview.DeleteSelected;
end;
frmMemoryTrainerPreview.UpdateScreen;
if frmtrainerdesigner<>nil then frmtrainerdesigner.updatecheats
end;
procedure TfrmMemoryModifier.spbUpClick(Sender: TObject);
var temp:TTrainerdata;
indeX: integer;
desc,hotkey: string;
begin
index:=recordview.ItemIndex;
if index>=1 then
begin
temp:=trainerdata[index];
trainerdata[index]:=trainerdata[index-1];
trainerdata[index-1]:=temp;
desc:=recordview.Items[index].Caption;
hotkey:=recordview.Items[index].SubItems[0];
recordview.Items[index]:=recordview.items[index-1];
recordview.Items[index-1].Caption:=desc;
recordview.Items[index-1].SubItems[0]:=hotkey;
recordview.Items[index-1].Selected:=true;
end;
spbUp.Enabled:=recordview.itemindex>0;
spbDown.enabled:=recordview.itemindex<(recordview.Items.Count-1);
frmMemoryTrainerPreview.UpdateScreen;
if frmtrainerdesigner<>nil then frmtrainerdesigner.updatecheats
end;
procedure TfrmMemoryModifier.spbDownClick(Sender: TObject);
var temp:TTrainerdata;
indeX: integer;
desc,hotkey: string;
begin
index:=recordview.ItemIndex;
if index<recordview.Items.Count-1 then
begin
temp:=trainerdata[index];
trainerdata[index]:=trainerdata[index+1];
trainerdata[index+1]:=temp;
desc:=recordview.Items[index].Caption;
hotkey:=recordview.Items[index].SubItems[0];
recordview.Items[index]:=recordview.items[index+1];
recordview.Items[index+1].Caption:=desc;
recordview.Items[index+1].SubItems[0]:=hotkey;
recordview.Items[index+1].Selected:=true;
end;
spbUp.Enabled:=recordview.itemindex>0;
spbDown.enabled:=recordview.itemindex<(recordview.Items.Count-1);
frmMemoryTrainerPreview.UpdateScreen;
if frmtrainerdesigner<>nil then frmtrainerdesigner.updatecheats
end;
procedure TfrmMemoryModifier.LoadButtonClick(Sender: TObject);
begin
if opendialog3.Execute then
edit2.text:=extractfilename(opendialog3.filename);
end;
procedure TfrmMemoryModifier.FormCreate(Sender: TObject);
Var SNAPHandle: THandle;
ProcessEntry: ProcessEntry32;
Check: Boolean;
FullProcessName,ProcessName: String;
I: Integer;
begin
changed:=false;
left:=mainform.left-180;
if left<0 then left:=0;
top:=mainform.top+( (mainform.clientheight div 2)-(height div 2));
combobox1.clear;
SNAPHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
If SnapHandle>0 then
begin
ProcessEntry.dwSize:=SizeOf(ProcessEntry);
Check:=Process32First(SnapHandle,ProcessEntry);
while check=true do
begin
ProcessName:='';
FullProcessName:='';
FullProcessName:=processentry.szExeFile;
i:=Length(FullProcessName);
while (i>0) and (FullProcessname[i-1]<>'\') do dec(i);
processname:=copy(FullProcessName,i,length(FullProcessname)-i+1);
combobox1.Items.Add(processname);
check:=Process32Next(SnapHandle,ProcessEntry);
end;
end else raise exception.Create('I can''t get the process list.');
frmMemoryTrainerPreview:=tfrmMemoryTrainerPreview.create(self);
frmMemoryTrainerPreview.left:=left+width;
frmMemoryTrainerPreview.Top:=top;
frmMemoryTrainerPreview.Height:=height;
end;
procedure TfrmMemoryModifier.Edit2Change(Sender: TObject);
begin
changed:=true;
end;
procedure TfrmMemoryModifier.ComboBox1Change(Sender: TObject);
begin
changed:=true;
end;
procedure TfrmMemoryModifier.Button3Click(Sender: TObject);
begin
if changed or (recordview.items.count>0) then
begin
if messagedlg('Are you sure?',mtConfirmation,[mbyes,mbno],0)=mrYes then modalresult:=mrcancel;
end else modalresult:=mrcancel;
if modalresult=mrcancel then close;
end;
procedure TfrmMemoryModifier.Button7Click(Sender: TObject);
begin
if frmTrainerDesigner<>nil then
begin
frmTrainerDesigner.Close;
exit;
end;
button2.Enabled:=false;
frmMemoryTrainerPreview.Visible:=false;
frmTrainerDesigner:=Tfrmtrainerdesigner.create(self);
frmTrainerdesigner.Caption:=edittitle.Text;
frmtrainerdesigner.Icon:=frmMemoryTrainerPreview.Icon;
frmTrainerDesigner.BoundsRect:=frmMemoryTrainerPreview.BoundsRect;
frmTrainerDesigner.show;
button7.Caption:='Use default trainer layout';
end;
procedure TfrmMemoryModifier.EditHotkeyKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var newstr: String;
begin
laststate:=Key;
lastshiftstate:=Shift;
newstr:='';
if ssCtrl in Shift then newstr:='Ctrl';
if ssAlt in shift then if newstr='' then newstr:='Alt' else newstr:=newstr+'+Alt';
if ssShift in Shift then if newstr='' then newstr:='Shift' else newstr:=newstr+'+Shift';
if newstr='' then
newstr:=KeyToStr(key)
else
newstr:=newstr+'+'+KeyToStr(key);
edithotkey.text:=newstr;
key:=0;
end;
procedure TfrmMemoryModifier.CheckBox1Click(Sender: TObject);
begin
edithotkey.Enabled:=checkbox1.Checked;
end;
procedure TfrmMemoryModifier.FormShow(Sender: TObject);
begin
if not dontshowdefault then frmMemoryTrainerPreview.Show;
end;
procedure TfrmMemoryModifier.EditHotkeyKeyPress(Sender: TObject;
var Key: Char);
begin
key:=#0;
end;
procedure TfrmMemoryModifier.recordviewDblClick(Sender: TObject);
var i,j: integer;
begin
{ i:=recordview.ItemIndex;
if i<>-1 then
begin
FrmMemoryTrainerAddEntry:=tFrmMemoryTrainerAddEntry.create(self);
FrmMemoryTrainerAddEntry.editmode:=true;
with FrmMemoryTrainerAddEntry do
begin
editDescription.Text:=trainerdata[i].description;
edithotkey.Text:=trainerdata[i].hotkeytext;
laststate:=trainerdata[i].hotkey;
lastshiftstate:=[];
if (trainerdata[i].hotshift and MOD_CONTROL)=MOD_CONTROL then lastshiftstate:=lastshiftstate+[ssctrl];
if (trainerdata[i].hotshift and MOD_ALT)=MOD_ALT then lastshiftstate:=lastshiftstate+[ssalt];
if (trainerdata[i].hotshift and MOD_Shift)=MOD_Shift then lastshiftstate:=lastshiftstate+[ssshift];
for j:=0 to length(trainerdata[i].codeentrys)-1 do
begin
trainerdata[i].codeentrys[j].address
trainerdata[i].codeentrys[j].originalopcode
end;
end;
FrmMemoryTrainerAddEntry.showmodal;
frmMemoryTrainerPreview.UpdateScreen;
if frmTrainerDesigner<>nil then
frmTrainerDesigner.UpdateCheats;
end;}
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -