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.