(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Маленькие хитрости: автоматическое восстановление вида указателя курсора

Источник: habrahabr
gorynych_zmey

Добрый день, коллеги!

Те из вас, кто пишет клиентские приложения, наверняка сталкивались с необходимостью менять вид курсора, чтобы показать пользователю, что в данный момент приложение выполняет какую-то обработку данных (длительную или не очень) или выполняет запрос к базе. Хочу поделиться маленькой хитростью, как упростить себе жизнь.

Изменять вид курсора все равно придется самостоятельно, а вот восстанавливать вид курсора можно автоматически. Для этого послужит вот такой код:

type
  ICursorSaver = interface
  end;

  TCursorSaver = class(TInterfacedObject, ICursorSaver)
  private
    FCursor: TCursor;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

constructor TCursorSaver.Create;
begin
  FCursor := Screen.Cursor;
end;

destructor TCursorSaver.Destroy;
begin
  Screen.Cursor := FCursor;
  inherited;
end;

Далее в нужном месте кода объявляем переменную типа ICursorSaver и инициализируем ее.

var
  saveCursor: ICursorSaver;
begin
  saveCursor := TCursorSaver.Create;
  Screen.Cursor := crSQLWait;
// здесь свой код, выполняющий обработку данных
end;

Как это работает? TInterfacedObject ведет учет ссылок на интерфейс, когда счетчик опускается до нуля - вызывается деструктор. В начале области видимости мы создаем объект и инициализируем им интерфейсную переменную, при этом захватывается текущий вид курсора. В конце области видимости интерфейсная переменная разрушается, интерфейс освобождается, деструктор возвращает вид курсора к первоначальному состоянию.

Данный способ можно использовать для сохранения состояния не только курсора, но и состояния любых других объектов - только в этом случае нужно делать deep copy объекта.

UPD: Коллеги romik и koreec предлагают устанавливать вид курсора прямо в конструкторе. Тогда конструктор будет выглядеть так:

constructor TCursorSaver.Create(ACursor: TCursor = crHourGlass);
begin
  FCursor := Screen.Cursor;
  Screen.Cursor := ACursor;
end;

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Embarcadero »
Написать редактору 
 Рекомендовать » Дата публикации: 16.11.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
ABViewer Professional пользовательская
Symantec Endpoint Protection Small Business Edition, Initial Hybrid Subscription License with Support, 1-24 Devices 1 YR
Антивирус ESET NOD32 SMALL Business Pack renewal for 5 user. Электронный ключ.
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Компьютерный дизайн - Все графические редакторы
СУБД Oracle "с нуля"
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Ищу программиста для написания программы (61)
Ищу программиста ,владеющего Вижуал Бэйсик и программированием в Экселе, для написания...
 
Написание любых программ на заказ (19)
Напишу любую программу на заказ
 
Рабочее зеркало букмекера 1win (1)
Сегодня в случае недоступно официального сайта есть рабочие зеркала БК 1win...
 
Автомобиль (4)
Доброй ночи. Планируем приобрести авто, рассматриваем б.у варианты, как проще всего подобрать...
 
Сдать часы (3)
Подскажите, где можно сдать часы по хорошей цене.
 
 
 



    
rambler's top100 Rambler's Top100