///////////////////////////////////////////
////默认脚本SDK模板  object pascal 语言编写
////作者:  dong (您可以随意修改脚本,并署上您的名字)
////创建时间: 2006- - 
////说明:
///////////////////////////////////////////
////更新历史:
////2006-6-13  加入saveini savedefini 两个事件,用于自动保存配置信息
////2006-6-18  添加lastmaskimage  添加 DateUnit 扩展函数库
////2006-6-25 添加对指定文件夹/硬盘分区 的读写检测
///////////////////////////////////////////


//插件初始化函数   用于资源和图片的载入等初始化
procedure Init;
var
  num,isReturn;  //num表示动画图片的个数， isReturn表示是否是来回的动画
begin
  //只需要修改num 和 isReturn 就可以了^_^
  num :=  20;
  isReturn := true;

  xBool[100] := isReturn; //图片是否循环

  xInt[100] := num-1;  //第一组图片最后图片的序号
  xInt[101] := 2*num-1; //第二组图片最后图片的序号


  //设置背景图片的坐标
  BackgroundLeft := 35;
  BackgroundTop := -11;

  //载入图片控件,文字控件,按钮控件,图片资源等等
  //载入示例图片,XDeskShowPath表示XDeskShow安装路径 WidgetPath表示当前插件路径
  LoadListPicResource(0,20, widgetPath + 'KukufishLeft.png' );
  LoadListPicResource(20,20, widgetPath + 'KukufishRight.png' );


  //修改widet的宽度和高度为 序号0的图片控件的宽度和高度
  widgetWidth := GetResPicWidth(0);
  widgetHeight := GetResPicHeight(0);


  xInt[0] := 0;
  xBool[0] := true ;
end;

//画widget整个外观的函数
procedure OnDrawWidget;
var
  num1,num2,isReturn,isEnd;
begin
  num1 :=  xInt[100];
  num2 :=  xInt[101];
  isReturen :=  xBool[100];
  isEnd  :=  xBool[0];  //是否到头了

  if not isReturen then
  begin
    if MoveDirection='left' then
    begin
      //左移
        if xInt[0]>=num1  then
        begin
          xInt[0] := 0;
        end
        else
          xInt[0] := xInt[0] + 1;
    end
    else
    begin
      //右移
        if (xInt[0] >= num2) or  (xInt[0] <= num1 )  then
        begin
          xInt[0] := num1 + 1;
        end
        else
          xInt[0] := xInt[0] + 1;
    end;

  end
  else
  begin
    if MoveDirection='left' then
    begin
      //左移
          if isEnd then
          begin
            if xInt[0] >= num1 then
            begin
              xInt[0] :=  num1 - 1;
              isEnd := false;
            end
            else
              xInt[0] := xInt[0] + 1;
          end
          else
          begin
            if (xInt[0]<=0) or (xInt[0]>=num1)  then
            begin
              isEnd := true;
              xInt[0] := 1;
            end
            else
              xInt[0] := xInt[0] - 1;
          end;
    end
    else
    begin
      //右移
          if isEnd then
          begin
            if (xInt[0] >= num2) or  (xInt[0] <= num1 )  then
            begin
              xInt[0] :=  num2 - 1;
              isEnd := false;
            end
            else
              xInt[0] := xInt[0] + 1;
          end
          else
          begin
            if xInt[0]<=num1 + 1 then
            begin
              isEnd := true;
              xInt[0] := num1 + 2;                  
            end
            else
              xInt[0] := xInt[0] - 1;
          end;


    end;

  end;

  DrawImage(xInt[0],0,0);

  xBool[0] := isEnd;

  
  //可以在这里添加任何对widget外观的绘制代码.

  //系统自绘所有widget控件的函数. 如果不调用此函数将不会显示所有图片/文字/按钮控件
  InheritDrawWidget;

  //可以在这里添加任何对widget外观的绘制代码    



end;

//启动插件事件
procedure StartWidget;
begin
  //可以在这里添加在启动widget时需要做的一些事情的代码.例如启动定时器
  {......}
  //示例:将序号为0的定时器启动,间隔时间1000毫秒
  MoveDirection:='left';

  if RandomEx(2)>=1 then
    SetWidgetRandomMove(true,'left')
  else
    SetWidgetRandomMove(true,'right');

  SetTimer(0,50,true);
  //SetTimer(1,30*1000,true);



end;

//定时器每到预定时间时执行此函数代码,index为定时器序号
procedure OnTimer(index);
begin
  Case index of
    0:
    begin
      //当序号为 0 的定时器到预定时间时,这里添加的代码将被执行
      {......}
      RefreshWidget;
    end;
    1:
      begin
      //当序号为 1 的定时器到预定时间时,这里添加的代码将被执行
      //以下依次类推,可以自行添加序号.最多可以有11个定时器,序号最多到10
      {......}
        if RandomEx(2)>=1 then
            SetWidgetBottomMost
        else
            SetWidgetTopMost;

      end;
    end;

end;

//当按钮控件被单击(鼠标在按钮上按下并抬起后)时,执行此函数代码. index为被点击的按钮的序号
procedure OnButtonClick(index);
begin
  Case index of
    0:
      begin
      //当序号为 0 的按钮被单击时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应按钮的序号
      {......}

      end;
    1:
      begin

      end;
    end;

end;

//当按钮控件被鼠标悬停在上面时,执行此函数代码. index为被悬停的按钮的序号
procedure OnButtonHot(index);
begin
  RefreshWidget;
  Case index of
    0:
      begin
      //当序号为 0 的按钮被悬停时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应按钮的序号
      {......}

      end;
    1:
      begin

      end;
    end;
end;

//当按钮控件被鼠标按下时,执行此函数代码. index为被被按下的按钮的序号
procedure OnButtonDown(index);
begin
  RefreshWidget;
  Case index of
    0:
      begin
      //当序号为 0 的按钮被鼠标按下时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应按钮的序号
      {......}

      end;
    1:
      begin

      end;
    end;
end;

//当鼠标单击widget时触发此事件,执行此函数内代码
procedure OnClickWidget;
begin
  //当widget被鼠标单击时,这里添加的代码将被执行
  {......}

  MoveSpeed := MoveSpeed + RandomEx(10);

end;


//当鼠标双击widget时触发此事件,执行此函数内代码
procedure OnDBClickWidget;
begin
  //当widget被双击时,这里添加的代码将被执行
  {......}
end;

//当鼠标进入widget上方时,触发此事件,将执行此函数代码.
procedure OnMouseEnterWidget;
begin
 // MoveFlag := false;
end;

//当鼠标离开widget上方时,触发此事件,将执行此函数代码.
procedure OnMouseLeaveWidget;
begin
 // MoveFlag := true;
end;

//当鼠标在widget上移动的时候,调用此函数.
procedure OnMoveOnWidget;
begin

end;

//当有文件拖放到widget上时,触发此事件,将执行此函数代码.
procedure OnDropFile(filename);
begin
  // filename为被拖放到widget上的文件的完整路径和文件名.在这里写处理此事件的代码
  {...}
end;      

//当xdeskshow的widget获得焦点时,触发此事件,并执行此函数内代码.
procedure OnActiveWidget;
begin

end;


//当xdeskshow的widget失去焦点时,触发此事件,并执行此函数内代码.
procedure OnDeActiveWidget;
begin

end;


//当在widget上有按键时触发此事件,并执行此函数内代码. key为按下的键的代码. ctl=true表示ctrl键按下,alt=true表示Alt键按下,shf=true表示Shift键按下. 否则都为0.
procedure OnKeyDownWidget(key,ctl,alt,shf);
begin
  //print('按下的键的代码是: '+inttostr(key) );
  //if ctl then print('Ctrl键被按下');


end;

//当鼠标滚轮在widget中向上滚动时触发此事件,执行此函数内代码
//MousePosX,MousePosY为鼠标当前坐标
procedure OnWidgetMouseWheelUp(MousePosX,MousePosY);
begin
  //鼠标滚轮在widget中向上滚动时,这里添加的代码将被执行
  {......}
end;

//当鼠标滚轮在widget中向下滚动时触发此事件,执行此函数内代码
//MousePosX,MousePosY为鼠标当前坐标
procedure OnWidgetMouseWheelDown(MousePosX,MousePosY);
begin
  //鼠标滚轮在widget中向下滚动时,这里添加的代码将被执行
  {......}
end;



//当有新驱动器添加时触发此事件,执行此函数内代码
//例如:USB盘插入时
procedure OnDriveAdd(DriveType,Path);
begin

end;

//当有新驱动器添加时触发此事件,执行此函数内代码
//例如:USB盘拔出时
procedure OnDriveRemoved(DriveType,Path);
begin
  
end;


//当邮件检测完毕时,这里添加的代码将被执行
//index为检测开始时赋予的序号，count为检测获得的邮件数量
procedure CheckEmailCountCompleted(index,count);
begin
  Case index of
    0:
      begin
      //当序号为 0 的邮件检测完毕时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应的序号

      end;
    1:
      begin

      end;
    end;
end;




//当获取网页完毕时,这里添加的代码将被执行
//index为获取网页html开始时赋予的序号，str为获得的指定网页的html字符串,filename为网页文件存放的文件名,用完后建议删除filename指向的文件
procedure GetHtmlStrCompleted(index,str,filename);
begin
  Case index of
    0:
      begin
      //当序号为 0 的网页获取完毕时,这里添加的代码将被执行
      //以下依次类推,可以自行添加对应的序号

      end;
    1:
      begin

      end;
    end;
  DeleteFile(filename);
end;

//当自定义菜单被点击时,这里添加的代码将被执行
//index为自定义菜单的序号（0－8）
procedure OnCustomMenuClick(index);
begin
  Case index of
    0:
      begin
      //当序号为 0 的自定义菜单被点击时,这里添加的代码将被执行
      //以下依次类推,0至8号,可以自行添加对应序号的响应代码
      //  showmessage('第一个自定义菜单被点击哦！');

      end;
    1:
      begin

      end;
    end;
end;

//当关闭widget时,触发此事件,并执行此函数内代码.
procedure OnCloseWidget;
begin


end;

//当退出XDeskShow时,触发此事件,并执行此函数内代码.
procedure OnExitXDS;
begin


end;


//当克隆本插件时,触发此事件,并执行此函数内代码.
procedure OnCloneWidget;
begin


end;

//当widget切换脚本的时候,触发此事件,并执行此函数内代码.
procedure OnBeforeChangeScript;
begin


end;


//当widget保存配置信息的时候触发此事件,并执行此函数内代码.
procedure OnSaveIni;
begin
  //如果自定义了某些变量,请在这里将自定义的配置信息保存
  //SaveIni(name,value);

end;

//当widget保存默认配置信息的时候触发此事件,并执行此函数内代码.
procedure OnSaveDefIni;
begin
  //如果自定义了某些变量,可以在这里将自定义的配置信息写入默认ini文件,以便克隆新建的插件沿用此配置  
  //SaveDefIni(name,value);

end;


//当在Init初始化的时候CreateFolderMon指定的分区/文件夹被改变的时候触发此事件
//filename为被改变/读写的文件名
procedure OnFolderChange(filename);
begin


end;










 

