mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
162 lines
3.8 KiB
ObjectPascal
Executable file
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.
|