• [导入]控制光标


    按照习惯,我们的程序在执行时间比较长的时候一般需要把光标设置成漏斗的样子,执行完操作再换回来。

    如:

      Screen.Cursor := crHourGlass;
      // Do somthing
      Screen.Cursor := crDefault;

    但是中间我们要考虑到,万一执行中出现错误,那么最后一句的 Screen.Cursor := crDefault 也就执行不到了,光标不会变回原来的样子,这是无法忍受的 :)

    于是代码修改后变成以下的样子:

      Screen.Cursor := crHourGlass;
      try
        // Do somthing
      finally
        Screen.Cursor := crDefault;
      end;

    这样即使中途出现错误光标都变回原来的样子了

    可是频繁的写 try / finally 也让我有点受不了 -_-!

    在C++里好办,只要写个类即可简化这些工作

    class TAutoCursor
    {
        __fastcall TAutoCursor()
        {
            Screen->Cursor = crHourGlass;
        }

        __fastcall ~TAutoCursor()
        {
            Screen->Cursor = crDefault;
        }
    }

    使用:

    void __fastcall foo()
    {
        TAutoCursor cur;
        // Do something
    }

    代码简洁了不少 :)

    这样当foo执行完时,不管有没有出现错误,cur都会被析构,鼠标也就变回来了

    这是因为C++中的类是分配在栈里的,函数结束时系统会把栈里的临时变量等自动清除掉

    可是Delphi与C++不同,Delphi的类都是建在堆里的,是需要手工释放的。

    难道就没有办法实现么?答案是否定的,否则我也就不用写这篇东东了,呵呵

    实现代码如下

    unit AutoCursor;

    interface

    uses
      Controls, Forms;

    type
      IAutoCursor = interface
      end;

      TAutoCursor = class(TInterfacedObject, IAutoCursor)
      private
        FOldCursor: TCursor;
      public
        constructor Create(ACursor: TCursor = crHourGlass);
        destructor Destroy; override;
      end;

    implementation

    { TAutoCursor }

    constructor TAutoCursor.Create(ACursor: TCursor);
    begin
      inherited Create;
      FOldCursor := Screen.Cursor;
      Screen.Cursor := ACursor;
    end;

    destructor TAutoCursor.Destroy;
    begin
      Screen.Cursor := FOldCursor;
      inherited;
    end;

    end.

    只要象下面这样用就可以了

    var
      Cur: IAutoCursor;
    begin
      Cur := TAutoCursor.Create;
      // Do something
    end;

    文章来源:http://blog.csdn.net/sephil/archive/2005/09/07/473862.aspx

  • 相关阅读:
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    java中使用正则表达式
    Timer与ScheduledThreadPoolExecutor的比较
    Java同步块
    java中的浅拷贝与深拷贝
    java的关闭钩子(Shutdown Hook)
    JVM系列三:JVM参数设置、分析
    java虚拟机参数设置
    UTF-8编码规则(转)
    过滤3个字节以上的utf-8字符
  • 原文地址:https://www.cnblogs.com/sephil/p/auto_cursor.html
Copyright © 2020-2023  润新知