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

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

?? rxtimer.pas

?? 臺達PLC通信用
?? PAS
字號:
{*******************************************************}
{                                                       }
{         Delphi VCL Extensions (bbpoint)               }
{                                                       }
{         Copyright (c) 2003  bbpint                    }
{         Copyright (c) 2003, 2003 bbpoint              }
{                                                       }
{*******************************************************}

unit RxTimer;

interface

uses {$IFDEF WIN32} Windows, {$ELSE} WinTypes, WinProcs, {$ENDIF}
  Messages, SysUtils, Classes, Controls;

type

{ TRxTimer }

  TRxTimer = class(TComponent)
  private
    FEnabled: Boolean;
    FInterval: Cardinal;
    FOnTimer: TNotifyEvent;
    FWindowHandle: HWND;
{$IFDEF WIN32}
    FSyncEvent: Boolean;
    FThreaded: Boolean;
    FTimerThread: TThread;
    FThreadPriority: TThreadPriority;
    procedure SetThreaded(Value: Boolean);
    procedure SetThreadPriority(Value: TThreadPriority);
{$ENDIF}
    procedure SetEnabled(Value: Boolean);
    procedure SetInterval(Value: Cardinal);
    procedure SetOnTimer(Value: TNotifyEvent);
    procedure UpdateTimer;
    procedure WndProc(var Msg: TMessage);
  protected
    procedure Timer; dynamic;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
{$IFDEF WIN32}
    procedure Synchronize(Method: TThreadMethod);
{$ENDIF}
  published
    property Enabled: Boolean read FEnabled write SetEnabled default True;
    property Interval: Cardinal read FInterval write SetInterval default 1000;
{$IFDEF WIN32}
    property SyncEvent: Boolean read FSyncEvent write FSyncEvent default True;
    property Threaded: Boolean read FThreaded write SetThreaded default True;
    property ThreadPriority: TThreadPriority read FThreadPriority write
      SetThreadPriority default tpNormal;
{$ENDIF}
    property OnTimer: TNotifyEvent read FOnTimer write SetOnTimer;
  end;

implementation

uses Forms, Consts;

{$IFDEF WIN32}

{ TTimerThread }

type
  TTimerThread = class(TThread)
  private
    FOwner: TRxTimer;
    FInterval: Cardinal;
    FException: Exception;
    procedure HandleException;
  protected
    procedure Execute; override;
  public
    constructor Create(Timer: TRxTimer; Enabled: Boolean);
  end;

constructor TTimerThread.Create(Timer: TRxTimer; Enabled: Boolean);
begin
  FOwner := Timer;
  inherited Create(not Enabled);
  FInterval := 1000;
  FreeOnTerminate := True;
end;

procedure TTimerThread.HandleException;
begin
  if not (FException is EAbort) then begin
    if Assigned(Application.OnException) then
      Application.OnException(Self, FException)
    else
      Application.ShowException(FException);
  end;
end;

procedure TTimerThread.Execute;
  function ThreadClosed: Boolean;
  begin
    Result := Terminated or Application.Terminated or (FOwner = nil);
  end;

begin
  repeat
    if not ThreadClosed then
      if SleepEx(FInterval, False) = 0 then begin
        if not ThreadClosed and FOwner.FEnabled then
          with FOwner do
            if SyncEvent then Synchronize(Timer)
            else
              try
                Timer;
              except
                on E: Exception do begin
                  FException := E;
                  HandleException;
                end;
              end;
      end;
  until Terminated;
end;

{$ENDIF}

{ TRxTimer }

constructor TRxTimer.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FEnabled := True;
  FInterval := 1000;
{$IFDEF WIN32}
  FSyncEvent := True;
  FThreaded := True;
  FThreadPriority := tpNormal;
  FTimerThread := TTimerThread.Create(Self, False);
{$ELSE}
  FWindowHandle := AllocateHWnd(WndProc);
{$ENDIF}
end;

destructor TRxTimer.Destroy;
begin
  Destroying;
  FEnabled := False;
  FOnTimer := nil;
{$IFDEF WIN32}
  {TTimerThread(FTimerThread).FOwner := nil;}
  while FTimerThread.Suspended do FTimerThread.Resume;
  FTimerThread.Terminate;
  {if not SyncEvent then FTimerThread.WaitFor;}
  if FWindowHandle <> 0 then begin
{$ENDIF}
    KillTimer(FWindowHandle, 1);
    DeallocateHWnd(FWindowHandle);
{$IFDEF WIN32}
  end;
{$ENDIF}
  inherited Destroy;
end;

procedure TRxTimer.WndProc(var Msg: TMessage);
begin
  with Msg do
    if Msg = WM_TIMER then
      try
        Timer;
      except
        Application.HandleException(Self);
      end
    else Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;

procedure TRxTimer.UpdateTimer;
begin
{$IFDEF WIN32}
  if FThreaded then begin
    if FWindowHandle <> 0 then begin
      KillTimer(FWindowHandle, 1);
      DeallocateHWnd(FWindowHandle);
      FWindowHandle := 0;
    end;
    if not FTimerThread.Suspended then FTimerThread.Suspend;
    TTimerThread(FTimerThread).FInterval := FInterval;
    if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then begin
      FTimerThread.Priority := FThreadPriority;
      while FTimerThread.Suspended do FTimerThread.Resume;
    end;
  end
  else begin
    if not FTimerThread.Suspended then FTimerThread.Suspend;
    if FWindowHandle = 0 then FWindowHandle := AllocateHWnd(WndProc)
    else KillTimer(FWindowHandle, 1);
    if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
      if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then
        raise EOutOfResources.Create('no time');
  end;
{$ELSE}
  KillTimer(FWindowHandle, 1);
  if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
    if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then
      raise EOutOfResources.Create(ResStr(SNoTimers));
{$ENDIF}
end;

procedure TRxTimer.SetEnabled(Value: Boolean);
begin
  if Value <> FEnabled then begin
    FEnabled := Value;
    UpdateTimer;
  end;
end;

procedure TRxTimer.SetInterval(Value: Cardinal);
begin
  if Value <> FInterval then begin
    FInterval := Value;
    UpdateTimer;
  end;
end;

{$IFDEF WIN32}

procedure TRxTimer.SetThreaded(Value: Boolean);
begin
  if Value <> FThreaded then begin
    FThreaded := Value;
    UpdateTimer;
  end;
end;

procedure TRxTimer.SetThreadPriority(Value: TThreadPriority);
begin
  if Value <> FThreadPriority then begin
    FThreadPriority := Value;
    if FThreaded then UpdateTimer;
  end;
end;

procedure TRxTimer.Synchronize(Method: TThreadMethod);
begin
  if (FTimerThread <> nil) then begin
    with TTimerThread(FTimerThread) do begin
      if Suspended or Terminated then Method
      else TTimerThread(FTimerThread).Synchronize(Method);
    end;
  end
  else Method;
end;

{$ENDIF}

procedure TRxTimer.SetOnTimer(Value: TNotifyEvent);
begin
  if Assigned(FOnTimer) <> Assigned(Value) then begin
    FOnTimer := Value;
    UpdateTimer;
  end else FOnTimer := Value;
end;

procedure TRxTimer.Timer;
begin
  if FEnabled and not (csDestroying in ComponentState) and
    Assigned(FOnTimer) then FOnTimer(Self);
end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线免费观看成人短视频| 国产精品第一页第二页第三页| 欧洲精品在线观看| 成人av在线看| 成人免费高清在线| 大胆亚洲人体视频| 国产xxx精品视频大全| 国产一区免费电影| 欧美精品粉嫩高潮一区二区| 91福利小视频| 欧美日本免费一区二区三区| 欧美久久婷婷综合色| 在线不卡中文字幕播放| 欧美高清激情brazzers| 在线综合视频播放| 91精品国产福利| 精品国产成人系列| 国产女主播在线一区二区| 国产精品欧美久久久久一区二区| 国产精品女主播av| 亚洲精品福利视频网站| 五月婷婷久久综合| 国内一区二区在线| 成人午夜激情影院| 日本道免费精品一区二区三区| 在线免费观看日本欧美| 欧美一区二区三区视频在线| 精品毛片乱码1区2区3区 | 国产亚洲一区二区三区在线观看| ㊣最新国产の精品bt伙计久久| 国产日韩欧美麻豆| 国产精品护士白丝一区av| 亚洲裸体xxx| 午夜私人影院久久久久| 精品在线免费视频| 成人国产精品免费观看视频| 欧美丝袜丝nylons| 欧美成人精品福利| 国产精品成人免费精品自在线观看 | 久久精品综合网| 亚洲日本欧美天堂| 日韩国产在线一| 国产91高潮流白浆在线麻豆| 色菇凉天天综合网| 欧美r级电影在线观看| 国产精品私房写真福利视频| 亚洲午夜影视影院在线观看| 久久aⅴ国产欧美74aaa| 久久精品国产免费看久久精品| 丁香啪啪综合成人亚洲小说| 欧美日韩一区二区在线观看 | 中文字幕亚洲区| 日本三级韩国三级欧美三级| 菠萝蜜视频在线观看一区| 欧美高清视频在线高清观看mv色露露十八 | 丁香婷婷深情五月亚洲| 欧美三级中文字| 国产精品看片你懂得| 日本不卡1234视频| 91色视频在线| 久久精品人人做人人综合 | 日韩av在线发布| 不卡视频在线观看| 日韩美女在线视频 | 久久电影国产免费久久电影| 97se亚洲国产综合自在线观| 精品国产露脸精彩对白| 亚洲国产一区二区在线播放| 成人午夜免费电影| 欧美精品一区二区三区视频| 亚洲自拍偷拍九九九| 国产九色精品成人porny| 欧美日韩精品一区二区三区四区| 国产午夜精品在线观看| 免费av成人在线| 欧美视频一区二| 中文字幕中文字幕一区| 国产剧情av麻豆香蕉精品| 欧美精选一区二区| 亚洲综合色在线| 91在线国产观看| 国产午夜精品久久久久久久| 美脚の诱脚舐め脚责91| 欧美日韩午夜影院| 亚洲精品乱码久久久久久日本蜜臀| 国产精品一区二区你懂的| 91精品国产综合久久精品图片 | 99视频精品在线| 国产精品私人自拍| 国产精品一二一区| 欧美精品一区二区三区蜜桃视频| 欧美aaaaaa午夜精品| 911国产精品| 亚洲国产成人高清精品| 欧美中文字幕一区| 亚洲精品成人少妇| 欧美综合在线视频| 一区二区三区免费看视频| 97se亚洲国产综合自在线| 自拍偷拍亚洲综合| fc2成人免费人成在线观看播放 | 最新成人av在线| 成人黄色国产精品网站大全在线免费观看 | 国产精品一二三四区| 久久综合九色欧美综合狠狠| 另类调教123区| 欧美变态tickling挠脚心| 麻豆国产精品一区二区三区 | 久久精品网站免费观看| 国产精品99久久久久久宅男| 久久精品在线免费观看| 国产乱妇无码大片在线观看| 国产人妖乱国产精品人妖| 国产精品91一区二区| 国产清纯在线一区二区www| 国产福利一区二区三区视频在线 | 欧美性生交片4| 日韩经典中文字幕一区| 日韩女优av电影| 国产麻豆精品久久一二三| 久久久久久久免费视频了| 国产成人三级在线观看| 亚洲欧洲国产专区| 在线观看一区不卡| 日韩av午夜在线观看| 日韩一区二区三免费高清| 极品少妇xxxx偷拍精品少妇| 久久精品一区二区| bt欧美亚洲午夜电影天堂| 亚洲激情网站免费观看| 欧美日韩欧美一区二区| 美女视频黄频大全不卡视频在线播放| 久久一区二区三区国产精品| 处破女av一区二区| 亚洲综合免费观看高清在线观看| 欧美一区二区私人影院日本| 国产一区二区三区最好精华液| 亚洲国产成人在线| 欧美亚洲高清一区| 激情图片小说一区| 中文字幕一区二区三区在线观看| 欧美三级乱人伦电影| 狠狠色狠狠色合久久伊人| 国产精品乱人伦| 制服丝袜激情欧洲亚洲| 国产高清久久久久| 亚洲午夜精品网| 久久综合av免费| 91国偷自产一区二区三区观看| 麻豆成人在线观看| 亚洲视频 欧洲视频| 日韩视频免费观看高清完整版 | 亚洲免费av在线| 日韩午夜中文字幕| av成人免费在线| 麻豆成人在线观看| 亚洲精品免费看| 日韩欧美国产不卡| 一本大道久久a久久综合婷婷| 日韩精品视频网站| 国产精品成人在线观看| 日韩一区国产二区欧美三区| caoporn国产一区二区| 麻豆成人综合网| 亚洲一区二区三区影院| 国产女同互慰高潮91漫画| 欧美日韩视频在线一区二区| 成人黄页在线观看| 麻豆国产精品视频| 一二三四社区欧美黄| 国产日产欧美精品一区二区三区| 欧美卡1卡2卡| 色一区在线观看| 高清不卡在线观看av| 蜜臀精品久久久久久蜜臀| 亚洲美女在线一区| 国产亚洲精品超碰| 日韩午夜小视频| 欧美日韩一区二区不卡| 91同城在线观看| 国产凹凸在线观看一区二区| 麻豆成人久久精品二区三区红| 亚洲一区二区av在线| 亚洲色图视频免费播放| 国产视频不卡一区| 精品国产自在久精品国产| 欧美夫妻性生活| 欧美日韩一区二区在线观看| 一本一本大道香蕉久在线精品 | 欧美日韩激情一区二区三区| 99精品视频一区| 成人丝袜18视频在线观看| 久久91精品国产91久久小草| 午夜精品久久久| 一区二区三区 在线观看视频| 国产精品国产三级国产aⅴ无密码| wwwwww.欧美系列| 欧美xxxx老人做受| 欧美一级高清片| 欧美一卡2卡三卡4卡5免费|