Básicamente es la misma idea que ha comentado David, pero en lugar de hacerlo cada vez que ejecutas la tarea, lo que suelo hacer es quedarme con el evento antes de asignar mi procedimiento.
Es decir, donde hay esto:
Código Delphi
[-]
Lista.OnChange := ListaChange;
Hacer algo así:
Código Delphi
[-]
if Assigned(Lista.OnChange) then begin
OldChangeEvent := ListView.OnChange;
end;
Lista.OnChange := ListaChange;
De esta forma ya tienes un apuntador al evento antiguo, si es que estaba asignado.
Ahora al inicio o al final de tu procedimiento ListaChange, llamas al evento antiguo si está asignado
Código Delphi
[-]
procedure ListaChange....
begin
if Assigned(OldChangeEvent) then begin
OldChangeEvent(...
end;
...
end;