原始翎风CLIENT8位 (4) frmMain 下的 OnIdle 事件

发布时间 2023-10-22 09:07:40作者: D7mir

原始翎风CLIENT8位
frmMain 下的 OnIdle 事件

在frmMain的Create 中
Application.OnIdle := AppOnIdle; //程序空闲事件 的方法

procedure AppOnIdle (Sender: TObject; var Done: Boolean);
原型是 procedure TForm1.ApplicationEvents1Idle(Sender: TObject;var Done: Boolean);

 

还定义了一个 procedure TfrmMain.ProcOnIdle;这个并没有用到。
var
done: Boolean; 实际也是调用AppOnIdle (self, done);
begin
AppOnIdle (self, done);
//DXTimerTimer (self, 0);
end;

TApplication.OnIdle
  当应用程序变为空闲时,OnIdle事件发生。
  使用OnIdle事件,可以写一个应用程序空闲时执行特定处理的事件处理程序。当应用程序不处理代码时,称为应用程序空闲。例如,当应用程序等待来自用户的输入时,应用程序为空闲。
  TIdleEvent类型是OnIdle事件的类型,它指向一个应用程序空闲时运行的方法。TIdleEvent类型有一个布尔型参数Done,默认时该参数为True。若参数Done为True,当OnIdle事件返回时,调用Windows API WaitMessage函数。只有在应用程序消息队列中出现一个新消息时,WaitMessage函数才放弃对其他应用程序的控制。参数Done为False时,即使应用程序不忙,也不放弃对其他应用程序的控制。
  当应用程序转移到空闲状态时,只调用一次OnIdle事件。除非参数Done设置为False,否则不连续调用OnIdle事件。将参数Done设置为False的应用程序,将消耗过多的CPU时间,从而影响整个系统性能。

具体的,在Additinal页面,选择组件ApplicationEvents进行研究。


设置 Done := TRUE;

if not DxDraw.CanDraw then exit; 判断 DXDRAW不能绘图则退出?

ProcessKeyMessages; //处理技能快捷键,使用技能 ,部分技能发送真实消息到网络,部分发送SPELL消息到消息队列
ProcessActionMessages; //处理步行+1,跑步+2,骑马+3,发送这些消息到消息队列,发送真实消息到网络
DScreen.DrawScreen (DxDraw.Surface);
g_DWinMan.DirectPaint (DxDraw.Surface);
DScreen.DrawScreenTop (DxDraw.Surface);
DScreen.DrawHint (DxDraw.Surface);

CursorSurface显示
光标表面绘图

判断有物品移动
如果不是移动物品名称不是金币 那么取得移动物品的外观的 图片,否则 是金币外观
如果外观不为空,
显示移动物品外观
显示移动物品名称 释放xDraw.Surface.Canvas.Release

根据 g_boDoFadeOut g_boDoFadeIn MakeDark

登录的时候显示圆形LOGO
g_ConnectionStep = cnsLogin


绘图
DxDraw.Primary.Draw (0, 0, DxDraw.Surface.ClientRect, DxDraw.Surface, FALSE);

if g_MySelf <> nil then begin //这里怎么为空? 是判断一下实际就执行了一次 g_MySelf? 但是又不太像

 

//处理技能快捷键,使用技能 ,部分技能发送真实消息到网络,部分发送SPELL消息到消息队列
ProcessKeyMessages;
在TfrmMain.AppOnIdle被调用
TfrmMain.MouseTimerTimer 中被调用
MouseTimer常使能 间隔50,获取鼠标位置,处理快捷技能ActionKey ,普通攻击,强制攻击,自动挖矿,自动捡取

 

//处理步行+1,跑步+2,骑马+3,发送这些消息到消息队列,发送真实消息到网络
ProcessActionMessages
在TfrmMain.AppOnIdle被调用