Einzelnen Beitrag anzeigen

martin-sun

Registriert seit: 11. Aug 2004
Ort: Weinheim
15 Beiträge
 
Delphi 2005 Professional
 
#1

TList.Sort akzeptiert Vergleichsfunktion nicht

  Alt 4. Okt 2004, 18:44
hallo leute,

ich hab ein problem mit dem sortieren eines TList objektes. bisher habe ich immer nur die für die Sort-Funktion des TList objektes benötigte funktion (TListSortCompore) seperat in einer unit gehabt. das hat auch prima geklappt. diesmal bastel ich jedoch an einer komponente deren daten in einem TList objekt verwaltet werden (FFileList). für das sortieren muss ich auf daten in der klasse zurückgreifen (FSortBy, FSortUpDown). daher habe ich eine vergleichsroutine gebastelt, die genau dieses innerhalb der klasse tut (FCompareListItems).
das problem entsteht beim aufruf der sort-funktion:
Code:
FFileList.Sort(@FCompareListItems);
Der Compiler aktzeptiert die übergebene Funktion nicht mit der Fehlermeldung:
Code:
[Fehler] FileGrid.pas(377): Variable erforderlich
Befindet sich die funktion (FCompareListItem) ausserhalb der klasse, dann funktioniert es toll. Aber zum einen finde ich das nicht schön, da sie ja irgendwie in die klasse gehört und was viel schlimmer ist, von ausserhalb kann ich nicht auf die objektvariablen FSortBy und FSortUpDown zugreifen.

hat jemand ne ahnung wo das problem liegt oder was ich falsch mache?

martin

Delphi-Quellcode:
unit FileGrid;
interface

  TFileGrid = class(TDrawGrid)
  private
    FFileList: TList;
    FSortBy: Integer;
    FSortUpDown: Integer;
    function FCompareListItems(Item1, Item2: Pointer): Integer;
    procedure FOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  protected
  public
    constructor Create(AOwner:Tcomponent); override;
  end;

implementation

constructor TFileGrid.Create(AOwner: Tcomponent);
begin
   inherited;
   OnMouseDown := FOnMouseDown
   FFileList := TList.Create;
end;

procedure TFileGrid.FOnMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
   ACol, ARow: Integer;
begin
   MouseToCell(X, Y, ACol, ARow);
   else if (ARow = 0) then begin
      FSortBy := ACol + 1;
      FFileList.Sort(@FCompareListItems);
   end;
end;
end.
  Mit Zitat antworten Zitat