cheat-engine/Cheat Engine/frmstructuresconfigunit.pas
2021-11-16 20:58:25 +01:00

465 lines
15 KiB
ObjectPascal
Executable file

unit frmStructuresConfigUnit;
{$MODE Delphi}
{
Note: The "Selected" part has been removed
}
interface
uses
{$ifdef darwin}
macport,
{$endif}
{$ifdef windows}
windows,
{$endif}
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ComCtrls, StdCtrls, ExtCtrls, registry, fontSaveLoadRegistry, betterControls;
type
{ TfrmStructuresConfig }
TfrmStructuresConfig = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
cbAutoCreate: TCheckBox;
cbAutoDestroyLocal: TCheckBox;
cbAutoFillGaps: TCheckBox;
cbPositionAddressesOverColumns: TCheckBox;
cbDefaultHex: TCheckBox;
cbDoNotSaveLocal: TCheckBox;
cbAutoGuessCustomTypes: TCheckBox;
ColorDialog1: TColorDialog;
comboBackground: TComboBox;
edtMaxAutoExpandLevel: TEdit;
edtAutostructsize: TEdit;
FontDialog1: TFontDialog;
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;
Panel4: TPanel;
Panel5: TPanel;
procedure Button1Click(Sender: TObject);
procedure Button3Click(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;
fcustomfont: boolean;
// 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;
property customfont: boolean read fcustomfont;
end;
var
frmStructuresConfig: TfrmStructuresConfig;
implementation
uses mainunit2;
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;
else
result:=defaulttext;
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\'+strCheatEngine+'\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);
reg.writeBool('Position Addresses Over Columns', self.cbPositionAddressesOverColumns.checked);
if customfont then
begin
if Reg.OpenKey('\Software\'+strCheatEngine+'\DissectData\Font'+darkmodestring,true) then
SaveFontToRegistry(groupbox1.Font, reg);
end;
end;
finally
reg.free;
end;
modalresult:=mrok;
end;
procedure TfrmStructuresConfig.Button3Click(Sender: TObject);
var
i: integer;
{$ifdef windows}
cbi: TComboboxInfo;
{$endif}
begin
fontdialog1.font.Assign(groupbox1.Font);
if fontdialog1.Execute then
begin
groupbox1.font.Assign(fontdialog1.font);
groupbox1.AutoSize:=false;
groupbox1.AutoSize:=true;
autosize:=false;
autosize:=true;
{$ifdef windows}
cbi.cbSize:=sizeof(cbi);
if GetComboBoxInfo(comboBackground.Handle, @cbi) then
begin
i:=cbi.rcButton.Bottom-cbi.rcButton.Top;
panel5.autosize:=false;
panel5.clientheight:=i;
end;
{$endif}
fcustomfont:=true;
end;
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\'+strCheatEngine+'\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');
if reg.ValueExists('Position Addresses Over Columns') then cbPositionAddressesOverColumns.checked:=reg.ReadBool('Position Addresses Over Columns');
if Reg.OpenKey('\Software\'+strCheatEngine+'\DissectData\Font'+darkmodestring,false) then
begin
LoadFontFromRegistry(groupbox1.Font,reg);
fcustomfont:=true;
end;
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.