OK, also ich denke wir können das damit abschließen,
ABER seht ihr da irgendeine alternative Möglichkeit mit, (nennen wir es mal Objekte) mit Objekten rechnen Operationen durchzuführen, und im Hintergrund
jedem Objekt eine Referenzen auf andere Objekte zu halten?
Ohne z.b. variable.wert!
Bisher hab ich das so ähnlich gemacht:
Delphi-Quellcode:
unit Unit1;
interface
uses
Winapi.Windows,
Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
Vcl.StdCtrls, System.Generics.Collections;
type
TVarIntX =
record
ValuePtr: PInteger;
Objekt: TObject;
end;
TVarInt_List = TList<TVarIntX>;
TForm1 =
class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
TestInt: integer;
ListTest: TVarInt_List;
procedure Test;
function FindObjekt(varptr: PInteger): TObject;
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.FindObjekt(varptr: PInteger): TObject;
var i:integer;
v:TVarIntX;
begin
result:=nil;
for I := 0
to ListTest.Count-1
do
begin
v:=ListTest[i];
if v.ValuePtr=varptr
then
begin
result:=v.Objekt;
break;
end;
end;
end;
procedure TForm1.Test;
var
v: TVarIntX;
o:Tobject;
begin
// initialisieren..
v.ValuePtr := addr(TestInt);
v.Objekt := self;
ListTest.Add(v);
// ------------------
TestInt := 100;
TestInt := TestInt*2;
TestInt := TestInt+200;
//jetzt zugeordnetes objekt holen für irgendwas...
o:=FindObjekt(addr(TestInt));
if Assigned(o)
and (o
is TForm)
then
(o
as TForm).Caption:='
test';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListTest := TList<TVarIntX>.create();
Test();
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
ListTest.Free;
end;
end.