Einzelnen Beitrag anzeigen

mojo777

Registriert seit: 10. Sep 2003
402 Beiträge
 
#3

Re: Überschreiben von Feldern in OOP

  Alt 9. Mai 2007, 23:25
hi sh17,
habe nicht sofort antworten können. musste ein wenig rumexperimentieren.

habe ersteinmal deinen ersten tipp ausprobiert.
stoße dabei aber auf schwierigkeiten.

habe nun die Funktion getPointerByUid(uid:Integer) umgeschrieben und
der Rückgabewert ist nun
Result:=self.Liste.List[i-1]; wobei Liste:TobjectList
es wird auch ein Pointer zurückgegeben.
ich kann ihn aber nicht typisieren.

beim Aufruf
Delphi-Quellcode:
(...)
_prod:^TProdukt;
begin
_prod:=produkte.getPointerByUid(1);
showmessage(_prod.name);
end;
kommt ein access violation...
ich brauche aber unbedingt den pointer zu diesem objekt. sonst laufen die berechnungen alle durcheinander...


würde mich freuen, wenn du mir auch hier ein paar tipps geben könntest.
werde bald sobald ich ein bisschen zeit habe auch mal die anderen möglichkeiten genauer anschauen.

danke schon jetzt!

Gruß

EDIT:
hmmm.. habs glaub ich mit
Delphi-Quellcode:
function TItemListe.getPointerByUid(uid:Integer):Pointer;
  var i:INteger;
  erg:TItem;
  begin
  for i:=1 to self.Liste.Count do
    begin
    if (self.Liste.Items[i-1] as TItem).uid=uid then
      begin
      erg:=(self.Liste.Items[i-1] as TItem);
      Result:=@erg; // Items[i-1] as TItem);
      exit;
      end;
    end;
  //Result:=nil;
  raise ERangeError.Create('Kein ItemListeneintrag gefunden! '+#13+'UID: '+IntToStr(uid));
  end;
hinbekommen... muss ich aber etwas genauer testen ob ich mit dem pointer doch nicht auf kopierte instanzen zugreife....
Muh macht die kUh
  Mit Zitat antworten Zitat