Einzelnen Beitrag anzeigen

Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#1

TList.sort(@nirvana) warum will TList.sort() nicht wie ich?

  Alt 28. Nov 2005, 12:29
hi @ all,

ich habe eine Liste (TObjectList);

bei dieser liste rufe ich irgendwann Liste.sort (<- ist standard von TList; brauch nur ne funk und dann passt das) auf;
Nur mal so nebenbei: TCmd ist ein Obj abegleitet von TObject; Rechtprimitiv... wollte bloß keine record nehmen ^^

Code:
function elementSort(Item1, Item2: Pointer): Integer;
var
  res : Integer;
  obj1, obj2  : TCmd;

begin
  res := 1;

  obj2  := TCmd(item2^);
  obj1  := TCmd(Item1^);

  if ((obj1.priority < obj2.priority) and
      (obj1.processed = cmsPending)) then
    res := -1;

  result := res;
end;

procedure TForm1.OnWasWeissIch(foobar : TObject);
begin
  list.sort(@elementSort);
end;
So 1. darf elementSort keine funktion der klasse TForm1 sein... (Sonst passt das nicht; hmm villeicht, weil methoden von objekten in delphi nicht statisch seien können? Bzw. könne Sie das überhaupt und wenn ja wie? aber das mal nur so nebenbei... **das ist mal wieder ne super frage für Luckie ^^)

2. Bekomme ich beim casten von item1 auf obj1 immer eine AccessViolation... warum das?; Die daten in der Liste an sich sehen gut aus... (Keine seltsamen unsinnigen Pointer oder so)

Wenn ich das fieh debuggen will, und in die obj1, obj2 rein schauen will, kann es das nicht, weil die funktion ja gar nicht zum objekt gehört, sondern eine statische "Unit"-Prozedure ist (**unwissenheit + dünnes eis... gibt es so was überhaupt?)

So weit so gut.. Ich dachte mir da bemühe ich mal die Hilfe und schau wie die das machen:

So und nun wird es kriminell:

Code:
function CompareNames(Item1, Item2: Pointer): Integer;
begin
  Result := CompareText((Item1 as TComponent).Name, (Item2 as TComponent).Name);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  List1.Sort(@CompareText);
end;
von meinem verständnis her, wird hier die methode CompareNames, die man extra geschreiben hat, gar nicht benutzt?!
Weil der pointer der "Methode" die das Sortier-Kreterium ausrechnet ist ja hier CompareText und nicht CompareNames...
Passt durch Zufall auch... aber?!

Oder bin ich hier auf einem völlig falschen Dampfer?"

Hat da mal wer ne idee oder einen Anstroß für mich!?

thx & cya
Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat