admin管理员组文章数量:1649938
一、关于控制面板程序
在Windows中提供了一个控制面板窗口,一个控制面板窗口就象Windows的控制中心。在窗口中有诸如 “系统”、“多媒体”图标,通过双击这些不同的图标,就可以打开不同的控制面板程序查看系统状况和对系统进行设置了。
如何在控制面板中添加自己的控制面板程序呢?首先来了解以下控制面板程序的原理。一个控制面板程序就是一个动态连接库(DLL)。在库文件中必须建立一个名称为CPLApplet的输出回调函数,在函数中加入对Windows调用的响应代码,编辑成动态连接库文件。库文件将库文件的扩展名改为CPL,然后将文件拷贝到 Windows\System子目录下,系统在启动时会自动搜索扩展名为Cpl的文件。搜索到文件之后,系统会装入文件并调用CPLApplet函数,这时函数中的代码就开始工作,执行弹出系统设置窗口等操作。
CPLApplet函数原型:
function CPlApplet(
hwndCPl: THandle; //Indentifies the main window of the controlling application.
uMsg: DWORD; //Specifies the message being sent to the Control Panel application
lParam1, lParam2: Longint //Specify additional message-specific information
): Longint; stdcall;
CplApplet函数是控制面板与控制面板应用程序通讯的唯一方式。一个控制面板程序中的CplApplet函数的基本框架结构如下:
lParam1, lParam2: Longint): Longint; stdcall;
begin
//...
case (umsg) of
CPL_INIT : begin ... end;
CPL_GETCOUNT:begin ... end;
CPL_STARTWPARMS :begin ... end;
CPL_INQUIRE : begin ... end;
CPL_NEWINQUIRE : begin ... end;
CPL_DBLCLK : begin ... end;
CPL_STOP : begin ... end;
CPL_EXIT : begin ... end;
CPL_SETUP : begin ... end;
end;
//函数的返回值取决于uMsg
end;
第一步:
在Delphi的菜单中选File | New ,在New Items窗口中会看到有一个 Control Panel Application 选项,点击这个选项,然后再按OK键,就可以建立一个基本的控制面板程序。在这个程序的工程文件包中包含两个文件,一个是工程文件 Project1.dpr。按Ctrl+F12打开View Units窗口打开Project1,可以看到代码的第一行是library Project1; ,另外在代码中还有一行:exports CPlApplet; ,这说明程序已经自动建立了输出回调函数。
另一个文件是控制面板程序控制文件(姑且这么称呼它)Unit1.pas。这个程序代码中建立了一个TAppletModule类,这个类就是控制面板程序控制类。同时程序还会建立一个调试、控制窗口AppletModule1。在窗口左边的列表框中有一项 AppletModule1,右键点击该项,在弹出菜单中选Install Control Panel Applet项编译并安装控制面板程序。如果安装成功,再右键点击AppletModule1,在弹出菜单中选Launch Control Panel运行控制面板。在控制面板中是不是增加了一个 AppletModule1项?
Delphi向导创建的工程文件如下:
library ControlPanelDemo;
uses
CtlPanel,
AppletModule in 'AppletModule.pas' {ControlPanel: TAppletModule},
ControlPanelMain in 'ControlPanelMain.pas' {FormMain};
exports CPlApplet;
{$R *.RES}
{$E cpl}
begin
Application.Initialize;
Application.CreateForm(TControlPanel, ControlPanel);
Application.Run;
end.
在上面的DPR文件中,Application对象的类型是TAppletApplication,而不是TApplication,它是在CtlPanel单元中申明的。而且CplApplet函数也已经由CtrlPanel单元定义好了。
第二步:更改AppletModule的属性
一个AppletModule对象代表一个对话框(即applet),一个CPL应用程序可以包含多个对话框。你可以通过Delphi向导来添加多个AppletModule。
AppletIcon属性:指定一个图标,此图标将出现在控制面板中
Caption属性:显示图标下面的文字。
Help属性:出现在控制面板窗口的状态栏上的文字。
ResidIcon属性:图标资源id,此属性与AppletIcon属性互斥。
ResidName属性:字符串资源id,此属性与Caption属性互斥。
ResidInfo属性:字符串资源id,此属性与Help属性互斥。
第三步:编写事件句柄
在控制面板中,当鼠标双击对话框的图标时,相应的AppletModule对象会产生OnActivate事件。为了响应鼠标的双击,你需要为TAppletModule的OnActivate事件属性提供一个事件句柄。
uses ControlPanelMain;
//=== 鼠标响应事件 ===
procedure TControlPanel.AppletModuleActivate(Sender: TObject; Data: Integer);
begin
with TFormMain.Create(Application) do
begin
if ShowModal = mrOk then
Free;
end;
end;
图标和程序标题设置好以后,再重复上面的Install Control Panel Applet编译并安装程序,然后再选Launch Control Panel运行。双击新建立的程序图标,看看,建立一个控制面板程序就是这么简单!
当然,这只是一个最简单的控制面板程序,它只是响应OnActive事件并弹出一个窗口,在OnActive事件中的Data是一个比较重要的参数,它是控制面板程序调用程序传递给程序的参数,利用这个参数可以对不同的调用弹出不同的窗口,例如你要建立一个时间/日期调整控制程序,你可以做以下代码:
procedure TAppletModule1.AppletModuleActivate(Sender: TObject;
Data: Integer);
begin
with TForm2.Create(Application) do begin file://以下是伪代码:
Case Data of
1:DoChangeTime; file://显示改变系统时间窗口
2:DoChangeDate; file://显示改变系统日期窗口
end;
end;
end;
这样当外部程序以不同的参数调用程序时,程序能弹出不同的窗口,例如 RunDll32 app.cpl 1就将弹出改变系统时间窗口。
第四步:调试cpl
在Host application中添加“C:\WINDOWS\system32\rundll32.exe”
在Paramters中添加“shell32.dll,Control_RunDLL D:\PQXSource\ControlPanel\Bin\ControlPanelDemo.cpl”其中“D:\PQXSource\ControlPanel\Bin\ControlPanelDemo.cpl”是cpl所在路径,需要全路径名,如图所示:
版权声明:本文标题:Delphi 开发控制面板程序 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1729513344a1204258.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论