Einzelnen Beitrag anzeigen

4dk2

Registriert seit: 4. Sep 2007
176 Beiträge
 
#8

AW: [XE3] Operator Overloading, Verhalten?

  Alt 21. Mär 2014, 07:25
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.
  Mit Zitat antworten Zitat