挑战未知 | 帮朋友做小插件

为帮助好友考研准备,利用ObjectPascal语言快速开发了一款基于鱼鱼软件平台的考研倒计时桌面小插件。该插件实现了时间计算、显示等功能,并通过定时更新展示剩余天数。
我一个最好的朋友考研,前几天让我帮他做个考研倒计时的插件(基于鱼鱼软件的一个小插件),语言是object pascal...以前从来没有接触过Delphi,抱着试一试的心里,下了鱼鱼软件,和sdk开发文档,又把object pascal的教程下了...花了两小时做完了,代码刚开始能看懂,但不会用,看了教程以后,自己试,然后就完成了,虽然算是二次开发,用的是鱼鱼的函数...但是对我来说也算个挑战,最后发布的时候有点问题....不过给他一个人用,还可以.以后有时间再研究...挑战未知很有成就感....看来编程重要的是思想....:)我体会到了"编程是一种创造,而不是默写"这句话的真意,虽然写了很多人都可以写的简单的不到50行的代码,可是,我感觉自己学到了很多东西.
以下是效果图:
///////////////////////////////////////////
////object pascal 语言编写
////作者:   张汉东
////创建时间: 2006-9-26

//插件初始化函数   用于资源和图片的载入等初始化
procedure Init;
var
    str;
var
    Date1,Date2:TDateTime;
    i:real;
begin



  Date1:=Now;
  Date2:=StrToDate('2007-1-20');
  i:=Date1-Date2;//i就是2个时间差的天数
  str :=IntToStr(i);


  //设置整个widget插件的宽度和高度
  widgetWidth := 800;
  widgetHeight :=200;

  //设置背景图片的坐标
  BackgroundLeft := 0;
  BackgroundTop := 0;

  //载入图片控件,文字控件,按钮控件,图片资源等等
  //载入示例图片,XDeskShowPath表示XDeskShow安装路径 WidgetPath表示当前插件路径
  AddImage(0,XDeskshowPath+'Plugins/daojishi/Img1.png');
  AddImage(1,XDeskshowPath+'Plugins/daojishi/daojishi.png');
  //修改widet的宽度和高度为 序号0的图片控件的宽度和高度
 // widgetWidth := GetImageIntegerPro(0,'width');
 // widgetHeight := GetImageIntegerPro(0,'height');

  //示例:创建一个文字控件 并设置其字体属性和坐标
  AddLabel(0,'考研倒计时:');
  SetLabelPro(0,'fontstr','255,0,0/-12/Arial/19/1000');
  SetLabelPro(0,'top','110');
  SetLabelPro(0,'left','70');
  SetLabelPro(0,'AutoSize','true');
  SetImagePro(1,'left','220');
  SetImagePro(1,'top','100');
  AddLabel(1,'天');
  AddLabel(2,str);
  SetLabelPro(1,'fontstr','255,0,0/-12/Arial/30/1000');
  SetLabelPro(1,'top','110');
  SetLabelPro(1,'left','400');
  SetLabelPro(2,'fontstr','14,248,67/-12/Arial/30/1000');
  SetLabelPro(2,'top','110');
  SetLabelPro(2,'left','280');
end;

//画widget整个外观的函数
procedure OnDrawWidget;
begin
  //可以在这里添加任何对widget外观的绘制代码.

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

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

end;

//启动插件事件
procedure StartWidget;
 var
      Y,M,D,H,Min,S,MS,str;
begin
  //可以在这里添加在启动widget时需要做的一些事情的代码.例如启动定时器
  {......}
     {
      y :=YearOf(now);
      M :=MonthOf(now);
      D :=DayOf(now);
      H :=HourOf(now);
      Min :=MinuteOf(now);
      S :=SecondOf(now);
      }

  //示例:将序号为0的定时器启动,间隔时间1000毫秒
  SetTimer(0,0,true);
  DecodeDateAndTime(Date,Y,M,D,Time,H,Min,S,MS);

  Showmessage('今天是'+inttostr(Y)+'年'+inttostr(M)+'月'+inttostr(D)+'日'+inttostr(H)+'时'+inttostr(Min)+'分'+inttostr(S)+'秒'+'--不知道怎么换行,就当这句是换行:)'+'时间宝贵。。。要告诉自己今天要学有所得!');


end;

//定时器每到预定时间时执行此函数代码,index为定时器序号
procedure OnTimer(index);
begin
  Case index of
    0:
    begin
      //当序号为 0 的定时器到预定时间时,这里添加的代码将被执行


    end;
    1:
      begin
      //当序号为 1 的定时器到预定时间时,这里添加的代码将被执行
      //以下依次类推,可以自行添加序号.最多可以有11个定时器,序号最多到10
      {......}

      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被鼠标单击时,这里添加的代码将被执行
  {......}
end;


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

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

end;

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

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;

//当widget的右键菜单弹出的时候触发此事件
procedure OnPopupMenu;
begin

end;


//当鼠标在widget上按下的时候触发此事件
procedure OnWidgetMouseDown(x,y,ctl,alt,shf);
begin


end;

//当文件拖放到按纽上时,如果按纽的AcceptDropFile属性为true,则触发此事件
procedure OnButtonDropFile(index,filename);
begin
  Case index of
    0:
      begin

      end;
    1:
      begin

      end;
    end;
end;
 其中的空函数,可以再添加其他功能,因为时间关系,先就这么凑合了,算是为兄弟考研做点贡献了!呵呵......
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值