Ich denke da fehlt das ^ Zeichen.
Data1: PTreeData;
Also hält data1 nur einen Zeiger.
Wenn du dann im Compare Data1.Column[Column] nutzt, greifst du eigentlich auf den Zeiger zu und nicht auf die Datenstruktur, welchen die Column enthält.
Es muss so heißen:
Delphi-Quellcode:
if (not Assigned(Data1^)) or (not Assigned(Data2^)) then
Result:=0
else
Result:=CompareText(Data1^.Column[Column], Data2^.Column[Column]);