Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi ObjectList nach Datum sortieren (https://www.delphipraxis.net/107360-objectlist-nach-datum-sortieren.html)

Andreas L. 26. Jan 2008 13:21


ObjectList nach Datum sortieren
 
Hi,
ich versuche gerade die Items einer ObjectList nach Datum zu sortieren. Die Sortierroutine soll direkt beim hinzufügen eines Items aufgerufen werden. Erstmal mein Code:
Delphi-Quellcode:
function TCalcForm.Add(Value: TCalcFormValue):Integer;
var
  i: Integer;
begin
  fValues.Add(Value);
  fValues.Sort(CompareDate); //Fehler: [Pascal Fehler] CalcForm.pas(106): E2009 Inkompatible Typen: 'Reguläre Prozedur und Methodenzeiger'
  for i := 0 to fValues.Count -1 do //damit der Rückgabewert wieder dem ItemIndex des neuen Objekts entspricht
   begin
     if fValues[i] = Value then
       Result := i;
   end;
end;

function TCalcForm.CompareDate(Item1, Item2: Integer):Integer;
var
  Val1, Val2: TDateTime;
begin
  val1 := (fValues[Item1] as TCalcFormValue).Date;
  val2 := (fValues[Item2] as TCalcFormValue).Date;
  Result := CompareDate(Val1, Val2);
end;
Da es bei der ObjectList kein CustomSort gibt, dachte ich, dieses Sort könnte man genauso aufrufen wie hier: http://www.delphipraxis.net/internal...atum+sortieren

Die Delphi-Hilfe spuckt mir folgendes aus: procedure Sort(Compare: TListSortCompare);
Es gibt leider keinen Hilfeeintrag zu TListSortCompare. Wie komme ich trotzdem an mein Ziel?

marabu 26. Jan 2008 13:40

Re: ObjectList nach Datum sortieren
 
Hallo Andreas,

du darfst deine Sort-Funktion CompareDate() nicht als Methode der Form deklarieren.

Grüße vom marabu

Andreas L. 26. Jan 2008 13:44

Re: ObjectList nach Datum sortieren
 
Zitat:

Zitat von marabu
Hallo Andreas,

du darfst deine Sort-Funktion CompareDate() nicht als Methode der Form deklarieren.

Grüße vom marabu

Ok, jetzt kommt nur noch "[Pascal Fehler] CalcForm.pas(107): E2010 Inkompatible Typen: 'Pointer' und 'Integer'". Wie muss ich die CompareDate-Routine umschreiben?

marabu 26. Jan 2008 13:51

Re: ObjectList nach Datum sortieren
 
So wie dokumentiert:

Delphi-Quellcode:
function CompareDate(Item1, Item2: Pointer): Integer;
var
  Val1, Val2: TDateTime;
begin
  val1 := TCalcFormValue(Item1).Date;
  val2 := TCalcFormValue(Item1).Date;
  Result := DateUtils.CompareDate(Val1, Val2);
end;

bitsetter 26. Jan 2008 16:33

Re: ObjectList nach Datum sortieren
 
Zitat:

Zitat von marabu
So wie dokumentiert:

Delphi-Quellcode:
  val2 := TCalcFormValue(Item1).Date;

Hallo,

ein kleiner Vertipper:
Delphi-Quellcode:
  val2 := TCalcFormValue(Item2).Date;


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz