博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
delphi 一个时钟引发的事情
阅读量:4634 次
发布时间:2019-06-09

本文共 3505 字,大约阅读时间需要 11 分钟。

    学习c# 事件之后,此前一直云里雾里.后来看到一句话:事件是基于观察者模式,有种扒开云雾见彩虹的感觉.于是趁热打铁重写了以前一个小程序

    功能: 定时触发或做某些事

 

     作用:为了方便员工们不需要每天重复统计数据之后再一条一条信息发送到决策人的手机里,于是就做了个定时统计数据并自动发送短信的功能

 

    设计:

              TClock类, TClockEventArgs类 ,TWorker类

 

 

//时,分,秒事件指针   TOnSecondChangeEvent = procedure (sender:TObject;e:TClockEventArgs) of object;   TOnMinuteChangeEvent = procedure (sender:TObject;e:TClockEventArgs) of object;   TOnHourChangeEvent = procedure (sender:TObject;e:TClockEventArgs) of object;

  

TClock = class private     FSecond: Integer; //秒     FMinute: Integer; //分     FHour: Integer;   //时     FClockStop: Boolean; //是否停止     FOnSecondChange: TOnSecondChangeEvent;     FOnMinuteChange: TOnMinuteChangeEvent;     FOnHourChange: TOnHourChangeEvent; procedure SetOnSecondChange(const Value: TOnSecondChangeEvent); procedure SetHour(const Value: Integer); procedure SetMinute(const Value: Integer); procedure SetOnHourChange(const Value: TOnHourChangeEvent); procedure SetOnMinuteChange(const Value: TOnMinuteChangeEvent); procedure SetSecond(const Value: Integer); procedure SetClockStop(const Value: Boolean); public constructor Create(); procedure Run();    //运行 property ClockStop:Boolean read FClockStop write SetClockStop; property Hour:Integer read FHour write SetHour; property Minute:Integer read FMinute write SetMinute; property Second:Integer read FSecond write SetSecond; property OnSecondChange:TOnSecondChangeEvent read FOnSecondChange write SetOnSecondChange; property OnMinuteChange:TOnMinuteChangeEvent read FOnMinuteChange write SetOnMinuteChange; property OnHourChange:TOnHourChangeEvent read FOnHourChange write SetOnHourChange; end;
procedure TClock.Run(); //run实现var ClockEventArgs:TClockEventArgs;begin   ClockEventArgs:= TClockEventArgs.Create();   while not FClockStop do   begin    if Assigned(OnSecondChange) then    begin      OnSecondChange(self,ClockEventArgs);    end;    if( Assigned(OnMinuteChange)  and (MinuteOfTheHour(Now) <> self.Minute)) then    begin       OnSecondChange(Self,ClockEventArgs);    end;    if( Assigned(OnHourChange) ) and ( Hour <> HourOfTheDay(Now)) then    begin       OnHourChange(Self,ClockEventArgs);    end;    Sleep(1000 * 60);    ClockEventArgs.Hour := HourOfTheDay(Now);    ClockEventArgs.Minute := MinuteOfTheDay(Now);    ClockEventArgs.Second := SecondOfTheMinute(Now);   end;end;

  

 
TClockEventArgs = class private     FSecond: Integer;     FMinute: Integer;     FHour: Integer; procedure SetHour(const Value: Integer); procedure SetMinute(const Value: Integer); procedure SetSecond(const Value: Integer); public constructor Create(); published property Hour:Integer read FHour write SetHour; property Minute:Integer read FMinute write SetMinute; property Second:Integer read FSecond write SetSecond; end;

 

TWorker = class   private     ConectStr:String;     public      Constructor Create(theClock:TClock;ConnectString:string);      procedure DoSMSCheck(sender:TObject;e:TClockEventArgs); //短信      procedure DoWork(sender:TObject;e:TClockEventArgs);   end;

 

constructor TWorker.Create(theClock:TClock;ConnectString: string); begin   Self.ConectStr := ConnectString;   theClock.OnMinuteChange := Self.DoWork;   theClock.OnHourChange := self.DoSMSCheck; end;

创建实例

var  Clock:TClock;  Worker:TWorker; begin      Clock := TClock.Create();      Worker := TWorker.Create(Clock,ProcessMsgForm.MainConnect.ConnectionString);      Clock.Run; //时钟开启 if Clock.FClockStop then begin        Clock.Free;        Worker.Free; end; end;

 

转载于:https://www.cnblogs.com/pengshao/archive/2012/01/30/2332001.html

你可能感兴趣的文章
变动信息
查看>>
angularjs post 跨域
查看>>
Flask——部署
查看>>
php 操作分表代码
查看>>
java2
查看>>
复制图片的一部分
查看>>
调试uIP出现死机问题
查看>>
AttributeError: 'dict' object has no attribute 'status_code'
查看>>
poj2135最小费用最大流经典模板题
查看>>
hdu 4355 Party All the Time (2012 Multi-University Training Contest 6 ) 三分搜索
查看>>
POJ 2528 Mayor's posters(线段树)
查看>>
【转】[退役]纪念我的ACM——headacher@XDU
查看>>
利用STl实现队列
查看>>
android中The connection to adb is down,问题和解决 AndroidEclipseAntXML
查看>>
项目需求分析与建议
查看>>
UVa 10112 - Myacm Triangles
查看>>
给同一个按钮添加单双击事件
查看>>
form
查看>>
powershell输出错误信息到文件
查看>>
VS不显示最近打开的项目
查看>>