Implement dropdown list capability to memory records

This commit is contained in:
cheatengine@gmail.com 2013-10-24 23:00:50 +00:00
parent ec3f0a7052
commit 12bc23f339
14 changed files with 690 additions and 145 deletions

View File

@ -968,7 +968,7 @@ object MainForm: TMainForm
TabOrder = 20
object Logo: TImage
Cursor = crHandPoint
Left = 0
Left = 1
Height = 66
Top = 0
Width = 50
@ -1519,6 +1519,10 @@ object MainForm: TMainForm
ShortCut = 16456
OnClick = SetHotkey1Click
end
object miSetDropdownOptions: TMenuItem
Caption = 'Set/Change dropdown selection options'
OnClick = miSetDropdownOptionsClick
end
object Freezealladdresses2: TMenuItem
Caption = 'Toggle Selected Records'
GroupIndex = 2

View File

@ -106,6 +106,7 @@ TMAINFORM.MIZEROTERMINATE.CAPTION=Zero-Terminate string
TMAINFORM.MISHOWASBINARY.CAPTION=Show as binary
TMAINFORM.MICHANGECOLOR.CAPTION=Change Color
TMAINFORM.SETHOTKEY1.CAPTION=Assign Hotkey
TMAINFORM.MISETDROPDOWNOPTIONS.CAPTION=Set/Change dropdown selection options
TMAINFORM.FREEZEALLADDRESSES2.CAPTION=Toggle Selected Records
TMAINFORM.MIFREEZEPOSITIVE.CAPTION=Freeze Positive
TMAINFORM.MIFREEZENEGATIVE.CAPTION=Freeze Negative

View File

@ -22,7 +22,8 @@ uses
vmxfunctions, FileUtil, networkInterfaceApi, networkconfig, d3dhookUnit, PNGcomn,
FPimage, byteinterpreter, frmgroupscanalgoritmgeneratorunit, vartypestrings,
groupscancommandparser, GraphType, IntfGraphics, RemoteMemoryManager,
DBK64SecondaryLoader, savedscanhandler, debuggertypedefinitions, networkInterface;
DBK64SecondaryLoader, savedscanhandler, debuggertypedefinitions, networkInterface,
FrmMemoryRecordDropdownSettingsUnit;
//the following are just for compatibility
@ -215,6 +216,7 @@ type
MenuItem1: TMenuItem;
MenuItem10: TMenuItem;
MenuItem11: TMenuItem;
miSetDropdownOptions: TMenuItem;
miSave: TMenuItem;
miSnapshothandler: TMenuItem;
miSetupSnapshotKeys: TMenuItem;
@ -442,6 +444,7 @@ type
procedure mi3dClick(Sender: TObject);
procedure miChangeDisplayTypeClick(Sender: TObject);
procedure miOpenFileClick(Sender: TObject);
procedure miSetDropdownOptionsClick(Sender: TObject);
procedure miSetupSnapshotKeysClick(Sender: TObject);
procedure miShowAsSignedClick(Sender: TObject);
procedure miShowCustomTypeDebugClick(Sender: TObject);
@ -2961,6 +2964,12 @@ begin
openProcessEpilogue(oldprocessname, oldprocess, oldprocesshandle);
end;
procedure TMainForm.miSetDropdownOptionsClick(Sender: TObject);
begin
if addresslist.selectedrecord<>nil then
TFrmMemoryRecordDropdownSettings.create(addresslist.SelectedRecord).showmodal;
end;
procedure TMainForm.miShowAsSignedClick(Sender: TObject);
var
@ -6030,6 +6039,8 @@ begin
miUndoValue.Visible := (addresslist.selectedRecord <> nil) and
(addresslist.selectedRecord.canUndo);
miSetDropdownOptions.visible:=addresslist.selcount > 0;
end;
procedure TMainForm.Unfreezealladdresses1Click(Sender: TObject);

View File

@ -95,6 +95,11 @@ type
fisGroupHeader: Boolean; //set if it's a groupheader, only the description matters then
fIsReadableAddress: boolean;
fDropDownList: Tstringlist;
fDropDownReadOnly: boolean;
fDropDownDescriptionOnly: boolean;
fonactivate, fondeactivate: TMemoryRecordActivateEvent;
fOnDestroy: TNotifyEvent;
function getByteSize: integer;
@ -124,6 +129,10 @@ type
procedure setID(i: integer);
function getIndex: integer;
function getParent: TMemoryRecord;
function getDropDownCount: integer;
function getDropDownValue(index: integer): string;
function getDropDownDescription(index: integer): string;
public
@ -189,6 +198,8 @@ type
procedure getXMLNode(node: TDOMNode; selectedOnly: boolean);
procedure setXMLnode(CheatEntry: TDOMNode);
function getCurrentDropDownIndex: integer;
procedure SetVisibleChildrenState;
constructor Create(AOwner: TObject);
@ -222,6 +233,12 @@ type
property ShowAsSigned: boolean read getShowAsSigned write setShowAsSigned;
property Options: TMemrecOptions read fOptions write setOptions;
property CustomTypeName: string read fCustomTypeName write setCustomTypeName;
property DropDownList: TStringlist read fDropDownList;
property DropDownReadOnly: boolean read fDropDownReadOnly write fDropDownReadOnly;
property DropDownDescriptionOnly: boolean read fDropDownDescriptionOnly write fDropDownDescriptionOnly;
property DropDownCount: integer read getDropDownCount;
property DropDownValue[index:integer]: string read getDropDownValue;
property DropDownDescription[index:integer]: string read getDropDownDescription;
property Parent: TMemoryRecord read getParent;
property OnActivate: TMemoryRecordActivateEvent read fOnActivate write fOnActivate;
property OnDeactivate: TMemoryRecordActivateEvent read fOnDeActivate write fOndeactivate;
@ -296,6 +313,37 @@ end;
{---------------------------------MemoryRecord---------------------------------}
function TMemoryRecord.getDropDownCount: integer;
begin
result:=fDropDownList.count;
end;
function TMemoryRecord.getDropDownValue(index: integer): string;
begin
result:='';
if index<DropDownCount then
result:=copy(fDropDownList[index], 1, pos(':', fDropDownList[index])-1);
end;
function TMemoryRecord.getDropDownDescription(index: integer): string;
begin
result:='';
if index<DropDownCount then
result:=copy(fDropDownList[index], pos(':', fDropDownList[index])+1, length(fDropDownList[index]));
end;
function TMemoryRecord.getCurrentDropDownIndex: integer;
var i: integer;
begin
result:=-1;
for i:=0 to DropDownCount-1 do
begin
if lowercase(Value)=lowercase(DropDownValue[i]) then
result:=i;
end;
end;
function TMemoryRecord.getChildCount: integer;
begin
result:=0;
@ -332,6 +380,7 @@ begin
fColor:=clWindowText;
hotkeylist:=tlist.create;
fDropDownList:=tstringlist.create;
foptions:=[];
@ -369,6 +418,9 @@ begin
if treenode<>nil then
treenode.free;
if fDropDownList<>nil then
freeandnil(fDropDownList);
inherited Destroy;
end;
@ -488,6 +540,24 @@ begin
end;
tempnode:=CheatEntry.FindNode('DropDownList');
if tempnode<>nil then
begin
fDropDownList.Text:=tempnode.textcontent;
if tempnode.HasAttributes then
begin
a:=tempnode.Attributes.GetNamedItem('DescriptionOnly');
if (a<>nil) and (a.TextContent='1') then
DropDownDescriptionOnly:=true;
a:=tempnode.Attributes.GetNamedItem('ReadOnly');
if (a<>nil) and (a.TextContent='1') then
DropDownReadOnly:=true;
end;
end;
tempnode:=CheatEntry.FindNode('ShowAsHex');
if tempnode<>nil then
fshowashex:=tempnode.textcontent='1';
@ -748,6 +818,8 @@ var
a:TDOMAttr;
s: ansistring;
ddl: TDOMNode;
begin
if selectedonly then
begin
@ -804,6 +876,26 @@ begin
end;
if DropDownList.Count>0 then
begin
ddl:=cheatEntry.AppendChild(doc.CreateElement('DropDownList'));
ddl.TextContent:=DropDownList.Text;
if DropDownDescriptionOnly then
begin
a:=doc.CreateAttribute('DescriptionOnly');
a.TextContent:='1';
ddl.Attributes.SetNamedItem(a);
end;
if DropDownReadOnly then
begin
a:=doc.CreateAttribute('ReadOnly');
a.TextContent:='1';
ddl.Attributes.SetNamedItem(a);
end;
end;
if showAsHex then
cheatEntry.AppendChild(doc.CreateElement('ShowAsHex')).TextContent:='1';

View File

@ -14,7 +14,7 @@ uses windows, forms, LCLIntf,registry, SysUtils,AdvancedOptionsUnit,CommentsUnit
comctrls,dom, xmlread,xmlwrite, FileUtil, ceguicomponents, zstream, luafile, disassemblerComments;
var CurrentTableVersion: dword=16;
var CurrentTableVersion: dword=17;
procedure protecttrainer(filename: string);
procedure unprotecttrainer(filename: string; stream: TStream);
procedure SaveTable(Filename: string; protect: boolean=false);

View File

@ -7,7 +7,7 @@ interface
uses
LCLIntf, LCLType, Classes, SysUtils, controls, stdctrls, comctrls, ExtCtrls, graphics,
math, MemoryRecordUnit, FPCanvas, cefuncproc, newkernelhandler, menus,dom,
XMLRead,XMLWrite, symbolhandler, AddresslistEditor;
XMLRead,XMLWrite, symbolhandler, AddresslistEditor, inputboxtopunit, frmMemrecComboboxUnit;
type
TTreeviewWithScroll=class(TTreeview)
@ -70,7 +70,7 @@ type
// procedure TreeviewKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure EditorDoubleclick(sender: tobject); //callback
procedure MultiEdit(value: string);
procedure MultiEdit(memrec: Tmemoryrecord);
procedure descriptiondblclick(node: TTreenode);
procedure addressdblclick(node: TTreenode);
@ -941,16 +941,41 @@ begin
end;
procedure Taddresslist.MultiEdit(value: string);
procedure Taddresslist.MultiEdit(memrec: TMemoryrecord);
var
someerror: boolean;
allError: boolean;
i: integer;
value: string;
canceled: boolean;
list: TStringList;
frmMemrecCombobox: TfrmMemrecCombobox;
begin
value:=AnsiToUtf8(value);
if InputQuery(rsChangeValue, rsWhatValueToChangeThisTo, value) then
if memrec.DropDownCount=0 then
begin
value:=AnsiToUtf8(memrec.value);
canceled:=not InputQuery(rsChangeValue, rsWhatValueToChangeThisTo, value);
value:=Utf8ToAnsi(value);
end
else
begin
frmMemrecCombobox:=TfrmMemrecCombobox.Create(memrec);
canceled:=frmMemrecCombobox.showmodal<>mrok;
value:=frmMemrecCombobox.value;
frmMemrecCombobox.free;
end;
if not canceled then
begin
allError:=true;
someError:=false;
@ -973,7 +998,7 @@ end;
procedure TAddresslist.EditorDoubleclick(sender: tobject);
begin
multiedit(TAddressListEditor(sender).memrec.Value);
multiedit(TAddressListEditor(sender).memrec);
end;
procedure TAddresslist.valuedblclick(node: TTreenode);
@ -1007,19 +1032,20 @@ begin
end;
//multiple selections, use an input box for this
multiedit(value);
multiedit(memrec);
// end;
end;
procedure TAddresslist.ValueClick(node: TTreenode);
var memrec: TMemoryrecord;
begin
if selcount<=1 then
memrec:=TMemoryRecord(node.data);
if (selcount<=1) and (memrec.DropDownList.count=0) then
begin
memrec:=TMemoryRecord(node.data);
if AddressListEditor<>nil then
freeandnil(AddressListEditor);

View File

@ -25,7 +25,7 @@
<AutoIncrementBuild Value="True"/>
<MajorVersionNr Value="6"/>
<MinorVersionNr Value="3"/>
<BuildNr Value="3561"/>
<BuildNr Value="3568"/>
<Language Value=""/>
<CharSet Value=""/>
<StringTable CompanyName="Cheat Engine" FileDescription="Cheat Engine" ProductVersion="6.3"/>
@ -162,15 +162,17 @@
<PackageName Value="LCL"/>
</Item5>
</RequiredPackages>
<Units Count="306">
<Units Count="311">
<Unit0>
<Filename Value="cheatengine.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="cheatengine"/>
<WindowIndex Value="1"/>
<TopLine Value="167"/>
<CursorPos X="1" Y="199"/>
<EditorIndex Value="12"/>
<WindowIndex Value="0"/>
<TopLine Value="173"/>
<CursorPos X="1" Y="200"/>
<UsageCount Value="211"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit0>
<Unit1>
@ -192,10 +194,10 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="MainUnit"/>
<EditorIndex Value="1"/>
<EditorIndex Value="2"/>
<WindowIndex Value="0"/>
<TopLine Value="5309"/>
<CursorPos X="20" Y="5312"/>
<TopLine Value="2966"/>
<CursorPos X="30" Y="2975"/>
<UsageCount Value="211"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
@ -373,10 +375,12 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="formsettingsunit"/>
<EditorIndex Value="6"/>
<WindowIndex Value="0"/>
<TopLine Value="900"/>
<CursorPos X="12" Y="915"/>
<TopLine Value="893"/>
<CursorPos X="56" Y="909"/>
<UsageCount Value="203"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit19>
<Unit20>
@ -431,12 +435,16 @@
<Filename Value="inputboxtopunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="InputboxTop"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="inputboxtopunit"/>
<EditorIndex Value="11"/>
<WindowIndex Value="0"/>
<TopLine Value="7"/>
<CursorPos X="1" Y="31"/>
<TopLine Value="19"/>
<CursorPos X="147" Y="34"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit24>
<Unit25>
@ -747,8 +755,9 @@
<Filename Value="OpenSave.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="OpenSave"/>
<EditorIndex Value="19"/>
<WindowIndex Value="0"/>
<TopLine Value="894"/>
<TopLine Value="895"/>
<CursorPos X="1" Y="910"/>
<ExtraEditorCount Value="1"/>
<ExtraEditor1>
@ -760,6 +769,7 @@
<Bookmarks Count="1">
<Item0 X="3" Y="946" ID="0"/>
</Bookmarks>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit51>
<Unit52>
@ -804,10 +814,13 @@
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="MemoryBrowserFormUnit"/>
<EditorIndex Value="10"/>
<WindowIndex Value="0"/>
<TopLine Value="1333"/>
<CursorPos X="25" Y="1343"/>
<TopLine Value="1590"/>
<CursorPos X="21" Y="1597"/>
<UsageCount Value="220"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit55>
<Unit56>
@ -1586,14 +1599,13 @@
<Filename Value="addresslist.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="addresslist"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="2"/>
<EditorIndex Value="7"/>
<WindowIndex Value="0"/>
<TopLine Value="1014"/>
<CursorPos X="15" Y="1019"/>
<TopLine Value="1092"/>
<CursorPos X="26" Y="960"/>
<UsageCount Value="203"/>
<Bookmarks Count="1">
<Item0 X="35" Y="1153" ID="8"/>
<Item0 X="1" Y="974" ID="8"/>
</Bookmarks>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
@ -1602,10 +1614,11 @@
<Filename Value="MemoryRecordUnit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="MemoryRecordUnit"/>
<EditorIndex Value="5"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="18"/>
<WindowIndex Value="0"/>
<TopLine Value="1578"/>
<CursorPos X="1" Y="1593"/>
<TopLine Value="813"/>
<CursorPos X="28" Y="894"/>
<ExtraEditorCount Value="1"/>
<ExtraEditor1>
<WindowIndex Value="0"/>
@ -1837,9 +1850,10 @@
<Filename Value="LuaHandler.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="LuaHandler"/>
<WindowIndex Value="1"/>
<TopLine Value="1"/>
<CursorPos X="44" Y="1956"/>
<EditorIndex Value="15"/>
<WindowIndex Value="0"/>
<TopLine Value="939"/>
<CursorPos X="17" Y="956"/>
<ExtraEditorCount Value="1"/>
<ExtraEditor1>
<WindowIndex Value="0"/>
@ -1847,6 +1861,7 @@
<CursorPos X="66" Y="4725"/>
</ExtraEditor1>
<UsageCount Value="200"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit142>
<Unit143>
@ -3144,7 +3159,7 @@
<WindowIndex Value="0"/>
<TopLine Value="147"/>
<CursorPos X="11" Y="163"/>
<UsageCount Value="22"/>
<UsageCount Value="17"/>
</Unit262>
<Unit263>
<Filename Value="cvconst.pas"/>
@ -3194,7 +3209,7 @@
<WindowIndex Value="1"/>
<TopLine Value="240"/>
<CursorPos X="3" Y="256"/>
<UsageCount Value="15"/>
<UsageCount Value="10"/>
</Unit267>
<Unit268>
<Filename Value="lastdisassembledata.pas"/>
@ -3228,31 +3243,33 @@
</Unit270>
<Unit271>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\win\wininc\defines.inc"/>
<EditorIndex Value="1"/>
<WindowIndex Value="0"/>
<TopLine Value="3055"/>
<CursorPos X="6" Y="3069"/>
<UsageCount Value="14"/>
<TopLine Value="5134"/>
<CursorPos X="6" Y="5148"/>
<UsageCount Value="38"/>
<Loaded Value="True"/>
</Unit271>
<Unit272>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\objpas\classes\classesh.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="96"/>
<CursorPos X="3" Y="110"/>
<UsageCount Value="39"/>
<UsageCount Value="34"/>
</Unit272>
<Unit273>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\win\wininc\func.inc"/>
<WindowIndex Value="1"/>
<TopLine Value="143"/>
<CursorPos X="10" Y="159"/>
<UsageCount Value="14"/>
<UsageCount Value="9"/>
</Unit273>
<Unit274>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\inc\objpash.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="176"/>
<CursorPos X="23" Y="192"/>
<UsageCount Value="21"/>
<UsageCount Value="16"/>
</Unit274>
<Unit275>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\win\winsock2.pp"/>
@ -3260,28 +3277,28 @@
<WindowIndex Value="0"/>
<TopLine Value="44"/>
<CursorPos X="3" Y="60"/>
<UsageCount Value="34"/>
<UsageCount Value="29"/>
</Unit275>
<Unit276>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\objpas\sysutils\syswideh.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="14"/>
<CursorPos X="10" Y="41"/>
<UsageCount Value="22"/>
<UsageCount Value="17"/>
</Unit276>
<Unit277>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\objpas\sysutils\finah.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="15"/>
<CursorPos X="10" Y="31"/>
<UsageCount Value="23"/>
<UsageCount Value="18"/>
</Unit277>
<Unit278>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\objpas\sysutils\fina.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="340"/>
<CursorPos X="3" Y="346"/>
<UsageCount Value="23"/>
<UsageCount Value="18"/>
</Unit278>
<Unit279>
<Filename Value="frmpointerscanconnectdialogunit.pas"/>
@ -3301,7 +3318,7 @@
<WindowIndex Value="0"/>
<TopLine Value="337"/>
<CursorPos X="10" Y="312"/>
<UsageCount Value="18"/>
<UsageCount Value="13"/>
</Unit280>
<Unit281>
<Filename Value="C:\lazarus\fpc\2.6.2\source\packages\fcl-net\src\resolve.pp"/>
@ -3309,7 +3326,7 @@
<WindowIndex Value="1"/>
<TopLine Value="183"/>
<CursorPos X="5" Y="201"/>
<UsageCount Value="106"/>
<UsageCount Value="101"/>
</Unit281>
<Unit282>
<Filename Value="pagemap.pas"/>
@ -3360,14 +3377,14 @@
<WindowIndex Value="1"/>
<TopLine Value="523"/>
<CursorPos X="3" Y="539"/>
<UsageCount Value="228"/>
<UsageCount Value="223"/>
</Unit286>
<Unit287>
<Filename Value="C:\lazarus\lcl\include\winapih.inc"/>
<WindowIndex Value="1"/>
<TopLine Value="197"/>
<CursorPos X="10" Y="213"/>
<UsageCount Value="227"/>
<UsageCount Value="222"/>
</Unit287>
<Unit288>
<Filename Value="C:\lazarus\lcl\lclintf.pas"/>
@ -3375,7 +3392,7 @@
<WindowIndex Value="1"/>
<TopLine Value="130"/>
<CursorPos X="1" Y="147"/>
<UsageCount Value="202"/>
<UsageCount Value="197"/>
</Unit288>
<Unit289>
<Filename Value="C:\lazarus\fpc\2.6.2\source\packages\winunits-jedi\src\jwawindows.pas"/>
@ -3383,14 +3400,14 @@
<WindowIndex Value="0"/>
<TopLine Value="676"/>
<CursorPos X="3" Y="692"/>
<UsageCount Value="181"/>
<UsageCount Value="176"/>
</Unit289>
<Unit290>
<Filename Value="C:\lazarus\fpc\2.6.2\source\rtl\win\wininc\ascdef.inc"/>
<WindowIndex Value="1"/>
<TopLine Value="109"/>
<CursorPos X="10" Y="125"/>
<UsageCount Value="178"/>
<UsageCount Value="173"/>
</Unit290>
<Unit291>
<Filename Value="frmmergepointerscanresultsettingsunit.pas"/>
@ -3410,7 +3427,7 @@
<WindowIndex Value="0"/>
<TopLine Value="202"/>
<CursorPos X="10" Y="218"/>
<UsageCount Value="22"/>
<UsageCount Value="17"/>
</Unit292>
<Unit293>
<Filename Value="addresslisteditor.pas"/>
@ -3418,19 +3435,21 @@
<UnitName Value="AddresslistEditor"/>
<EditorIndex Value="0"/>
<WindowIndex Value="0"/>
<TopLine Value="47"/>
<CursorPos X="5" Y="41"/>
<UsageCount Value="38"/>
<TopLine Value="190"/>
<CursorPos X="1" Y="218"/>
<UsageCount Value="88"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit293>
<Unit294>
<Filename Value="C:\lazarus\lcl\stdctrls.pp"/>
<UnitName Value="StdCtrls"/>
<EditorIndex Value="4"/>
<WindowIndex Value="0"/>
<TopLine Value="718"/>
<CursorPos X="25" Y="730"/>
<TopLine Value="320"/>
<CursorPos X="14" Y="333"/>
<UsageCount Value="12"/>
<Loaded Value="True"/>
</Unit294>
<Unit295>
<Filename Value="C:\lazarus\lcl\controls.pp"/>
@ -3438,15 +3457,17 @@
<WindowIndex Value="0"/>
<TopLine Value="2542"/>
<CursorPos X="10" Y="2557"/>
<UsageCount Value="11"/>
<UsageCount Value="6"/>
</Unit295>
<Unit296>
<Filename Value="C:\lazarus\lcl\graphics.pp"/>
<UnitName Value="Graphics"/>
<EditorIndex Value="14"/>
<WindowIndex Value="0"/>
<TopLine Value="1156"/>
<CursorPos X="19" Y="1172"/>
<UsageCount Value="10"/>
<TopLine Value="1152"/>
<CursorPos X="15" Y="1166"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit296>
<Unit297>
<Filename Value="C:\lazarus\lcl\graphtype.pp"/>
@ -3454,7 +3475,7 @@
<WindowIndex Value="0"/>
<TopLine Value="208"/>
<CursorPos X="3" Y="39"/>
<UsageCount Value="10"/>
<UsageCount Value="5"/>
</Unit297>
<Unit298>
<Filename Value="C:\lazarus\lcl\lcltype.pp"/>
@ -3462,28 +3483,30 @@
<WindowIndex Value="0"/>
<TopLine Value="550"/>
<CursorPos X="3" Y="420"/>
<UsageCount Value="10"/>
<UsageCount Value="5"/>
</Unit298>
<Unit299>
<Filename Value="C:\lazarus\lcl\include\wincontrol.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="5551"/>
<CursorPos X="23" Y="5562"/>
<UsageCount Value="10"/>
<UsageCount Value="5"/>
</Unit299>
<Unit300>
<Filename Value="C:\lazarus\lcl\include\control.inc"/>
<EditorIndex Value="13"/>
<WindowIndex Value="0"/>
<TopLine Value="4149"/>
<CursorPos X="3" Y="4158"/>
<UsageCount Value="10"/>
<CursorPos X="1" Y="4172"/>
<UsageCount Value="34"/>
<Loaded Value="True"/>
</Unit300>
<Unit301>
<Filename Value="C:\lazarus\lcl\include\customedit.inc"/>
<WindowIndex Value="0"/>
<TopLine Value="100"/>
<CursorPos X="45" Y="124"/>
<UsageCount Value="9"/>
<UsageCount Value="4"/>
</Unit301>
<Unit302>
<Filename Value="C:\lazarus\lcl\widgetset\wsstdctrls.pp"/>
@ -3491,157 +3514,216 @@
<WindowIndex Value="0"/>
<TopLine Value="490"/>
<CursorPos X="42" Y="514"/>
<UsageCount Value="9"/>
<UsageCount Value="4"/>
</Unit302>
<Unit303>
<Filename Value="C:\lazarus\lcl\comctrls.pp"/>
<UnitName Value="ComCtrls"/>
<EditorIndex Value="3"/>
<EditorIndex Value="16"/>
<WindowIndex Value="0"/>
<TopLine Value="3122"/>
<CursorPos X="14" Y="3134"/>
<UsageCount Value="10"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit303>
<Unit304>
<Filename Value="C:\lazarus\lcl\include\canvas.inc"/>
<EditorIndex Value="6"/>
<EditorIndex Value="20"/>
<WindowIndex Value="0"/>
<TopLine Value="1730"/>
<CursorPos X="1" Y="1745"/>
<UsageCount Value="10"/>
<TopLine Value="1178"/>
<CursorPos X="1" Y="1187"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit304>
<Unit305>
<Filename Value="C:\lazarus\lcl\include\headercontrol.inc"/>
<EditorIndex Value="4"/>
<EditorIndex Value="17"/>
<WindowIndex Value="0"/>
<TopLine Value="485"/>
<CursorPos X="1" Y="502"/>
<UsageCount Value="10"/>
<UsageCount Value="36"/>
<Loaded Value="True"/>
</Unit305>
<Unit306>
<Filename Value="frmmemoryrecorddropdownsettingsunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="FrmMemoryRecordDropdownSettings"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="FrmMemoryRecordDropdownSettingsUnit"/>
<EditorIndex Value="3"/>
<WindowIndex Value="0"/>
<TopLine Value="1"/>
<CursorPos X="1" Y="1"/>
<UsageCount Value="49"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit306>
<Unit307>
<Filename Value="addresslisteditorcombobox.pas"/>
<UnitName Value="AddresslistEditorCombobox"/>
<WindowIndex Value="0"/>
<TopLine Value="166"/>
<CursorPos X="1" Y="218"/>
<UsageCount Value="21"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit307>
<Unit308>
<Filename Value="C:\lazarus\lcl\dialogs.pp"/>
<UnitName Value="Dialogs"/>
<EditorIndex Value="9"/>
<WindowIndex Value="0"/>
<TopLine Value="507"/>
<CursorPos X="10" Y="521"/>
<UsageCount Value="11"/>
<Loaded Value="True"/>
</Unit308>
<Unit309>
<Filename Value="frmmemreccomboboxunit.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="frmMemrecCombobox"/>
<ResourceBaseClass Value="Form"/>
<UnitName Value="frmMemrecComboboxUnit"/>
<EditorIndex Value="8"/>
<WindowIndex Value="0"/>
<TopLine Value="72"/>
<CursorPos X="24" Y="97"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit309>
<Unit310>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<EditorIndex Value="5"/>
<WindowIndex Value="0"/>
<TopLine Value="762"/>
<CursorPos X="13" Y="786"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit310>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1520" Column="1" TopLine="1499"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="157" Column="33" TopLine="133"/>
</Position1>
<Position2>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1527" Column="1" TopLine="1513"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="161" Column="19" TopLine="137"/>
</Position2>
<Position3>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1531" Column="1" TopLine="1513"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="163" Column="9" TopLine="139"/>
</Position3>
<Position4>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1533" Column="1" TopLine="1513"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="165" Column="52" TopLine="141"/>
</Position4>
<Position5>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1535" Column="1" TopLine="1513"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="170" Column="33" TopLine="146"/>
</Position5>
<Position6>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1537" Column="1" TopLine="1514"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="172" Column="19" TopLine="148"/>
</Position6>
<Position7>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1553" Column="1" TopLine="1539"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="174" Column="14" TopLine="150"/>
</Position7>
<Position8>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1592" Column="1" TopLine="1578"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="176" Column="32" TopLine="152"/>
</Position8>
<Position9>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="1593" Column="1" TopLine="1578"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="11" Column="90" TopLine="3"/>
</Position9>
<Position10>
<Filename Value="C:\lazarus\lcl\include\canvas.inc"/>
<Caret Line="1744" Column="1" TopLine="1730"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="257" Column="23" TopLine="233"/>
</Position10>
<Position11>
<Filename Value="C:\lazarus\lcl\include\canvas.inc"/>
<Caret Line="1745" Column="1" TopLine="1730"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="263" Column="29" TopLine="239"/>
</Position11>
<Position12>
<Filename Value="addresslist.pas"/>
<Caret Line="294" Column="1" TopLine="279"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="265" Column="48" TopLine="241"/>
</Position12>
<Position13>
<Filename Value="addresslist.pas"/>
<Caret Line="295" Column="1" TopLine="279"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="715" Column="40" TopLine="691"/>
</Position13>
<Position14>
<Filename Value="addresslist.pas"/>
<Caret Line="296" Column="1" TopLine="279"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="717" Column="16" TopLine="705"/>
</Position14>
<Position15>
<Filename Value="addresslist.pas"/>
<Caret Line="298" Column="1" TopLine="279"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="720" Column="38" TopLine="705"/>
</Position15>
<Position16>
<Filename Value="addresslist.pas"/>
<Caret Line="1162" Column="1" TopLine="1143"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="722" Column="21" TopLine="705"/>
</Position16>
<Position17>
<Filename Value="addresslist.pas"/>
<Caret Line="1500" Column="36" TopLine="1476"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="744" Column="41" TopLine="720"/>
</Position17>
<Position18>
<Filename Value="addresslist.pas"/>
<Caret Line="1484" Column="71" TopLine="1477"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="746" Column="16" TopLine="722"/>
</Position18>
<Position19>
<Filename Value="addresslist.pas"/>
<Caret Line="1748" Column="75" TopLine="1735"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="749" Column="39" TopLine="725"/>
</Position19>
<Position20>
<Filename Value="addresslist.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="751" Column="16" TopLine="727"/>
</Position20>
<Position21>
<Filename Value="addresslist.pas"/>
<Caret Line="58" Column="30" TopLine="36"/>
<Filename Value="C:\lazarus\lcl\include\customcombobox.inc"/>
<Caret Line="752" Column="13" TopLine="728"/>
</Position21>
<Position22>
<Filename Value="addresslist.pas"/>
<Caret Line="1123" Column="24" TopLine="1112"/>
<Filename Value="frmmemreccomboboxunit.pas"/>
<Caret Line="95" Column="18" TopLine="71"/>
</Position22>
<Position23>
<Filename Value="addresslist.pas"/>
<Caret Line="1481" Column="39" TopLine="1457"/>
<Filename Value="frmmemreccomboboxunit.pas"/>
<Caret Line="9" Column="35" TopLine="1"/>
</Position23>
<Position24>
<Filename Value="addresslist.pas"/>
<Caret Line="1490" Column="64" TopLine="1561"/>
<Filename Value="frmmemoryrecorddropdownsettingsunit.pas"/>
<Caret Line="52" Column="29" TopLine="40"/>
</Position24>
<Position25>
<Filename Value="addresslist.pas"/>
<Caret Line="1156" Column="35" TopLine="1140"/>
<Filename Value="frmmemoryrecorddropdownsettingsunit.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position25>
<Position26>
<Filename Value="addresslist.pas"/>
<Caret Line="1153" Column="1" TopLine="1140"/>
<Filename Value="OpenSave.pas"/>
<Caret Line="910" Column="1" TopLine="894"/>
</Position26>
<Position27>
<Filename Value="addresslist.pas"/>
<Caret Line="1154" Column="1" TopLine="1140"/>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="556" Column="25" TopLine="540"/>
</Position27>
<Position28>
<Filename Value="addresslist.pas"/>
<Caret Line="1156" Column="1" TopLine="1140"/>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="822" Column="6" TopLine="828"/>
</Position28>
<Position29>
<Filename Value="addresslist.pas"/>
<Caret Line="1157" Column="1" TopLine="1140"/>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="895" Column="10" TopLine="868"/>
</Position29>
<Position30>
<Filename Value="addresslist.pas"/>
<Caret Line="1158" Column="16" TopLine="1140"/>
<Filename Value="MemoryRecordUnit.pas"/>
<Caret Line="886" Column="14" TopLine="861"/>
</Position30>
</JumpHistory>
</ProjectOptions>

View File

@ -75,7 +75,8 @@ frmManualStacktraceConfigUnit, cvconst, NetworkDebuggerInterface,
DisassemblerArm, LastDisassembleData, elfsymbols, assemblerArm,
frmPointerscanConnectDialogUnit, PageMap, CELazySocket,
PointerscanNetworkCommands, frmpointerrescanconnectdialogunit,
frmMergePointerscanResultSettingsUnit, AddresslistEditor;
frmMergePointerscanResultSettingsUnit, AddresslistEditor,
FrmMemoryRecordDropdownSettingsUnit, frmMemrecComboboxUnit;
{$R cheatengine.res}
//{$R manifest.res} //lazarus now has this build in

Binary file not shown.

View File

@ -0,0 +1,90 @@
object FrmMemoryRecordDropdownSettings: TFrmMemoryRecordDropdownSettings
Left = 830
Height = 240
Top = 285
Width = 320
BorderStyle = bsDialog
Caption = 'Dropdown options'
ClientHeight = 240
ClientWidth = 320
OnClose = FormClose
Position = poScreenCenter
LCLVersion = '1.0.8.0'
object memoDropdownItems: TMemo
Left = 0
Height = 135
Top = 32
Width = 320
Align = alClient
ScrollBars = ssBoth
TabOrder = 0
WordWrap = False
end
object Label1: TLabel
Left = 0
Height = 16
Top = 0
Width = 320
Align = alTop
Caption = 'Leave empty for no dropdown list'
ParentColor = False
end
object Panel1: TPanel
Left = 0
Height = 35
Top = 205
Width = 320
Align = alBottom
BevelOuter = bvNone
ClientHeight = 35
ClientWidth = 320
TabOrder = 3
object btnOk: TButton
Left = 80
Height = 29
Top = 2
Width = 75
Caption = 'OK'
Default = True
OnClick = btnOkClick
TabOrder = 0
end
object btnCancel: TButton
Left = 163
Height = 29
Top = 2
Width = 75
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
object cbDisallowUserInput: TCheckBox
Left = 0
Height = 19
Top = 167
Width = 320
Align = alBottom
Caption = 'Disallow manual user input'
TabOrder = 1
end
object Label2: TLabel
Left = 0
Height = 16
Top = 16
Width = 320
Align = alTop
Caption = 'Format: Value:Description'
ParentColor = False
end
object cbOnlyShowDescription: TCheckBox
Left = 0
Height = 19
Top = 186
Width = 320
Align = alBottom
Caption = 'Only show the description part'
TabOrder = 2
end
end

View File

@ -0,0 +1,70 @@
unit FrmMemoryRecordDropdownSettingsUnit;
{$mode delphi}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, MemoryRecordUnit;
type
{ TFrmMemoryRecordDropdownSettings }
TFrmMemoryRecordDropdownSettings = class(TForm)
btnOk: TButton;
btnCancel: TButton;
cbDisallowUserInput: TCheckBox;
cbOnlyShowDescription: TCheckBox;
Label1: TLabel;
Label2: TLabel;
memoDropdownItems: TMemo;
Panel1: TPanel;
procedure btnOkClick(Sender: TObject);
procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
private
{ private declarations }
memrec: TMemoryrecord;
public
{ public declarations }
constructor create(memrec: TMemoryrecord);
end;
implementation
{$R *.lfm}
{ TFrmMemoryRecordDropdownSettings }
procedure TFrmMemoryRecordDropdownSettings.FormClose(Sender: TObject;
var CloseAction: TCloseAction);
begin
CloseAction:=cafree;
end;
procedure TFrmMemoryRecordDropdownSettings.btnOkClick(Sender: TObject);
begin
memrec.DropDownList.Assign(memoDropdownItems.Lines);
memrec.DropDownReadOnly:=cbDisallowUserInput.checked;
memrec.DropDownDescriptionOnly:=cbOnlyShowDescription.checked;
modalresult:=mrok;
end;
constructor TFrmMemoryRecordDropdownSettings.create(memrec: TMemoryrecord);
begin
inherited create(Application);
self.memrec:=memrec;
if memrec.DropDownList<>nil then
memoDropdownItems.Lines.AddStrings(memrec.DropDownList);
cbDisallowUserInput.checked:=memrec.DropDownReadOnly;
cbOnlyShowDescription.checked:=memrec.DropDownDescriptionOnly;
caption:='Dropdown options for '+memrec.description;
end;
end.

View File

@ -0,0 +1,62 @@
object frmMemrecCombobox: TfrmMemrecCombobox
Left = 449
Height = 81
Top = 268
Width = 243
BorderStyle = bsDialog
Caption = 'Change value'
ClientHeight = 81
ClientWidth = 243
OnDestroy = FormDestroy
Position = poScreenCenter
LCLVersion = '1.0.8.0'
object cbMemrecCombobox: TComboBox
Left = 0
Height = 23
Top = 16
Width = 243
Align = alTop
ItemHeight = 15
TabOrder = 0
end
object Label1: TLabel
Left = 0
Height = 16
Top = 0
Width = 243
Align = alTop
Caption = 'Change value to:'
ParentColor = False
end
object Panel1: TPanel
Left = 0
Height = 35
Top = 46
Width = 243
Align = alBottom
BevelOuter = bvNone
ClientHeight = 35
ClientWidth = 243
TabOrder = 1
object btnOk: TButton
Left = 40
Height = 29
Top = 2
Width = 75
Caption = 'OK'
Default = True
OnClick = btnOkClick
TabOrder = 0
end
object btnCancel: TButton
Left = 128
Height = 29
Top = 2
Width = 75
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 1
end
end
end

View File

@ -0,0 +1,4 @@
TFRMMEMRECCOMBOBOX.CAPTION=Change value
TFRMMEMRECCOMBOBOX.LABEL1.CAPTION=Change value to:
TFRMMEMRECCOMBOBOX.BTNOK.CAPTION=OK
TFRMMEMRECCOMBOBOX.BTNCANCEL.CAPTION=Cancel

View File

@ -0,0 +1,102 @@
unit frmMemrecComboboxUnit;
{$mode delphi}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ExtCtrls, MemoryRecordUnit, math;
type
{ TfrmMemrecCombobox }
TfrmMemrecCombobox = class(TForm)
btnCancel: TButton;
btnOk: TButton;
cbMemrecCombobox: TComboBox;
Label1: TLabel;
Panel1: TPanel;
procedure btnOkClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ private declarations }
valuelist: tstringlist;
memrec: TMemoryRecord;
function getValue: string;
public
{ public declarations }
value: string;
constructor create(memrec: TMemoryrecord);
property value: string read getValue;
end;
var
frmMemrecCombobox: TfrmMemrecCombobox;
implementation
{$R *.lfm}
procedure TfrmMemrecCombobox.FormDestroy(Sender: TObject);
begin
if valuelist<>nil then
freeandnil(valuelist);
end;
procedure TfrmMemrecCombobox.btnOkClick(Sender: TObject);
begin
if (cbMemrecCombobox.itemindex=-1) and memrec.DropDownReadOnly then
modalresult:=mrcancel //it was readonly and nothing was picked
else
modalresult:=mrok;
end;
function TfrmMemrecCombobox.getValue: string;
begin
if cbMemrecCombobox.itemindex<>-1 then
result:=valuelist[cbMemrecCombobox.itemindex]
else
result:=cbMemrecCombobox.Text;
end;
constructor TfrmMemrecCombobox.create(memrec: TMemoryrecord);
var i: integer;
maxwidth: integer;
begin
inherited create(application);
if memrec.DropDownReadOnly then
cbMemrecCombobox.style:=csDropDownList;
valuelist:=tstringlist.create;
for i:=0 to memrec.DropDownCount-1 do
begin
valuelist.add(memrec.DropDownValue[i]);
if memrec.DropDownDescriptionOnly then
cbMemrecCombobox.Items.Add(memrec.DropDownDescription[i])
else
cbMemrecCombobox.Items.add(memrec.DropDownValue[i]+' : '+memrec.DropDownDescription[i]);
end;
i:=memrec.getCurrentDropDownIndex;
if (i=-1) and (not memrec.DropDownReadOnly) then //not a known value
cbMemrecCombobox.Text:=memrec.value
else
cbMemrecCombobox.ItemIndex:=i;
self.memrec:=memrec;
cbMemrecCombobox.DropDownCount:=min(16, cbMemrecCombobox.items.count);
maxwidth:=width;
for i:=0 to cbMemrecCombobox.Items.Count-1 do
maxwidth:=max(maxwidth, cbMemrecCombobox.Canvas.TextWidth(cbMemrecCombobox.items[i]));
if maxwidth<>width then
width:=maxwidth+16;
end;
end.