Я сильно подозреваю, что курсор загружен, но не изменяется до тех пор, пока цикл сообщений Windows не продолжится.
Попробуйте ProcessMessages ПОСЛЕ загрузки курсора из файла.
Курсор не исчезает, потому чтоВы не сказали форме вернуться к обычному курсору.Вы сказали экрану вернуться к обычному курсору.
Попробуйте:
__finally
{
Cursor = crDefault;
}