cheat-engine/Cheat Engine/frmstructuresconfigunit.pas
cheatengine@gmail.com a2e94d5418 Make the disassembler show some more data in the comment field
Adding some extra safety checks to the structure dissect
Fix the structure settings from closing after giving invalid input
(last commit meant physical of course)
2013-11-18 18:30:54 +00:00

404 lines
13 KiB
ObjectPascal

unit frmStructuresConfigUnit;
{$MODE Delphi}
{
Note: The "Selected" part has been removed
}
interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, registry;
type
{ TfrmStructuresConfig }
TfrmStructuresConfig = class(TForm)
Button1: TButton;
Button2: TButton;
cbAutoCreate: TCheckBox;
cbAutoDestroyLocal: TCheckBox;
cbAutoFillGaps: TCheckBox;
cbDefaultHex: TCheckBox;
cbDoNotSaveLocal: TCheckBox;
cbAutoGuessCustomTypes: TCheckBox;
ColorDialog1: TColorDialog;
comboBackground: TComboBox;
edtMaxAutoExpandLevel: TEdit;
edtAutostructsize: TEdit;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label7: TLabel;
Label9: TLabel;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
procedure Button1Click(Sender: TObject);
procedure ColorClickOld(Sender: TObject);
procedure comboBackgroundChange(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ColorClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure FormDestroy(Sender: TObject);
procedure Color2Click(Sender: TObject);
private
{ private declarations }
fbackgroundcolor: TColor;
fequalText: TColor;
fdefaultText: TColor;
fdifferentText: TColor;
fgroupequalText: TColor;
fgroupdifferentText: TColor;
fselectedbackgroundcolor: TColor;
fselectedDefaultText: TColor;
fselectedEqualText: TColor;
fselectedDifferentText: TColor;
fselectedGroupEqualText: TColor;
fselectedGroupDifferentText: TColor;
// procedure setbackgroundcolor(x: TColor);
procedure setdefaultText(x: TColor);
procedure setequalText(x: TColor);
procedure setdifferentText(x: TColor);
procedure setgroupequalText(x: TColor);
procedure setgroupdifferentText(x: TColor);
// procedure setselectedbackgroundcolor(x: TColor);
procedure setselectedDefaultText(x: TColor);
procedure setselectedEqualText(x: TColor);
procedure setselectedDifferentText(x: TColor);
procedure setselectedGroupEqualText(x: TColor);
procedure setselectedGroupDifferentText(x: TColor);
function Get_Color(tag: integer):TColor; //_ because inherited method exists
procedure Set_Color(tag: integer; color: TColor);
public
{ public declarations }
maxautoexpandlevel: integer;
// property backgroundcolor: TColor read fbackgroundcolor write setBackgroundColor;
property defaultText: TColor read fdefaultText write setdefaultText;
property equalText: TColor read fequalText write setequalText;
property differentText: TColor read fdifferentText write setdifferentText;
property groupequalText: TColor read fgroupequalText write setgroupequalText;
property groupDifferentText: TColor read fgroupDifferentText write setgroupdifferentText;
// property selectedbackgroundcolor: TColor read fselectedbackgroundcolor write setselectedbackgroundcolor;
property selectedDefaultText: TColor read fselectedDefaultText write setselectedDefaultText;
property selectedEqualText: TColor read fselectedEqualText write setselectedEqualText;
property selectedDifferentText: TColor read fselectedDifferentText write setselectedDifferentText;
property selectedGroupEqualText: TColor read fselectedGroupEqualText write setselectedGroupEqualText;
property selectedgroupDifferentText: TColor read fselectedgroupDifferentText write setselectedgroupdifferentText;
end;
var
frmStructuresConfig: TfrmStructuresConfig;
implementation
resourcestring
rsNormal = 'Normal';
rsHighlighted = 'Highlighted';
{ TfrmStructuresConfig }
{
procedure TfrmStructuresConfig.setbackgroundcolor(x: TColor);
begin
fbackgroundcolor:=x;
// groupbox1.color:=x;
end; }
procedure TfrmStructuresConfig.setdefaultText(x: TColor);
begin
fdefaultText:=x;
if comboBackground.itemindex=0 then
label1.Font.Color:=x;
end;
procedure TfrmStructuresConfig.setequalText(x: TColor);
begin
fequaltext:=x;
if comboBackground.itemindex=0 then
label7.Font.Color:=x;
end;
procedure TfrmStructuresConfig.setdifferentText(x: TColor);
begin
fdifferentText:=x;
if comboBackground.itemindex=0 then
label2.Font.Color:=x;
end;
procedure TfrmStructuresConfig.setgroupequalText(x: TColor);
begin
fgroupequalText:=x;
if comboBackground.itemindex=0 then
label3.Font.Color:=x;
end;
procedure TfrmStructuresConfig.setgroupdifferentText(x: TColor);
begin
fgroupdifferentText:=x;
if comboBackground.itemindex=0 then
label9.Font.Color:=x;
end;
{
procedure TfrmStructuresConfig.setselectedbackgroundcolor(x: TColor);
begin
fselectedbackgroundcolor:=x;
//groupbox2.color:=x;
end; }
procedure TfrmStructuresConfig.setselectedDefaultText(x: TColor);
begin
fselectedDefaultText:=x;
if comboBackground.itemindex=1 then
label1.font.color:=x;
end;
procedure TfrmStructuresConfig.setselectedEqualText(x: TColor);
begin
fselectedEqualText:=x;
if comboBackground.itemindex=1 then
label7.font.color:=x;
end;
procedure TfrmStructuresConfig.setselectedDifferentText(x: TColor);
begin
fselectedDifferentText:=x;
if comboBackground.itemindex=1 then
label2.font.color:=x;
end;
procedure TfrmStructuresConfig.setselectedGroupEqualText(x: TColor);
begin
fselectedGroupEqualText:=x;
if comboBackground.itemindex=1 then
label3.font.color:=x;
end;
procedure TfrmStructuresConfig.setselectedGroupDifferentText(x: TColor);
begin
fselectedGroupDifferentText:=x;
if comboBackground.itemindex=1 then
label9.font.color:=x;
end;
function TfrmStructuresConfig.Get_Color(tag: integer):TColor;
begin
case tag of
1: result:=defaulttext;
2: result:=EqualText;
3: result:=differentText;
4: result:=groupequaltext;
5: result:=groupDifferentText;
6: result:=selecteddefaulttext;
7: result:=selectedEqualText;
8: result:=selecteddifferentText;
9: result:=selectedgroupequaltext;
10: result:=selectedgroupDifferentText;
end;
end;
procedure TfrmStructuresConfig.Set_Color(tag: integer; color: TColor);
begin
case tag of
1: defaulttext:=color;
2: EqualText:=color;
3: differentText:=color;
4: groupequaltext:=color;
5: groupDifferentText:=color;
6: selecteddefaulttext:=color;
7: selectedEqualText:=color;
8: selecteddifferentText:=color;
9: selectedgroupequaltext:=color;
10: selectedgroupDifferentText:=color;
end;
end;
procedure TfrmStructuresConfig.ColorClickOld(Sender: TObject);
begin
ColorDialog1.Color:=Get_Color(TControl(sender).tag);
if ColorDialog1.Execute then
Set_Color(TControl(sender).tag,ColorDialog1.Color);
end;
procedure TfrmStructuresConfig.comboBackgroundChange(Sender: TObject);
begin
if comboBackground.itemindex=0 then
begin
//normal colors
Label1.Font.color:=fdefaultText;
Label7.font.color:=fequalText;
Label2.font.color:=fdifferentText;
label3.font.color:=fgroupequalText;
Label9.font.color:=fgroupdifferentText;
groupbox1.Color:=clWindow;
end
else
begin
//highlighted
Label1.Font.color:=fselecteddefaultText;
Label7.font.color:=fselectedequalText;
Label2.font.color:=fselecteddifferentText;
label3.font.color:=fselectedgroupequalText;
Label9.font.color:=fselectedgroupdifferentText;
groupbox1.color:=clHighlight;
end;
end;
procedure TfrmStructuresConfig.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
end;
procedure TfrmStructuresConfig.Button1Click(Sender: TObject);
var
reg: TRegistry;
autosize: integer;
begin
autosize:=strtoint(edtAutostructsize.text);
maxautoexpandlevel:=strtoint(edtMaxAutoExpandLevel.text);
reg:=tregistry.create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Cheat Engine\DissectData',true) then
begin
reg.WriteInteger('Default Color',defaultText);
reg.WriteInteger('Match Color',equalText);
reg.WriteInteger('No Match Color',differentText);
reg.WriteInteger('All Match Color Same',groupequalText);
reg.WriteInteger('All Match Color Diff',groupDifferentText);
reg.WriteInteger('Selected Default Color',selecteddefaultText);
reg.WriteInteger('Selected Match Color',selectedequalText);
reg.WriteInteger('Selected No Match Color',selecteddifferentText);
reg.WriteInteger('Selected All Match Color Same',selectedgroupequalText);
reg.WriteInteger('Selected All Match Color Diff',selectedgroupDifferentText);
reg.WriteBool('Autocreate', cbAutoCreate.Checked);
reg.WriteInteger('Autocreate Size', autosize);
reg.WriteBool('Autodestroy', cbAutoDestroyLocal.Checked);
reg.WriteBool('Don''t save local', cbDoNotSaveLocal.Checked);
reg.WriteBool('Autofill', cbAutoFillGaps.Checked);
reg.WriteBool('DefaultHex', cbDefaultHex.Checked);
reg.writeBool('Autoguess Custom Types', cbAutoGuessCustomTypes.checked);
reg.WriteInteger('Max Auto-Expand Level',maxautoexpandlevel);
end;
finally
reg.free;
end;
modalresult:=mrok;
end;
procedure TfrmStructuresConfig.FormCreate(Sender: TObject);
var reg: tregistry;
begin
//load the settings from the registry
//def colors
maxautoexpandlevel:=1;
defaultText:=clWindowText;
equalText:=clGreen;
differentText:=clRed;
groupequalText:=clBlue;
groupDifferentText:=$640064;
selecteddefaultText:=InvertColor(defaultText);
selectedequalText:=InvertColor(equalText);
selecteddifferentText:=InvertColor(differentText);
selectedgroupequalText:=InvertColor(groupequalText);
selectedgroupDifferentText:=InvertColor(groupDifferentText);
reg:=tregistry.create;
try
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey('\Software\Cheat Engine\DissectData',false) then
begin
if reg.ValueExists('Default Color') then defaultText:=reg.ReadInteger('Default Color');
if reg.ValueExists('Match Color') then equalText:=reg.ReadInteger('Match Color');
if reg.ValueExists('No Match Color') then differentText:=reg.ReadInteger('No Match Color');
if reg.ValueExists('All Match Color Same') then groupequalText:=reg.ReadInteger('All Match Color Same');
if reg.ValueExists('All Match Color Diff') then groupDifferentText:=reg.ReadInteger('All Match Color Diff');
if reg.ValueExists('Selected Default Color') then selecteddefaultText:=reg.ReadInteger('Selected Default Color');
if reg.ValueExists('Selected Match Color') then selectedequalText:=reg.ReadInteger('Selected Match Color');
if reg.ValueExists('Selected No Match Color') then selecteddifferentText:=reg.ReadInteger('Selected No Match Color');
if reg.ValueExists('Selected All Match Color Same') then selectedgroupequalText:=reg.ReadInteger('Selected All Match Color Same');
if reg.ValueExists('Selected All Match Color Diff') then selectedgroupDifferentText:=reg.ReadInteger('Selected All Match Color Diff');
if reg.ValueExists('Autocreate') then cbAutoCreate.Checked:=reg.ReadBool('Autocreate');
if reg.ValueExists('Autocreate Size') then edtAutostructsize.text:=inttostr(reg.ReadInteger('Autocreate Size'));
if reg.ValueExists('Autodestroy') then cbAutoDestroyLocal.Checked:=reg.ReadBool('Autodestroy');
if reg.ValueExists('Don''t save local') then cbDoNotSaveLocal.Checked:=reg.ReadBool('Don''t save local');
if reg.ValueExists('Autofill') then cbAutoFillGaps.Checked:=reg.ReadBool('Autofill');
if reg.ValueExists('DefaultHex') then cbDefaultHex.Checked:=reg.ReadBool('DefaultHex');
if reg.ValueExists('Autoguess Custom Types') then cbAutoGuessCustomTypes.checked:=reg.ReadBool('Autoguess Custom Types');
if reg.ValueExists('Max Auto-Expand Level') then maxautoexpandlevel:=reg.ReadInteger('Max Auto-Expand Level');
end;
finally
reg.free;
end;
comboBackground.Items.Clear;
comboBackground.Items.Add(rsNormal);
comboBackground.Items.Add(rsHighlighted);
comboBackground.itemindex:=0;
edtMaxAutoExpandLevel.text:=inttostr(maxautoexpandlevel);
end;
procedure TfrmStructuresConfig.ColorClick(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
end;
procedure TfrmStructuresConfig.FormDestroy(Sender: TObject);
begin
// showmessage('this should never happen');
end;
procedure TfrmStructuresConfig.Color2Click(Sender: TObject);
var i: integer;
begin
i:=comboBackground.itemindex*5;
ColorDialog1.Color:=Get_Color(TControl(sender).tag+i);
if ColorDialog1.Execute then
Set_Color(TControl(sender).tag+i,ColorDialog1.Color);
GroupBox1.ReAlign;
groupbox1.Refresh;
end;
initialization
{$I frmstructuresconfigunit.lrs}
end.