On 09/12/2015 20:11, Donald Ziesig wrote:
Is there any way to pass a method function as the Compare parameter to
a TList or is there a work around for it?
As in:
type
TMyClass = object
fIndex : Integer;
List : array of TList;
function Compare( Item1, Item2 : Pointer) : Longint; // needs
access to fIndex
procedure Sort;
end;
implementation
function TMyClass.Compare( Item1, Item2 : Pointer ) : Longint;
begin
case fIndex of
0: Result := some compare of Item1, Item2;// These compares are
implemented in an object from another unit
1: Result := another compare of Item1, Item2
end;
end;
procedure TMyClass.Sort;
begin
fIndex := 0;
List[fIndex].Sort( @Compare ); // Compilation error, doesn't like
Compare being "of object"
end;
It's a dreadful hack, but you could try something like:
type
TClassListSortCompare = function (Item1, Item2: Pointer): Integer of
object;
procedure TMyClass.Sort;
var
objectFunction: TClassListSortCompare;
regularFunction: TListSortCompare;
begin
fIndex := 0;
objectFunction:=@Compare;
regularFunction:=TListSortCompare(TMethod(objectFunction).Code);
List[fIndex].Sort( regularFunction );
end;
---
This email has been checked for viruses by Avast antivirus software.
https://www.avast.com/antivirus
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus