mirror of
https://github.com/cheat-engine/cheat-engine
synced 2026-08-15 02:26:08 -04:00
642 lines
15 KiB
ObjectPascal
Executable file
642 lines
15 KiB
ObjectPascal
Executable file
unit ExtraTrainerComponents;
|
|
|
|
interface
|
|
|
|
{$mode DELPHI}
|
|
|
|
uses controls,StdCtrls,classes,Graphics,ExtCtrls, sysutils, betterControls;
|
|
|
|
type TLabel2 = class (TLabel)
|
|
public
|
|
command: string;
|
|
end;
|
|
|
|
type TImage2 = class (Timage)
|
|
public
|
|
extension: string;
|
|
imagedata: tmemorystream;
|
|
command: string;
|
|
end;
|
|
|
|
type TButton2 = class (TButton)
|
|
public
|
|
command: string;
|
|
end;
|
|
|
|
type tcheat = class (twincontrol)
|
|
//a cheat exists of 2 parts, the hotkey and the description (what about cheats that enable you to change values them?)
|
|
private
|
|
hotkeylabel: tlabel;
|
|
descriptionlabel: tlabel;
|
|
edit:tedit;
|
|
checkbox: tcheckbox;
|
|
ftextcolor: tcolor;
|
|
factivated: boolean;
|
|
|
|
fshowhotkey: boolean;
|
|
factivationcolor: tcolor;
|
|
feditleft: integer;
|
|
feditwidth: integer;
|
|
feditvalue: string;
|
|
fcheckboxstate: boolean;
|
|
|
|
|
|
deactivatetimer: TTimer;
|
|
fCheatNr: integer;
|
|
procedure resetwidth;
|
|
procedure setactivated(x:boolean);
|
|
procedure SetHotkey(newhotkey:string);
|
|
procedure SetDescription(newdescription: string);
|
|
function GetHotkey:string;
|
|
function GetDescription:string;
|
|
function GetEditValue:string;
|
|
procedure SetEditValue(value:string);
|
|
procedure ChangeEdit(present: boolean);
|
|
function gethotkeyleft:integer;
|
|
procedure sethotkeyleft(x: integer);
|
|
function getdescriptionleft:integer;
|
|
procedure Setdescriptionleft(x: integer);
|
|
procedure seteditleft(x: integer);
|
|
procedure seteditwidth(x: integer);
|
|
procedure setTextColor(c:tcolor);
|
|
procedure SetCheckbox(x: boolean);
|
|
procedure setshowHotkey(x: boolean);
|
|
|
|
procedure resizeControl(sender: TObject);
|
|
|
|
procedure md(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
|
|
function getCheckboxVisible: boolean;
|
|
function editPresent: boolean;
|
|
public
|
|
|
|
|
|
|
|
|
|
beeponactivate: boolean;
|
|
|
|
constructor create(AOwner:Tcomponent); override;
|
|
|
|
procedure setDeactivateTimer(interval: integer);
|
|
procedure timerdeactivate(sender: tobject);
|
|
|
|
|
|
property OnMouseDown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
published
|
|
property CheatNr: integer read fCheatNr write fCheatNr;
|
|
property Color;
|
|
property Textcolor:tcolor read ftextcolor write SetTextcolor;
|
|
property Editleft:integer read feditleft write seteditleft default 200;
|
|
property Editwidth: integer read feditwidth write seteditwidth;
|
|
property Editvalue:string read GetEditValue write SetEditValue;
|
|
property Hotkey:string read GetHotkey write SetHotkey;
|
|
property Description:string read GetDescription write SetDescription;
|
|
property Hotkeyleft: integer read gethotkeyleft write sethotkeyleft;
|
|
property Descriptionleft:integer read getdescriptionleft write setdescriptionleft;
|
|
property Activated: boolean read factivated write SetActivated;
|
|
property Activationcolor: TColor read factivationcolor write factivationcolor;
|
|
|
|
property ShowHotkey: boolean read fshowhotkey write SetShowHotkey;
|
|
property HasEditBox: boolean read EditPresent write ChangeEdit;
|
|
property HasCheckbox: boolean read getCheckboxVisible write SetCheckbox;
|
|
property Font;
|
|
|
|
end;
|
|
|
|
type TCheatList = class (twincontrol)
|
|
private
|
|
cheats: array of tcheat;
|
|
cheatcount: integer;
|
|
fautosize: boolean;
|
|
fhotkeyleft: integer;
|
|
fdescriptionleft: integer;
|
|
feditleft:integer;
|
|
feditwidth:integer;
|
|
ftextcolor:tcolor;
|
|
fhascheckbox: boolean;
|
|
fshowhotkeys: boolean;
|
|
fBeepOnActivate: boolean;
|
|
Function GetItem(i:integer):tcheat;
|
|
{$warn 3057 off}
|
|
procedure SetAutosize(x:boolean);
|
|
procedure sethotkeyleft(i:integer);
|
|
procedure setDescriptionleft(i: integer);
|
|
procedure setEditLeft(i: integer);
|
|
procedure setEditWidth(i: integer);
|
|
procedure setTextColor(c:tcolor);
|
|
procedure setCheckbox(x: boolean);
|
|
procedure setShowHotkeys(x: boolean);
|
|
procedure setBeepOnActivate(x: boolean);
|
|
public
|
|
activationcolor: tcolor;
|
|
property beepOnActivate: boolean read fBeepOnActivate write setBeepOnActivate;
|
|
property HasCheckbox: boolean read fhascheckbox write setcheckbox;
|
|
property ShowHotkeys: boolean read fshowhotkeys write setshowhotkeys;
|
|
property TextColor: tcolor read ftextcolor write settextcolor;
|
|
property hotkeyleft: integer read fhotkeyleft write sethotkeyleft;
|
|
property descriptionleft: integer read fdescriptionleft write setdescriptionleft;
|
|
property editleft: integer read feditleft write seteditleft;
|
|
property editwidth: integer read feditwidth write seteditwidth;
|
|
|
|
property AutoSize: boolean read fautosize write SetAutosize;
|
|
|
|
property Count:integer read cheatcount;
|
|
procedure addcheat(newhotkey,newdescription,defeditvalue:string;hasEdit:boolean);
|
|
procedure clear;
|
|
procedure deletelast;
|
|
constructor create(AOwner:Tcomponent); override;
|
|
destructor destroy; override;
|
|
published
|
|
property onmousedown;
|
|
property OnMouseMove;
|
|
property OnMouseUp;
|
|
// property bevelkind;
|
|
// property BevelInner;
|
|
//property BevelOuter;
|
|
// property BevelWidth;
|
|
property Color;
|
|
property Items[Index: Integer]: TCheat read GetItem; //no write
|
|
end;
|
|
|
|
implementation
|
|
|
|
resourcestring
|
|
rsUndefinedHotkey = 'undefined hotkey';
|
|
rsUndefinedDescription = 'undefined description';
|
|
|
|
|
|
|
|
procedure TCheat.md(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
begin
|
|
if assigned(self.OnMouseDown) then
|
|
self.OnMouseDown(self,button,shift,x,y);
|
|
end;
|
|
|
|
procedure TCheat.SetShowHotkey(x: boolean);
|
|
begin
|
|
fshowhotkey:=x;
|
|
hotkeylabel.Visible:=x;
|
|
end;
|
|
|
|
procedure tcheat.resizeControl(sender: TObject);
|
|
begin
|
|
if checkbox<>nil then
|
|
checkbox.top:=(clientheight div 2)-(checkbox.Height div 2);
|
|
|
|
end;
|
|
|
|
procedure tcheat.SetCheckbox(x:boolean);
|
|
begin
|
|
if x then
|
|
begin
|
|
checkbox:=tcheckbox.Create(self);
|
|
checkbox.caption:='';
|
|
checkbox.Left:=0;
|
|
checkbox.top:=(clientheight div 2)-(checkbox.Height div 2);
|
|
checkbox.width:=16;
|
|
checkbox.Parent:=self;
|
|
checkbox.Visible:=true;
|
|
|
|
checkbox.OnMouseDown:=md;
|
|
checkbox.enabled:=false;
|
|
|
|
hotkeyleft:=checkbox.width+3;
|
|
end
|
|
else
|
|
begin
|
|
if checkbox<>nil then
|
|
freeandnil(checkbox);
|
|
|
|
hotkeyleft:=0;
|
|
end;
|
|
end;
|
|
|
|
function tcheat.getCheckboxVisible: boolean;
|
|
begin
|
|
result:=checkbox<>nil;
|
|
end;
|
|
|
|
function tcheat.editPresent: boolean;
|
|
begin
|
|
result:=edit<>nil;
|
|
end;
|
|
|
|
procedure tcheat.setactivated(x:boolean);
|
|
begin
|
|
factivated:=x;
|
|
if x then //set activate color
|
|
begin
|
|
descriptionlabel.Font.Color:=activationcolor;
|
|
hotkeylabel.Font.Color:=activationcolor;
|
|
end
|
|
else
|
|
begin
|
|
descriptionlabel.Font.Color:=ftextcolor;
|
|
hotkeylabel.Font.Color:=ftextcolor;
|
|
end;
|
|
|
|
if checkbox<>nil then
|
|
checkbox.Checked:=x;
|
|
end;
|
|
|
|
procedure tcheat.resetwidth;
|
|
var a,b: integer;
|
|
begin
|
|
a:=descriptionlabel.left+descriptionlabel.Width;
|
|
b:=hotkeylabel.Left+hotkeylabel.Width;
|
|
|
|
if b>a then a:=b;
|
|
|
|
if editpresent then
|
|
begin
|
|
b:=edit.Left+edit.Width;
|
|
if b>a then a:=b;
|
|
end;
|
|
|
|
//width:=a;
|
|
end;
|
|
|
|
|
|
function tcheat.GetHotkeyleft: integer;
|
|
begin
|
|
result:=hotkeylabel.Left;
|
|
end;
|
|
|
|
procedure tcheat.sethotkeyleft(x: integer);
|
|
begin
|
|
hotkeylabel.left:=x;
|
|
resetwidth;
|
|
end;
|
|
|
|
procedure tcheat.setTextColor(c:tcolor);
|
|
begin
|
|
ftextcolor:=c;
|
|
//set the color of description and hotkey
|
|
if not activated then
|
|
begin
|
|
descriptionlabel.Font.Color:=c;
|
|
hotkeylabel.Font.Color:=c;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure tcheat.seteditwidth(x:integer);
|
|
begin
|
|
fEditWidth:=x;
|
|
|
|
if edit<>nil then
|
|
edit.width:=x;
|
|
|
|
resetwidth;
|
|
end;
|
|
|
|
|
|
|
|
|
|
procedure tcheat.seteditleft(x:integer);
|
|
begin
|
|
feditleft:=x;
|
|
if edit<>nil then
|
|
edit.left:=x;
|
|
|
|
resetwidth;
|
|
end;
|
|
|
|
function tcheat.getdescriptionleft:integer;
|
|
begin
|
|
result:=descriptionlabel.left;
|
|
end;
|
|
|
|
procedure tcheat.Setdescriptionleft(x:integer);
|
|
begin
|
|
descriptionlabel.Left:=x;
|
|
//change the width of the component
|
|
resetwidth;
|
|
end;
|
|
|
|
function tcheat.GetEditValue:string;
|
|
begin
|
|
result:=feditvalue;
|
|
|
|
if edit<>nil then
|
|
result:=edit.Text;
|
|
end;
|
|
|
|
procedure tcheat.SetEditValue(value:string);
|
|
begin
|
|
feditvalue:=value;
|
|
if edit<>nil then
|
|
edit.Text:=value;
|
|
end;
|
|
|
|
procedure tcheat.ChangeEdit(present:boolean);
|
|
begin
|
|
if present then
|
|
begin
|
|
if edit=nil then
|
|
begin
|
|
edit:=tedit.Create(self);
|
|
edit.Text:=feditvalue;
|
|
end;
|
|
|
|
edit.autosize:=false;
|
|
|
|
|
|
edit.Left:=Self.editleft;
|
|
edit.width:=self.Editwidth;
|
|
edit.Parent:=self;
|
|
edit.Visible:=true;
|
|
edit.BorderStyle:=bsNone;
|
|
|
|
|
|
edit.top:=hotkeylabel.top;
|
|
edit.height:=hotkeylabel.height;
|
|
end
|
|
else
|
|
begin
|
|
if edit<>nil then
|
|
freeandnil(edit);
|
|
end;
|
|
|
|
resetwidth;
|
|
end;
|
|
|
|
procedure tcheat.Sethotkey(newhotkey:string);
|
|
begin
|
|
hotkeylabel.Caption:=newhotkey;
|
|
resetwidth;
|
|
end;
|
|
|
|
procedure tcheat.SetDescription(newDescription:string);
|
|
begin
|
|
descriptionlabel.Caption:=newdescription;
|
|
resetwidth;
|
|
end;
|
|
|
|
function tcheat.GetHotkey:string;
|
|
begin
|
|
result:=hotkeylabel.Caption;
|
|
end;
|
|
|
|
function tcheat.GetDescription:string;
|
|
begin
|
|
result:=descriptionlabel.Caption;
|
|
end;
|
|
|
|
procedure TCheat.setDeactivateTimer(interval: integer);
|
|
begin
|
|
if deactivatetimer<>nil then
|
|
begin
|
|
deactivatetimer.Interval:=interval;
|
|
deactivatetimer.enabled:=true;
|
|
|
|
end;
|
|
end;
|
|
|
|
procedure TCheat.timerdeactivate(sender: tobject);
|
|
begin
|
|
activated:=false;
|
|
if deactivatetimer<>nil then
|
|
deactivatetimer.enabled:=false;
|
|
end;
|
|
|
|
constructor tcheat.create(AOwner:tcomponent);
|
|
begin
|
|
inherited create(AOwner);
|
|
|
|
clientheight:=28;
|
|
feditleft:=200;
|
|
feditwidth:=100;
|
|
|
|
|
|
deactivatetimer:=TTimer.create(self);
|
|
deactivatetimer.enabled:=false;
|
|
deactivatetimer.OnTimer:=timerdeactivate;
|
|
|
|
activationcolor:=clred;
|
|
|
|
|
|
hotkeylabel:=tlabel.Create(self);
|
|
hotkeylabel.Caption:=rsUndefinedHotkey;
|
|
hotkeylabel.Left:=0;
|
|
|
|
hotkeylabel.Top:=1+(clientheight div 2)-(hotkeylabel.Height div 2);
|
|
hotkeylabel.Parent:=self;
|
|
|
|
descriptionlabel:=tlabel.Create(self);
|
|
descriptionlabel.Caption:=rsUndefinedDescription;
|
|
descriptionlabel.left:=100;
|
|
descriptionlabel.Top:=1+(clientheight div 2)-(descriptionlabel.Height div 2);
|
|
descriptionlabel.Parent:=self;
|
|
|
|
ftextcolor:=hotkeylabel.Font.Color;
|
|
clientWidth:=descriptionlabel.left+descriptionlabel.Width;
|
|
|
|
fshowhotkey:=true;
|
|
|
|
descriptionlabel.OnMouseDown:=md;
|
|
hotkeylabel.OnMouseDown:=md;
|
|
|
|
|
|
OnResize:=resizeControl;
|
|
|
|
|
|
beeponactivate:=true; //default
|
|
end;
|
|
|
|
|
|
|
|
//-------------------------------------------------------
|
|
//Tcheatlist
|
|
//-------------------------------------------------------
|
|
|
|
procedure tcheatlist.setTextColor(c:tcolor);
|
|
var i:integer;
|
|
begin
|
|
ftextcolor:=c;
|
|
|
|
//set the color of the cheats
|
|
for i:=0 to cheatcount-1 do
|
|
cheats[i].textcolor:=c;
|
|
end;
|
|
|
|
procedure TCheatlist.setBeepOnActivate(x: boolean);
|
|
var i: integer;
|
|
begin
|
|
fBeepOnActivate:=x;
|
|
for i:=0 to cheatcount-1 do
|
|
cheats[i].beeponactivate:=x;
|
|
end;
|
|
|
|
procedure TCheatlist.setShowHotkeys(x: boolean);
|
|
var i: integer;
|
|
begin
|
|
fshowhotkeys:=x;
|
|
for i:=0 to cheatcount-1 do
|
|
cheats[i].showhotkey:=x;
|
|
end;
|
|
|
|
procedure TCheatlist.setcheckbox(x: boolean);
|
|
var i: integer;
|
|
begin
|
|
fhascheckbox:=x;
|
|
for i:=0 to cheatcount-1 do
|
|
cheats[i].hascheckbox:=x;
|
|
end;
|
|
|
|
procedure tcheatlist.setHotkeyleft(i:integer);
|
|
var j: integer;
|
|
begin
|
|
fhotkeyleft:=i;
|
|
//set the descleft of aal cheats
|
|
for j:=0 to cheatcount-1 do
|
|
cheats[j].hotkeyleft:=i;
|
|
end;
|
|
|
|
procedure tcheatlist.setDescriptionleft(i:integer);
|
|
var j: integer;
|
|
begin
|
|
fdescriptionleft:=i;
|
|
//set the descleft of aal cheats
|
|
for j:=0 to cheatcount-1 do
|
|
cheats[j].descriptionleft:=i;
|
|
end;
|
|
|
|
procedure tcheatlist.setEditLeft(i:integer);
|
|
var j: integer;
|
|
begin
|
|
feditleft:=i;
|
|
//set the descleft of aal cheats
|
|
for j:=0 to cheatcount-1 do
|
|
cheats[j].editleft:=i;
|
|
end;
|
|
|
|
procedure tcheatlist.setEditWidth(i:integer);
|
|
var j: integer;
|
|
begin
|
|
feditwidth:=i;
|
|
//set the descleft of aal cheats
|
|
for j:=0 to cheatcount-1 do
|
|
cheats[j].editwidth:=i;
|
|
end;
|
|
|
|
procedure tcheatlist.SetAutosize(x:boolean);
|
|
begin
|
|
fautosize:=x;
|
|
if x and (cheatcount>0) then //autosize enabled
|
|
height:=6+cheats[count-1].top+cheats[count-1].height;
|
|
end;
|
|
|
|
procedure tcheatlist.addcheat(newhotkey,newdescription,defeditvalue:string;hasEdit:boolean);
|
|
begin
|
|
setlength(cheats,length(cheats)+1);
|
|
cheats[length(cheats)-1]:=tcheat.create(self);
|
|
|
|
with cheats[length(cheats)-1] do
|
|
begin
|
|
if assigned(self.onmousedown) then
|
|
begin
|
|
onmousedown:=self.onmousedown;
|
|
descriptionlabel.OnMouseDown:=self.onmousedown;
|
|
hotkeylabel.OnMouseDown:=self.onmousedown;
|
|
edit.OnMouseDown:=self.onmousedown;
|
|
end;
|
|
|
|
cheatnr:=length(cheats)-1;
|
|
left:=10;
|
|
top:=5+cheatnr*height;
|
|
hotkey:=newhotkey;
|
|
description:=newdescription;
|
|
Haseditbox:=hasedit;
|
|
editvalue:=defeditvalue;
|
|
textcolor:=self.ftextcolor;
|
|
descriptionleft:=self.fdescriptionleft;
|
|
editleft:=self.feditleft;
|
|
editwidth:=self.feditwidth;
|
|
activationcolor:=self.activationcolor;
|
|
hascheckbox:=self.HasCheckbox;
|
|
beeponactivate:=fbeepOnactivate;
|
|
parent:=self;
|
|
end;
|
|
|
|
inc(cheatcount);
|
|
|
|
if autosize then
|
|
height:=6+cheats[count-1].top+cheats[count-1].height;
|
|
|
|
end;
|
|
|
|
constructor tcheatlist.create(AOwner:tcomponent);
|
|
begin
|
|
inherited create(AOwner);
|
|
|
|
activationcolor:=clred;
|
|
width:=100;
|
|
height:=50;
|
|
ftextcolor:=clwindowtext;
|
|
fdescriptionleft:=100;
|
|
editleft:=210;
|
|
editwidth:=50;
|
|
|
|
fshowhotkeys:=true;
|
|
|
|
setlength(cheats,0);
|
|
|
|
// self.BevelEdges:=[beTop, beBottom,beleft,beright];
|
|
// self.BevelInner:=bvNone;
|
|
// self.BevelOuter:=bvNone;
|
|
// self.BevelKind:=bknone;
|
|
// self.BevelInner:=bvlowered;
|
|
// self.BorderWidth:=2;
|
|
|
|
fBeepOnActivate:=true;
|
|
|
|
end;
|
|
|
|
destructor tcheatlist.destroy;
|
|
var i: integer;
|
|
begin
|
|
for i:=0 to cheatcount-1 do cheats[i].free;
|
|
inherited destroy;
|
|
end;
|
|
|
|
function tcheatlist.GetItem(i:integer):tcheat;
|
|
begin
|
|
result:=nil;
|
|
if i<=length(cheats)-1 then
|
|
result:=cheats[i];
|
|
end;
|
|
|
|
procedure tcheatlist.deletelast;
|
|
begin
|
|
//in case the update encounters a delete
|
|
dec(cheatcount);
|
|
cheats[cheatcount].Free;
|
|
setlength(cheats,cheatcount);
|
|
|
|
//and adjust the size to fit the new cheat
|
|
if autosize then
|
|
begin
|
|
if count>0 then
|
|
height:=6+cheats[count-1].top+cheats[count-1].height
|
|
else
|
|
height:=1;
|
|
end;
|
|
end;
|
|
|
|
procedure tcheatlist.clear;
|
|
var i: integer;
|
|
begin
|
|
for i:=0 to cheatcount-1 do cheats[i].free;
|
|
|
|
cheatcount:=0;
|
|
setlength(cheats,0);
|
|
end;
|
|
|
|
initialization
|
|
registerclass(TCheat);
|
|
registerclass(TCheatList);
|
|
|
|
end.
|