cheat-engine/Cheat Engine/Changeoffsetunit.pas
2020-12-10 23:39:40 +01:00

162 lines
3.8 KiB
ObjectPascal
Executable file

unit Changeoffsetunit;
{$MODE Delphi}
interface
uses
LCLIntf, Messages, SysUtils, classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, LResources, ExtCtrls,symbolhandler, math, betterControls;
type
{ TChangeOffset }
TChangeOffset = class(TForm)
Cancel: TButton;
Change: TButton;
TabControl1: TTabControl;
cbHexadecimal: TCheckBox;
Edit1: TEdit;
procedure ChangeClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure TabControl1Changing(Sender: TObject;
var AllowChange: Boolean);
procedure TabControl1Change(Sender: TObject);
procedure cbHexadecimalClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
offset: Int64;
FromAddress: ptrUint;
toAddress: ptrUint;
error: integer;
end;
var
ChangeOffset: TChangeOffset;
implementation
resourcestring
rsThisIsNotAnValidValue = 'This is not an valid value';
procedure TChangeOffset.ChangeClick(Sender: TObject);
var temp: ptruint;
s: string;
begin
if tabcontrol1.TabIndex=0 then
begin
if cbHexadecimal.checked then
begin
s:=trim(edit1.text);
if length(s)>1 then
begin
if s[1]='-' then
begin
val('-$'+copy(s,2,length(s)),offset,error);
end
else
val('$'+s,offset,error);
end
else
val('$'+s,offset,error);
end
else
val(edit1.Text,offset,error);
end
else
begin
try
temp:=symhandler.getAddressFromName(edit1.text);
offset:=temp-fromaddress;
except
error:=1;
end;
end;
end;
procedure TChangeOffset.FormCreate(Sender: TObject);
begin
//tabcontrol1.AutoSize:=true;
end;
procedure TChangeOffset.FormShow(Sender: TObject);
var r: trect;
begin
if tabcontrol1.TabIndex=0 then
begin
if cbHexadecimal.Checked then edit1.Text:=IntToHex(toaddress-fromaddress,8) else
edit1.Text:=IntToStr(integer(toaddress-fromaddress));
end
else
begin
edit1.Text:=IntToHex(toaddress,8);
end;
change.autosize:=false;
cancel.autosize:=false;
change.width:=max(change.width, cancel.width);
cancel.width:=max(change.width, cancel.width);
clientheight:=cancel.top+cancel.Height+tabcontrol1.TabHeight+5;
ClientWidth:=(cancel.left+cancel.width)*2;
end;
procedure TChangeOffset.TabControl1Changing(Sender: TObject;
var AllowChange: Boolean);
var controle: integer;
begin
if tabcontrol1.TabIndex=0 then
begin
if cbHexadecimal.checked then val('$'+edit1.Text,offset,controle) else
val(edit1.text,offset,controle);
end else
begin
val('$'+edit1.text,toaddress,controle);
end;
if controle=0 then allowchange:=true else
begin
allowchange:=false;
raise exception.Create(rsThisIsNotAnValidValue);
end;
end;
procedure TChangeOffset.TabControl1Change(Sender: TObject);
begin
if tabcontrol1.TabIndex=0 then
begin
cbHexadecimal.Visible:=true;
if cbHexadecimal.Checked then edit1.Text:=IntToHex(toaddress-fromaddress,8) else
edit1.Text:=IntToStr(integer(toaddress-fromaddress));
end
else
begin
cbHexadecimal.visible:=false;
edit1.Text:=IntToHex(toaddress,8);
end;
end;
procedure TChangeOffset.cbHexadecimalClick(Sender: TObject);
begin
if tabcontrol1.TabIndex=0 then
begin
if cbHexadecimal.Checked then edit1.Text:=IntToHex(toaddress-fromaddress,8) else
edit1.Text:=IntToStr(integer(toaddress-fromaddress));
end;
end;
initialization
{$i Changeoffsetunit.lrs}
end.