Einzelnen Beitrag anzeigen

Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#7

Re: Objektinspektor Programmieren

  Alt 25. Nov 2005, 08:45
Wo ist denn jetzt eigentlich noch das Problem? Immernoch die Access Violations?

Theoretisch würde es reichen, wenn du

Delphi-Quellcode:
TEackItem = class
    name:string;
    typ:TETyp;
    int:pint;
    str:pstr;
    bol:pbol;
end;
In
Delphi-Quellcode:
TEackItem = class
    name:string;
    typ :TETyp;
    ptr : Pointer;
end;
änderst. Dann sparst du dir so viele Parameter bei Add und bist flexibler, wenn doch mal ein neuer Typ hinzukommt.

Schreiben würde dann in etwa so aussehen (Achtung ungetest):

Delphi-Quellcode:
procedure SetInteger(var Item: TEackItem; Int: Integer);
begin
  // Prüfen, ob es wirklich vom Typ Integer ist.
  Assert(Item.typ=etInteger);

  PInteger(Item.Ptr)^:=Int;
end;

procedure SetBoolean(var Item: TEackItem; Bool: Boolean);
begin
  // Prüfen, ob es wirklich vom Typ Boolean ist.
  Assert(Item.typ=etBoolean);

  PBoolean(Item.Ptr)^:=Bool;
end;

procedure SetString(var Item: TEackItem; Str: String);
begin
  // Prüfen, ob es wirklich vom Typ Integer ist.
  Assert(Item.typ=etString);

  PString(Item.Ptr)^:=Str;
end;
Lesen geht dann ähnlich:

Delphi-Quellcode:
function GetInteger(const Item: TEackItem): Integer;
begin
  // Prüfen, ob es wirklich vom Typ Integer ist.
  Assert(Item.typ=etInteger);

  result:=PInteger(Item.Ptr)^;
end;

procedure GetBoolean(const Item: TEackItem): Boolean;
begin
  // Prüfen, ob es wirklich vom Typ Boolean ist.
  Assert(Item.typ=etBoolean);

  result:=PBoolean(Item.Ptr)^;
end;

procedure GetString(constItem: TEackItem: string;
begin
  // Prüfen, ob es wirklich vom Typ Integer ist.
  Assert(Item.typ=etString);

  result:=PString(Item.Ptr)^;
end;
Bei Strings muss ich aber ehrlich sagen, dass ich mir nicht ganz sicher bin, ob es so funktioniert. Vielleicht erstmal mit Integer/Boolean probieren.

P.S: Hoffe das hilft
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat