亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲午夜久久久久久久久久久| 婷婷夜色潮精品综合在线| 欧美一区二区三区在线| 91一区在线观看| 91丨porny丨户外露出| 成人午夜电影小说| 成人动漫一区二区在线| 99久久精品免费看国产 | 91精品国产高清一区二区三区蜜臀| 91美女视频网站| 欧美色男人天堂| 欧美一区二区久久久| 欧美va天堂va视频va在线| 欧美成人国产一区二区| 久久久另类综合| 国产精品高清亚洲| 亚洲3atv精品一区二区三区| 日韩黄色小视频| 国产在线一区观看| 91在线观看美女| 欧美日韩精品欧美日韩精品一| 欧美一三区三区四区免费在线看 | 欧美人xxxx| 日韩欧美www| 中文字幕欧美激情一区| 亚洲美女屁股眼交3| 亚洲图片有声小说| 国产精品一区一区三区| 99久久er热在这里只有精品66| 色婷婷精品久久二区二区蜜臀av| 欧美日韩中文国产| 欧美mv日韩mv| 亚洲精品菠萝久久久久久久| 视频一区欧美日韩| 欧美体内she精高潮| 成人伦理片在线| 激情六月婷婷久久| 日韩国产成人精品| 亚洲国产美国国产综合一区二区| 欧美激情一区二区三区全黄| 欧美日韩中文另类| 国产精品国产三级国产aⅴ入口| 久久精品国产第一区二区三区| 欧美一区二区三区播放老司机| 秋霞电影一区二区| 欧美精品一区二区三区四区 | 欧美刺激脚交jootjob| 麻豆成人综合网| 亚洲精品在线电影| 成人爽a毛片一区二区免费| 国产精品免费免费| 一本大道久久a久久精品综合| 一个色综合av| 7777精品伊人久久久大香线蕉的| 蜜桃视频在线一区| 国产日韩精品一区| 在线观看亚洲专区| 视频精品一区二区| 久久只精品国产| 91欧美一区二区| 日韩精品电影一区亚洲| 久久亚洲一区二区三区四区| 成人三级在线视频| 亚欧色一区w666天堂| 日韩欧美亚洲一区二区| 成人a级免费电影| 天天爽夜夜爽夜夜爽精品视频| 26uuu久久综合| 欧美在线你懂的| 九九精品一区二区| 自拍偷拍国产精品| 精品国产欧美一区二区| 色先锋aa成人| 国产精品一区二区91| 性久久久久久久久| 欧美国产在线观看| 日韩精品一区二区三区中文不卡 | 欧美日韩情趣电影| 国产精一品亚洲二区在线视频| 最新日韩av在线| 欧美一区二区三区在线观看视频| 成人国产免费视频| 精品一区二区三区视频在线观看 | 国产亚洲一区二区在线观看| 色又黄又爽网站www久久| 中文字幕一区二| 成人a免费在线看| 久久久99免费| av不卡免费电影| 国产精品蜜臀在线观看| 国产成人精品三级麻豆| 欧美久久久一区| 亚洲综合激情小说| 欧美中文一区二区三区| 亚洲国产毛片aaaaa无费看| 91麻豆国产在线观看| 国产精品超碰97尤物18| 99久久精品国产网站| 亚洲国产视频一区二区| 欧美精品日韩一区| 免费成人在线观看| 国产精品污网站| 91黄色在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 久久久久久久久久久99999| 国产精品一级在线| 亚洲欧洲av在线| 欧美一级二级三级蜜桃| 国内精品不卡在线| 一区二区在线观看视频 | 欧美性猛交xxxx乱大交退制版| 经典三级视频一区| 香港成人在线视频| 国产精品人人做人人爽人人添| 欧美xxxxx裸体时装秀| 亚洲视频一二区| 国产一区二区精品久久99| 亚洲国产综合人成综合网站| 欧美一区二区三区在线电影 | av在线不卡电影| 日日骚欧美日韩| 五月天中文字幕一区二区| av亚洲精华国产精华精| 国产精品久久久久9999吃药| 欧美激情在线看| 国产精品素人视频| 亚洲人成人一区二区在线观看| 亚洲品质自拍视频网站| 亚洲一区二区成人在线观看| 香蕉久久一区二区不卡无毒影院 | av高清不卡在线| 在线成人av网站| 色综合久久精品| 欧美在线观看视频在线| 9l国产精品久久久久麻豆| 国产mv日韩mv欧美| 不卡一二三区首页| 一本一道波多野结衣一区二区| 看片的网站亚洲| 国产麻豆视频一区二区| 激情综合色播激情啊| 蜜桃av一区二区| 麻豆精品在线视频| 国产精品乡下勾搭老头1| 激情久久五月天| 国产v综合v亚洲欧| 日本黄色一区二区| 欧美日韩国产精品成人| 欧美一区二区三区电影| 日本一区二区三区久久久久久久久不| 欧美xxx久久| 亚洲乱码国产乱码精品精98午夜| 亚洲一区电影777| 九九视频精品免费| 国产91综合一区在线观看| 欧美午夜精品久久久| 精品国产乱码久久久久久浪潮| 精品国产乱码久久久久久久| 国产精品久久久久影院老司| 丁香亚洲综合激情啪啪综合| 欧美精品一卡二卡| 韩国欧美一区二区| 一区二区三区四区国产精品| 日韩欧美一区二区不卡| 日韩精品电影一区亚洲| 国产精品亲子乱子伦xxxx裸| 精品国产91九色蝌蚪| 国产大陆精品国产| 欧美日韩精品专区| 在线播放欧美女士性生活| 日本一区二区动态图| 久久av中文字幕片| 色婷婷av一区二区| 国产福利一区二区三区视频 | 日本v片在线高清不卡在线观看| 国产日韩精品一区二区浪潮av| 亚洲韩国一区二区三区| 国产成人精品aa毛片| 欧美一卡2卡3卡4卡| 亚洲欧美另类在线| 成人精品鲁一区一区二区| 精品国产制服丝袜高跟| 亚洲精品免费电影| 不卡视频免费播放| 国产色产综合色产在线视频| 美女脱光内衣内裤视频久久影院| 精品视频在线免费看| 成人一区二区三区视频在线观看| 日韩精品一区二区三区视频| 亚洲午夜免费电影| 欧美一区2区视频在线观看| 奇米综合一区二区三区精品视频| 精品日韩在线观看| 成人永久免费视频| 一区二区三区中文在线观看| 欧美日本免费一区二区三区| 国内久久精品视频| 亚洲人吸女人奶水| 欧美电影免费观看高清完整版| 奇米色一区二区|