Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


среда, 16 сентября 2015 г.

Изменение курсора и автоматическое восстановление при выходе из метода

Не знаю как у вас, а у меня коде (vcl приложение) полным-полно таких конструкций:

var
  tmpOldCursor: TCursor;
begin  
  tmpOldCursor := Screen.Cursor;
  try
    Screen.Cursor := crHourglass;
    // код который может работать относительно долго
    // например, выполнять запрос в БД
  finally
    Screen.Cursor := tmpOldCursor;
  end;
end;

И мне это надоело. По двум причинам:

  1. увеличение размера модулей - по 8 строк кода на каждый такой случай
  2. разбухание секции uses, ведь чтобы это работало нужно в каждый модуль работающий с курсором добавить uses Forms, Controls;

Поэтому давайте уже воспользуемся механизмом подсчёта ссылок в интерфейсах, и реализуем маленький класс избавляющий нас написания лишнего кода. Так чтобы вышеприведённый пример можно было упростить до 1й строки.

begin  
  TLazyCursorHelper.ChangeToHourglass;
  // код который может работать относительно долго
  // например, выполнять запрос в БД
end; // а здесь курсор должен восстановиться

Читать дальше..

Постоянные читатели