亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? simpletimer.pas

?? 自定義speedbutton控件
?? PAS
字號:
{*****************************************************************}
{ SimpleTimer is a timer class. It has the same timer resolution  }
{ as TTimer, but it is more lightweight because it's derived from }
{ TObject in stead of TComponent. Furthermore, the same handle is }
{ shared between multiple instances of SimpleTimer.               }
{ This makes it ideal for developers who need a timer in their    }
{ own components or applications, but want to keep the resource   }
{ usage minimal.                                                  }
{                                                                 }
{ The unit is freeware. Feel free to use and improve it.          }
{ I would be pleased to hear what you think.                      }
{                                                                 }
{ Troels Jakobsen - delphiuser@get2net.dk                         }
{ Copyright (c) 2002                                              }
{*****************************************************************}

unit SimpleTimer;

{ Some methods have moved to the Classes unit in D6 and are thus deprecated.
  Using the following compiler directives we handle that situation. }
{$IFDEF VER140} {$DEFINE DELPHI_6} {$ENDIF}
{$IFDEF VER150} {$DEFINE DELPHI_7} {$ENDIF}
{$IFDEF DELPHI_6} {$DEFINE DELPHI_6_UP} {$ENDIF}
{$IFDEF DELPHI_7} {$DEFINE DELPHI_6_UP} {$ENDIF}

interface

uses
  Windows, Classes;

type
  TSimpleTimer = class(TObject)
  private
    FId: UINT;
    FEnabled: Boolean;
    FInterval: Cardinal;
    FAutoDisable: Boolean;
    FOnTimer: TNotifyEvent;
    procedure SetEnabled(Value: Boolean);
    procedure SetInterval(Value: Cardinal);
    procedure SetOnTimer(Value: TNotifyEvent);
    procedure Initialize(AInterval: Cardinal; AOnTimer: TNotifyEvent);
  protected
    function Start: Boolean;
    function Stop(Disable: Boolean): Boolean;
  public
    constructor Create;
    constructor CreateEx(AInterval: Cardinal; AOnTimer: TNotifyEvent);
    destructor Destroy; override;
    property Enabled: Boolean read FEnabled write SetEnabled;
    property Interval: Cardinal read FInterval write SetInterval default 1000;
    property AutoDisable: Boolean read FAutoDisable write FAutoDisable;
    property OnTimer: TNotifyEvent read FOnTimer write SetOnTimer;
  end;

function GetSimpleTimerCount: Cardinal;
function GetSimpleTimerActiveCount: Cardinal;


implementation

uses
  Messages{$IFNDEF DELPHI_6_UP}, Forms {$ENDIF};

type
  TSimpleTimerHandler = class(TObject)
  private
    RefCount: Cardinal;
    ActiveCount: Cardinal;
    FWindowHandle: HWND;
    procedure WndProc(var Msg: TMessage);
  public
    constructor Create;
    destructor Destroy; override;
    procedure AddTimer;
    procedure RemoveTimer;
  end;

var
  SimpleTimerHandler: TSimpleTimerHandler = nil;


function GetSimpleTimerCount: Cardinal;
begin
  if Assigned(SimpleTimerHandler) then
    Result := SimpleTimerHandler.RefCount
  else
    Result := 0;
end;


function GetSimpleTimerActiveCount: Cardinal;
begin
  if Assigned(SimpleTimerHandler) then
    Result := SimpleTimerHandler.ActiveCount
  else
    Result := 0;
end;

{--------------- TSimpleTimerHandler ------------------}

constructor TSimpleTimerHandler.Create;
begin
  inherited Create;
{$IFDEF DELPHI_6_UP}
  FWindowHandle := Classes.AllocateHWnd(WndProc);
{$ELSE}
  FWindowHandle := AllocateHWnd(WndProc);
{$ENDIF}
end;


destructor TSimpleTimerHandler.Destroy;
begin
{$IFDEF DELPHI_6_UP}
  Classes.DeallocateHWnd(FWindowHandle);
{$ELSE}
  DeallocateHWnd(FWindowHandle);
{$ENDIF}
  inherited Destroy;
end;


procedure TSimpleTimerHandler.AddTimer;
begin
  Inc(RefCount);
end;


procedure TSimpleTimerHandler.RemoveTimer;
begin
  if RefCount > 0 then
    Dec(RefCount);
end;


procedure TSimpleTimerHandler.WndProc(var Msg: TMessage);
var
  Timer: TSimpleTimer;
begin
  if Msg.Msg = WM_TIMER then
  begin
{$WARNINGS OFF}
    Timer := TSimpleTimer(Msg.wParam);
{$WARNINGS ON}
    if Timer.FAutoDisable then
      Timer.Stop(True);
    // Call OnTimer event method if assigned
    if Assigned(Timer.FOnTimer) then
      Timer.FOnTimer(Timer);
  end
  else
    Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;

{---------------- Container management ----------------}

procedure AddTimer;
begin
  if not Assigned(SimpleTimerHandler) then
    // Create new handler
    SimpleTimerHandler := TSimpleTimerHandler.Create;
  SimpleTimerHandler.AddTimer;
end;


procedure RemoveTimer;
begin
  if Assigned(SimpleTimerHandler) then
  begin
    SimpleTimerHandler.RemoveTimer;
    if SimpleTimerHandler.RefCount = 0 then
    begin
      // Destroy handler
      SimpleTimerHandler.Free;
      SimpleTimerHandler := nil;
    end;
  end;
end;

{------------------ Callback method -------------------}
{
procedure TimerProc(hWnd: HWND; uMsg: UINT; idEvent: UINT; dwTime: DWORD); stdcall;
var
  Timer: TSimpleTimer;
begin
//  if uMsg = WM_TIMER then    // It's always WM_TIMER
  begin
    try
      Timer := TSimpleTimer(idEvent);
      if Assigned(Timer.FCallBackProc) then
        Timer.FCallBackProc(Timer.FOwner);
    except
      // ???
    end;
  end;
end;
}
{------------------- TSimpleTimer ---------------------}

constructor TSimpleTimer.Create;
begin
  inherited Create;
  Initialize(1000, nil);
end;


constructor TSimpleTimer.CreateEx(AInterval: Cardinal; AOnTimer: TNotifyEvent);
begin
  inherited Create;
  Initialize(AInterval, AOnTimer);
end;


destructor TSimpleTimer.Destroy;
begin
  if FEnabled then
    Stop(True);
  RemoveTimer;               // Container management
  inherited Destroy;
end;


procedure TSimpleTimer.Initialize(AInterval: Cardinal; AOnTimer: TNotifyEvent);
begin
{$WARNINGS OFF}
  FId := UINT(Self);         // Use Self as id in call to SetTimer and callback method
{$WARNINGS ON}
  FAutoDisable := False;
  FEnabled := False;
  FInterval := AInterval;
  SetOnTimer(AOnTimer);
  AddTimer;                  // Container management
end;


procedure TSimpleTimer.SetEnabled(Value: Boolean);
begin
  if Value then
    Start
  else
    Stop(True);
end;


procedure TSimpleTimer.SetInterval(Value: Cardinal);
begin
  if Value <> FInterval then
  begin
    FInterval := Value;
    if FEnabled then
      if FInterval <> 0 then
        Start
      else
        Stop(False);
  end;
end;


procedure TSimpleTimer.SetOnTimer(Value: TNotifyEvent);
begin
  FOnTimer := Value;
  if (not Assigned(Value)) and (FEnabled) then
    Stop(False);
end;


function TSimpleTimer.Start: Boolean;
begin
  if FInterval = 0 then
  begin
    Result := False;
    Exit;
  end;
  if FEnabled then
    Stop(True);
//  Result := (SetTimer(SimpleTimerHandler.FWindowHandle, FId, FInterval, @TimerProc) <> 0);
  Result := (SetTimer(SimpleTimerHandler.FWindowHandle, FId, FInterval, nil) <> 0);
  if Result then
  begin
    FEnabled := True;
    Inc(SimpleTimerHandler.ActiveCount);
  end
{  else
    raise EOutOfResources.Create(SNoTimers); }
end;


function TSimpleTimer.Stop(Disable: Boolean): Boolean;
begin
  if Disable then
    FEnabled := False;
  Result := KillTimer(SimpleTimerHandler.FWindowHandle, FId);
  if Result and (SimpleTimerHandler.ActiveCount > 0) then
    Dec(SimpleTimerHandler.ActiveCount);
end;


initialization

finalization
  if Assigned(SimpleTimerHandler) then
  begin
    SimpleTimerHandler.Free;
    SimpleTimerHandler := nil;
  end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu久久天堂性欧美| 国产成人av电影在线播放| 国产精品久久久久一区| 精品国产青草久久久久福利| 欧美变态tickle挠乳网站| 日韩精品在线一区| 久久久亚洲午夜电影| 久久久久久久久岛国免费| 国产午夜亚洲精品不卡| 国产精品网友自拍| 依依成人综合视频| 亚洲3atv精品一区二区三区| 婷婷综合另类小说色区| 六月丁香婷婷久久| 国产精品99久久久久久有的能看| 国模套图日韩精品一区二区| 国产精品69久久久久水密桃| 成人自拍视频在线观看| caoporn国产精品| 欧美在线啊v一区| 在线播放欧美女士性生活| 日韩一区二区三免费高清| 久久久精品影视| 亚洲精品成人悠悠色影视| 爽好久久久欧美精品| 久久99九九99精品| 99在线精品视频| 欧美色图在线观看| 久久色.com| 亚洲综合激情小说| 九色综合狠狠综合久久| 99re热视频精品| 欧美精品高清视频| 中文字幕不卡三区| 亚洲bt欧美bt精品777| 国产精品自拍一区| 在线观看日韩国产| 2017欧美狠狠色| 亚洲午夜久久久久久久久久久| 免费黄网站欧美| 一本一道波多野结衣一区二区| 日韩欧美在线123| **网站欧美大片在线观看| 天天亚洲美女在线视频| 大白屁股一区二区视频| 51精品视频一区二区三区| 国产精品久久网站| 国产在线国偷精品产拍免费yy| 91激情五月电影| 欧美韩国日本综合| 久久精品国产免费| 欧美片网站yy| 夜夜嗨av一区二区三区网页| 国产69精品久久久久777| 欧美一卡2卡3卡4卡| 一区二区在线观看免费视频播放| 国产一区二区三区香蕉| 欧美一区国产二区| 亚洲国产精品一区二区www| 不卡一卡二卡三乱码免费网站| 日韩免费视频一区| 奇米影视7777精品一区二区| 欧美午夜一区二区三区免费大片| 国产精品第13页| 成人app下载| 欧美国产欧美综合| 国产精品1024久久| 久久理论电影网| 国产一区二区女| 精品久久久久99| 国产综合色精品一区二区三区| 日韩一卡二卡三卡| 蜜臀av国产精品久久久久 | 在线精品视频一区二区三四| 国产精品久久毛片a| 成人免费视频免费观看| 中文字幕第一区二区| 成人国产精品免费观看视频| 国产精品丝袜一区| 91网站黄www| 亚洲一区在线观看视频| 欧美性猛交xxxx乱大交退制版| 亚洲一区二区中文在线| 欧美亚日韩国产aⅴ精品中极品| 一区二区三区免费观看| 欧美人伦禁忌dvd放荡欲情| 日本色综合中文字幕| 日韩精品一区二区三区在线播放 | 久久久亚洲精品一区二区三区| 国产一区美女在线| 国产日韩精品一区二区三区| 成人黄页毛片网站| 亚洲男女毛片无遮挡| 欧美精品自拍偷拍动漫精品| 日韩av电影天堂| 国产丝袜欧美中文另类| 色综合久久天天综合网| 午夜激情一区二区| 久久免费美女视频| 色天使色偷偷av一区二区| 香蕉成人伊视频在线观看| 欧美mv日韩mv国产网站app| 成人美女视频在线看| 一个色综合网站| 久久亚洲春色中文字幕久久久| 国产在线播精品第三| ...中文天堂在线一区| 91精品免费观看| 成人一区二区视频| 五月激情综合色| 久久久久久久av麻豆果冻| 91免费观看国产| 另类人妖一区二区av| 成人欧美一区二区三区白人| 欧美一卡2卡3卡4卡| 99精品欧美一区二区三区综合在线| 日本网站在线观看一区二区三区 | 亚洲美腿欧美偷拍| 日韩一区二区三免费高清| 91蜜桃传媒精品久久久一区二区| 日韩电影免费一区| 亚洲女性喷水在线观看一区| 精品久久久久久久久久久久久久久 | 国产乱码精品一区二区三| 亚洲免费伊人电影| 久久久99精品免费观看不卡| 欧美日韩大陆在线| 91蝌蚪porny九色| 经典三级视频一区| 日本一道高清亚洲日美韩| 亚洲精品乱码久久久久久黑人| 久久一区二区视频| 欧美电影在线免费观看| 91丨九色porny丨蝌蚪| 国产精品99久久久久久似苏梦涵 | 一区二区在线观看免费| 精品国内片67194| 制服.丝袜.亚洲.中文.综合| 久久精品999| 国产高清久久久| 五月婷婷综合网| 亚洲欧美视频一区| 中文字幕巨乱亚洲| 久久香蕉国产线看观看99| 91精品国产色综合久久不卡蜜臀 | 另类欧美日韩国产在线| 亚洲国产欧美在线人成| 亚洲精品成人悠悠色影视| 亚洲婷婷在线视频| 亚洲图片激情小说| 亚洲精品国产成人久久av盗摄| 亚洲黄色免费网站| 亚洲视频你懂的| 亚洲欧美视频在线观看视频| 亚洲卡通欧美制服中文| 亚洲自拍偷拍网站| 一区二区理论电影在线观看| 亚洲精品网站在线观看| 亚洲另类春色校园小说| 亚洲精品v日韩精品| 欧美性受xxxx黑人xyx性爽| 色综合一区二区三区| 91麻豆自制传媒国产之光| 色婷婷狠狠综合| 欧美在线观看一区二区| 欧美日韩激情一区| 欧美一级一区二区| 欧美α欧美αv大片| 欧美激情中文字幕| 亚洲精品欧美激情| 日韩成人一区二区三区在线观看| 久久精品99久久久| 国产精品亚洲第一| 91久久香蕉国产日韩欧美9色| 欧美午夜宅男影院| 精品国免费一区二区三区| 欧美激情一二三区| 亚洲成a人在线观看| 极品少妇xxxx精品少妇| 风间由美性色一区二区三区| 97精品超碰一区二区三区| 亚洲国产精品尤物yw在线观看| 亚洲欧美一区二区三区久本道91| 亚洲综合免费观看高清完整版在线| 亚洲图片欧美视频| 国产一区二三区好的| 91在线观看成人| 欧美一级免费观看| 国产精品初高中害羞小美女文| 亚洲六月丁香色婷婷综合久久 | 日本一区二区动态图| 伊人性伊人情综合网| 看电影不卡的网站| 一本色道a无线码一区v| 欧美大片一区二区| 依依成人精品视频| 国产在线观看免费一区| 欧美日韩国产经典色站一区二区三区 | 在线观看免费亚洲| 久久久久97国产精华液好用吗|