我一个最好的朋友考研,前几天让我帮他做个考研倒计时的插件(基于鱼鱼软件的一个小插件),语言是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; |
为帮助好友考研准备,利用ObjectPascal语言快速开发了一款基于鱼鱼软件平台的考研倒计时桌面小插件。该插件实现了时间计算、显示等功能,并通过定时更新展示剩余天数。

2749

被折叠的 条评论
为什么被折叠?



