zoukankan      html  css  js  c++  java
  • 使用定时器SetTimer

    //创建定时器函数的声明:
    SetTimer(
    hWnd: HWND; {与定时器相关联的窗口句柄}
    nIDEvent: UINT; {指定一个非 0 的定时器标识符}
    uElapse: UINT; {指定间隔时间, 单位是毫秒}
    lpTimerFunc: TFNTimerProc {每到时间后, 要调用的函数的指针}
    ): UINT; {返回定时器标识符; 失败返回 0}

    //移除定时器函数的声明:
    KillTimer(
    hWnd: HWND; {与定时器相关联的窗口句柄}
    uIDEvent: UINT {定时器标识符}
    ): BOOL;

    //处理 WM_TIMER 消息的回调函数的格式:
    TimerProc(
    hWnd: HWND; {与定时器相关联的窗口句柄}
    uMsg: UINT; {WM_TIMER 消息}
    idEvent: UINT; {定时器的标识符}
    Time: DWORD {以世界时间公约格式(UTC)指定的系统时间}
    ); {这是个过程, 无返回值}
    --------------------------------------------------------------------------------
    应该先理解一下再举例:

    SetTimer 的参数1: hWnd, 一般指定 Self.Handle 就可以了;

    SetTimer 的参数2: nIDEvent 是某个定时器的标识符, 说明可以创建若干个定时器, 随便给个正整数即可;

    SetTimer 的参数3: uElapse, 这相当于 VCL 中 Timer 类的 Interval 属性;

    看来参数 1-3 还是非常简单, 不好理解的就是参数4: lpTimerFunc, 这是一个过程的地址.

    任意一个过程的地址吗? 当然不是; 这个过程的参数结构是 Windows 系统规定的, 我们必须按规定去定义这个过程; 即使你用不到其中的参数也必须如此.
    --------------------------------------------------------------------------------

    //举例:
    var
    i: Integer;

    //先定义回调函数
    procedure MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);
    begin
    Form1.Text := IntToStr(i);
    Inc(i);
    end;

    //创建定时器
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    SetTimer(Handle, 1, 10, @MyTimerProc); {每 1/100 秒调用一次 MyTimerProc}
    end;

    //删除定时器
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    KillTimer(Handle, 1); {创建时指定的定时器标识是 1, 这里必须要一致}
    end;
    --------------------------------------------------------------------------------


    //如果回调过程是窗体类的一个方法, 需要这样:
    var
    i: Integer;

    //先定义回调函数
    procedure TForm1.MyTimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; Time: DWORD);
    begin
    Text := IntToStr(i);
    Inc(i);
    end;

    //创建定时器
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    SetTimer(Handle, 1, 10, @TForm1.MyTimerProc); {每 1/100 秒调用一次 MyTimerProc}
    end;

    //删除定时器
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    KillTimer(Handle, 1); {创建时指定的定时器标识是 1, 这里必须要一致}
    end;

    参考:
    VCL 中 Application 的 Hint 功能的实现
    Timer控件的实现
    自定义控件中 MgcCustomGrid中 Hint 的实现

  • 相关阅读:
    对类型化数组的理解
    vue中$bus的传参的坑
    在dva框架和create-react-app创建出来的框架中修饰器语法与按需加载引入antd分别配置
    dva与create-react-app的结合使用
    网络请求之jsonp封装
    js中的超过16位数字相加问题
    dva框架简单描述使用
    后台管理系统之图片上传功能
    剪贴板功能的实现
    前后端登录注册之node剖析与token的使用状态
  • 原文地址:https://www.cnblogs.com/spiritofcloud/p/3976181.html
Copyright © 2011-2022 走看看