Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Изменить экранный курсор без необходимости возвращать предыдущий

Delphi , ОС и Железо , Мышка и Курсор

Изменить экранный курсор без необходимости возвращать предыдущий

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

// By implementing Interface we can set the cursor without restore it in the end. 
// Example: In convensional way... 
var
   Cur: TCursor;
 begin
   Cur := Screen.Cursor;
   Screen.Cursor := crSQLWait;
   //do coding here 
  //What happend is that if your code did not finish, the screen cursor will 
  //remain as crSQLWait.. even with try..finally block (sometimes) 
  Screen.Cursor := Cur;
 end;

 // By using interface, we can implement as follows 
type
   ImyCursor = interface
     [(GUID - Ctrl - Shift - G)]
   end;
   TmyCursor = class(TInterfacedObjects, ImyCursor);
   private
   FCursor: TCursor;
   public
 constructor Create;
   destructor Destroy; override;
     end;

 implementation

 TmyCursor.Create;

 begin
   FCursor := Screen.Cursor;
 end;

 TmyCursor.Destroy;

 begin
   Screen.Cursor := FCursor;
   inherited;
 end;

 procedure....var
   C: ImyCursor;
 begin
   C := TmyCursor.Create;
   Screen.Curosr := crSQLWait; // whatever cursor you like 
  // Do coding here without worring to free it. 
  // Screen Cursor will restore when the TMyCursor object get out of scope. 
end;

Привет! Я переведу текст на русский язык:

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

Вот что код делает:

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

  2. Вторая часть кода вводит интерфейс ImyCursor и класс TmyCursor, который реализует этот интерфейс.

    • Интерфейс имеет только один метод, Create, который автоматически вызывается при создании объекта типа TmyCursor.

    • В конструкторе Create класса TmyCursor сохраняется текущий курсор экрана.

    • Когда объект TmyCursor выходит из области видимости, его деструктор вызывается. Деструктор восстанавливает оригинальный курсор перед уничтожением самого себя.

  3. Пример кода демонстрирует использование этого класса. Создается переменная C типа ImyCursor, которая на самом деле является объектом типа TmyCursor.

    • Когда создается C, сохраняется текущий курсор экрана.

    • Затем он устанавливает курсор экрана в crSQLWait.

    • После этого можно выполнять любые операции без беспокойства о восстановлении курсора. Как только область видимости C заканчивается (например, когда процедура или функция возвращает), вызывается деструктор C, который восстанавливает оригинальный курсор.

Таким образом, это подход обеспечивает восстановление курсора всегда, даже если происходит исключение.

Вот предложенный альтернативный способ решения:

type
  TmyCursor = class(TInterfacedObject)
  private
    FOriginalCursor: TCursor;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

constructor TmyCursor.Create;
begin
  FOriginalCursor := Screen.Cursor;
end;

destructor TmyCursor.Destroy;
begin
  Screen.Cursor := FOriginalCursor;
  inherited;
end;

procedure ChangeCursor;
var
  C: TmyCursor;
begin
  C := TmyCursor.Create;
  try
    Screen.Cursor := crSQLWait; // любая курсор, который вы хотите
     // Выполнение кода здесь без беспокойства о свободе.
  finally
    C.Free;
  end;
end;

Альтернативное решение достигает того же результата, что и оригинальный код, но более простое и понятное. Оно также использует блок try...finally для обеспечения восстановления курсора всегда, даже если происходит исключение.

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


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Мышка и Курсор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-01-28 06:05:29/0.0055031776428223/1