📄 itimers.pas
字号:
{*******************************************************}
{ }
{ TiTimers Component }
{ }
{ Copyright (c) 1997,2003 Iocomp Software }
{ }
{*******************************************************}
{$I iInclude.inc}
{$ifdef iVCL}unit iTimers;{$endif}
{$ifdef iCLX}unit QiTimers;{$endif}
interface
uses
{$I iIncludeUses.inc}
{$IFDEF iVCL} iTypes, iGPFunctions, iMath;{$ENDIF}
{$IFDEF iCLX}QiTypes, QiGPFunctions, QiMath;{$ENDIF}
type
TiTimers = class(TCustomControl)
private
{$ifndef iCLX}
FWindowHandle : HWND;
FHandle1 : Integer;
FHandle2 : Integer;
FHandle3 : Integer;
FHandle4 : Integer;
FHandle5 : Integer;
FHandle6 : Integer;
FHandle7 : Integer;
FHandle8 : Integer;
FHandle9 : Integer;
{$else}
FHandle1 : QTimerH;
FHandle2 : QTimerH;
FHandle3 : QTimerH;
FHandle4 : QTimerH;
FHandle5 : QTimerH;
FHandle6 : QTimerH;
FHandle7 : QTimerH;
FHandle8 : QTimerH;
FHandle9 : QTimerH;
FHook1 : QTimer_hookH;
FHook2 : QTimer_hookH;
FHook3 : QTimer_hookH;
FHook4 : QTimer_hookH;
FHook5 : QTimer_hookH;
FHook6 : QTimer_hookH;
FHook7 : QTimer_hookH;
FHook8 : QTimer_hookH;
FHook9 : QTimer_hookH;
{$endif}
FEnabled1 : Boolean;
FEnabled2 : Boolean;
FEnabled3 : Boolean;
FEnabled4 : Boolean;
FEnabled5 : Boolean;
FEnabled6 : Boolean;
FEnabled7 : Boolean;
FEnabled8 : Boolean;
FEnabled9 : Boolean;
FInterval1 : Integer;
FInterval2 : Integer;
FInterval3 : Integer;
FInterval4 : Integer;
FInterval5 : Integer;
FInterval6 : Integer;
FInterval7 : Integer;
FInterval8 : Integer;
FInterval9 : Integer;
FOnTimer1 : TNotifyEvent;
FOnTimer2 : TNotifyEvent;
FOnTimer3 : TNotifyEvent;
FOnTimer4 : TNotifyEvent;
FOnTimer5 : TNotifyEvent;
FOnTimer6 : TNotifyEvent;
FOnTimer7 : TNotifyEvent;
FOnTimer8 : TNotifyEvent;
FOnTimer9 : TNotifyEvent;
procedure SetEnabled1 (const Value: Boolean);
procedure SetEnabled2 (const Value: Boolean);
procedure SetEnabled3 (const Value: Boolean);
procedure SetEnabled4 (const Value: Boolean);
procedure SetEnabled5 (const Value: Boolean);
procedure SetEnabled6 (const Value: Boolean);
procedure SetEnabled7 (const Value: Boolean);
procedure SetEnabled8 (const Value: Boolean);
procedure SetEnabled9 (const Value: Boolean);
procedure SetInterval1 (const Value: Integer);
procedure SetInterval2 (const Value: Integer);
procedure SetInterval3 (const Value: Integer);
procedure SetInterval4 (const Value: Integer);
procedure SetInterval5 (const Value: Integer);
procedure SetInterval6 (const Value: Integer);
procedure SetInterval7 (const Value: Integer);
procedure SetInterval8 (const Value: Integer);
procedure SetInterval9 (const Value: Integer);
{$ifndef iCLX}
procedure TimerProc(var Msg: TMessage);
{$else}
procedure TimerCallBack1; cdecl;
procedure TimerCallBack2; cdecl;
procedure TimerCallBack3; cdecl;
procedure TimerCallBack4; cdecl;
procedure TimerCallBack5; cdecl;
procedure TimerCallBack6; cdecl;
procedure TimerCallBack7; cdecl;
procedure TimerCallBack8; cdecl;
procedure TimerCallBack9; cdecl;
{$endif}
protected
procedure Paint; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;
property OnDblClick;
published
property Enabled1 : Boolean read FEnabled1 write SetEnabled1 default False;
property Enabled2 : Boolean read FEnabled2 write SetEnabled2 default False;
property Enabled3 : Boolean read FEnabled3 write SetEnabled3 default False;
property Enabled4 : Boolean read FEnabled4 write SetEnabled4 default False;
property Enabled5 : Boolean read FEnabled5 write SetEnabled5 default False;
property Enabled6 : Boolean read FEnabled6 write SetEnabled6 default False;
property Enabled7 : Boolean read FEnabled7 write SetEnabled7 default False;
property Enabled8 : Boolean read FEnabled8 write SetEnabled8 default False;
property Enabled9 : Boolean read FEnabled9 write SetEnabled9 default False;
property Interval1 : Integer read FInterval1 write SetInterval1 default 1000;
property Interval2 : Integer read FInterval2 write SetInterval2 default 1000;
property Interval3 : Integer read FInterval3 write SetInterval3 default 1000;
property Interval4 : Integer read FInterval4 write SetInterval4 default 1000;
property Interval5 : Integer read FInterval5 write SetInterval5 default 1000;
property Interval6 : Integer read FInterval6 write SetInterval6 default 1000;
property Interval7 : Integer read FInterval7 write SetInterval7 default 1000;
property Interval8 : Integer read FInterval8 write SetInterval8 default 1000;
property Interval9 : Integer read FInterval9 write SetInterval9 default 1000;
property OnTimer1 : TNotifyEvent read FOnTimer1 write FOnTimer1;
property OnTimer2 : TNotifyEvent read FOnTimer2 write FOnTimer2;
property OnTimer3 : TNotifyEvent read FOnTimer3 write FOnTimer3;
property OnTimer4 : TNotifyEvent read FOnTimer4 write FOnTimer4;
property OnTimer5 : TNotifyEvent read FOnTimer5 write FOnTimer5;
property OnTimer6 : TNotifyEvent read FOnTimer6 write FOnTimer6;
property OnTimer7 : TNotifyEvent read FOnTimer7 write FOnTimer7;
property OnTimer8 : TNotifyEvent read FOnTimer8 write FOnTimer8;
property OnTimer9 : TNotifyEvent read FOnTimer9 write FOnTimer9;
property Visible default False;
property PopupMenu;
property Width default 28;
property Height default 28;
end;
implementation
//****************************************************************************************************************************************************
constructor TiTimers.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
ControlStyle := [csCaptureMouse, csClickEvents, csDoubleClicks, csReplicatable];
Width := 28;
Height := 28;
Visible := False;
FInterval1 := 1000;
FInterval2 := 1000;
FInterval3 := 1000;
FInterval4 := 1000;
FInterval5 := 1000;
FInterval6 := 1000;
FInterval7 := 1000;
FInterval8 := 1000;
FInterval9 := 1000;
{$WARNINGS OFF}
{$ifndef iCLX}
FWindowHandle := AllocateHWnd(TimerProc);
{$endif}
{$WARNINGS ON}
end;
//****************************************************************************************************************************************************
destructor TiTimers.Destroy;
begin
{$ifndef iCLX}
if FHandle1 <> 0 then KillTimer(FWindowHandle, 1);
if FHandle2 <> 0 then KillTimer(FWindowHandle, 2);
if FHandle3 <> 0 then KillTimer(FWindowHandle, 3);
if FHandle4 <> 0 then KillTimer(FWindowHandle, 4);
if FHandle5 <> 0 then KillTimer(FWindowHandle, 5);
if FHandle6 <> 0 then KillTimer(FWindowHandle, 6);
if FHandle7 <> 0 then KillTimer(FWindowHandle, 7);
if FHandle8 <> 0 then KillTimer(FWindowHandle, 8);
if FHandle9 <> 0 then KillTimer(FWindowHandle, 9);
{$WARNINGS OFF}
DeallocateHWnd(FWindowHandle);
{$WARNINGS ON}
{$else}
if Assigned(FHook1) then QTimer_hook_destroy(FHook1);
if Assigned(FHook2) then QTimer_hook_destroy(FHook2);
if Assigned(FHook3) then QTimer_hook_destroy(FHook3);
if Assigned(FHook4) then QTimer_hook_destroy(FHook4);
if Assigned(FHook5) then QTimer_hook_destroy(FHook5);
if Assigned(FHook6) then QTimer_hook_destroy(FHook6);
if Assigned(FHook7) then QTimer_hook_destroy(FHook7);
if Assigned(FHook8) then QTimer_hook_destroy(FHook8);
if Assigned(FHook9) then QTimer_hook_destroy(FHook9);
if Assigned(FHandle1) then QTimer_destroy(FHandle1);
if Assigned(FHandle2) then QTimer_destroy(FHandle2);
if Assigned(FHandle3) then QTimer_destroy(FHandle3);
if Assigned(FHandle4) then QTimer_destroy(FHandle4);
if Assigned(FHandle5) then QTimer_destroy(FHandle5);
if Assigned(FHandle6) then QTimer_destroy(FHandle6);
if Assigned(FHandle7) then QTimer_destroy(FHandle7);
if Assigned(FHandle8) then QTimer_destroy(FHandle8);
if Assigned(FHandle9) then QTimer_destroy(FHandle9);
{$endif}
inherited;
end;
//****************************************************************************************************************************************************
procedure TiTimers.SetBounds(ALeft, ATop, AWidth, AHeight: Integer);
begin
AWidth := 28;
AHeight := 28;
inherited;
end;
//****************************************************************************************************************************************************
procedure TiTimers.Paint;
var
i, x, y : Integer;
begin
with Canvas do
begin
Pen.Color := clBtnHighlight;
PolyLine([Point(0,Height-1), Point(0,0), Point(Width-1,0)]);
Pen.Color := clBtnShadow;
PolyLine([Point(Width-1, 1), Point(Width-1,Height-1), Point(0,Height-1)]);
Pen.Color := clBlack;
Brush.Color := clWhite;
Ellipse(6, 6, 23, 23);
PolyLine([Point(14,9), Point(14,14), Point(18,14)]);
Pen.Color := clMaroon;
for i := 0 to 11 do
begin
x := 14 + Round(Cos(DegToRad(i*30))*6);
y := 14 - Round(Sin(DegToRad(i*30))*6);
{$ifdef iVCL}Polyline([Point(x, y), Point(x+1, y+1)]);{$endif}
{$ifdef iCLX}Polyline([Point(x, y), Point(x, y) ]);{$endif}
end;
end;
end;
//****************************************************************************************************************************************************
procedure TiTimers.SetEnabled1(const Value: Boolean);
{$ifdef iCLX}
var
Timeout : TMethod;
{$endif}
begin
if FEnabled1 <> Value then
begin
FEnabled1 := Value;
{$ifndef iCLX}
case FEnabled1 of
False : if FHandle1 <> 0 then
begin
KillTimer(FWindowHandle, FHandle1);
FHandle1 := 0;
end;
True : if FHandle1 = 0 then FHandle1 := SetTimer(FWindowHandle, 1, FInterval1, nil);
end;
{$else}
case FEnabled1 of
False : if Assigned(FHandle1) then QTimer_stop(FHandle1);
True : if not (csDesigning in ComponentState) then
begin
if not Assigned(FHandle1) then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -