频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

Delphi开发98屏幕保护预览程序

来源:论坛 作者:delphifans 出处:巧巧读书 2006-01-09 进入讨论组
下一页 1 2 

  大家都知道windows屏幕保护程序的作用,而且新的屏幕保护程序越来越漂亮。如果在win98的桌面右键菜单选属性,就弹出显示器设置界面,有一个标签是设置屏幕保护程序的。

  在该页的画面上,有一个显示器图案,如果你选择win98所带的屏幕保护程序,这个屏幕保护程序就会在这个小'显示器'上自动运行,你可以直接看到运行效果.这功能大大方便了屏幕保护程序的选择,这就是win98对屏幕保护程序的新增接口:预览功能。

  目前大多数新推出的屏幕保护程序都支持这个接口。

  屏幕保护程序从它的诞生那时起,在同一时刻只能运行一个,不能多个同时运行,然而预览接口的推出,使同时预览多个屏幕保护程序成为可能,本文将向读者介绍如何用Delphi开发这样一个程序。

  1.屏幕保护预览接口

  屏幕保护预览接口的使用很简单,这是通过传给屏幕保护程序的命令行参数来实现的,该命令行参数格式为:

screensaver.exe/p#####

  其中#####为一个有效的窗口句柄的10进制表示。

  这个窗口我们可以称之为预览窗口。

  实际上,支持预览接口的屏幕保护程序将自己的窗口创建为预览窗口的子窗口来实现预览功能的。

  2.画面布局

  我们这个程序的窗口分为3部分,为倒'品'字形,上左部分列出所有可用的屏幕保护程序,上右部分列出所有预览的屏幕保护程序,下面当然是预览窗口了。

  用Delphi实现时,首先在Form里放2个TPanel组件,Panel1对齐方式为顶部对齐,Panel2为撑满用户区,再在Panel1中放1个TFileListBox组件和一个TListBox组件,FileListBox1左对齐,ListBox1撑满用户区.
这样,FileListBox1为屏幕保护列表,ListBox1为预览列表,Panel2为预览窗口。

  3.列出屏幕保护程序.

  将FileListBox1的Mask属性设为'*.scr',这是屏幕保护程序的扩展名。

  在FormCreate方法中将FileListBox1.directory设为windows系统目录GetSystemDirectory;

  4.预览屏幕保护程序.

  在FileListBox1DblClick方法中运行该屏幕保护程序,并将Panel2的窗口句柄传给它.
WinExec(pchar(FileListBox1.FileName+'/p'+inttostr(Panel2.handle)),SW_Show);
运行程序,怎么样?COOL!

  5.增加一些新特性:隐藏/显示/关闭。

  增加2个函数:用于更新ListBox1。

functionEnumProc(
h:HWND;//handleofchildwindow
l:integer//application-definedvalue
):boolean;stdcall;
varbuf:array[0..255]ofchar;
begin
GetWindowText(h,buf,sizeof(buf)-1);
ifiswindowvisible(h)then
Form1.ListBox1.items.add
(''+strpas(buf)+':'+inttostr(h))
else
Form1.ListBox1.items.add
('-'+strpas(buf)+':'+inttostr(h));
Result:=true;
end;

procedureTForm1.Fresh1;
begin
ListBox1.clear;
enumChildwindows(Panel2.handle,
TFNWndEnumProc(@enumproc),0);
end;

  增加一个弹出菜单Popupmenu1,3个菜单项,'Show,Hide,Close',将ListBox1.popupmemu指向Popupmenu1。

  Hide的处理函数是:

procedureTForm1.Hide1Click(Sender:TObject);
varh:integer;
s:string;
begin
ifListBox1.itemindex=-1thenexit;
s:=Listbox1.items[ListBox1.itemindex];
h:=strtoint(copy(s,pos(':',s)+1,length(s)));
ShowWindow(h,SW_HIDE);
Fresh1;
end;

  Show的处理函数是:

procedureTForm1.Show1Click(Sender:TObject);
varh:integer;
s:string;
begin
ifListBox1.itemindex=-1thenexit;
s:=Listbox1.items[ListBox1.itemindex];
h:=strtoint(copy(s,pos(':',s)+1,length(s)));
ShowWindow(h,SW_SHOW);
Fresh1;
end;

  Close的处理函数是:

procedureTForm1.Close1Click(Sender:TObject);
varh:integer;
s:string;
begin
ifListBox1.itemindex=-1thenexit;
s:=Listbox1.items[ListBox1.itemindex];
h:=strtoint(copy(s,pos(':',s)+1,length(s)));
PostMessage(h,WM_QUIT,0,0);
Fresh1;
end;

  本程序在Delphi6.0下调试通过,应该能用Delphi6.0/7.0编译。观看地址: http://www.qqread.com/delphi/q042207400.html 更多文章 更多内容请看Wlan组网----家庭专题专题,或进入讨论组讨论。
下一页 1 2 
收藏此文】【 】【打印】【关闭
较早的文章:用Delphi7设计FTP上传软件

较新的文章:不明就里?
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章