以下是来自<中国计算机报>的文章:
Delphi编程技巧
经乾
1.通过DDE创建程序组和快捷方式
若要在应用程序执行过程中动态创建程序组和快捷方式,可以通过向程序管理器发送DDE命令来完成。实现过程如下:
在Form上放一个 TDDEClientConv控件,命名为:DdeClientConv1,将其DdeService属性设置为ProgMan,DdeTopic设置为Progman,ConnectMode设置为ddeManual。添加一个“创建”按钮,并编写如下代码:
DdeClientConv1.OpenLink {打开DDE会话}
sMacro:=′[CreateGroup(′+′新建程序组′+′,′ +′Test′+′)]′;{宏}
StrPCopy(szMacro, sMacro);{将宏复制到字符缓冲区}
DdeClientConv1.ExecuteMacro(szMacro, False);{执行宏}
sProgIcon:=′C:/Windows/Notepad.Exe′;{快捷方式命令行}
sProgDesc:=′记事本′;{快捷方式描述}
sMacro:= [AddItem(′ + sProgIcon + ′,′ + sProgDesc + ′)]′;
StrPCopy(szMacro, sMacro);
DdeClientConv1.ExecuteMacro(szMacro, False);
DdeClientConv1.CloseLink;
{关闭DDE会话}
创建结果如图1所示。若要删除或显示已有的程序组,可以使用如下宏命令:
图1
sMacro:=′[DeleteGroup(″附件″)]′;{删除“附件”组}
sMacro:=′[ShowGroup(″启动″)]′;{显示″启动″组}
2.实现英文朗读功能
很多软件具有英文发音和朗读功能,它们都使用了MSTTS(Microsoft Text To Speech)技术。微软遵照COM的标准,提供了一套Speech API来对MSTTS进行编程。要在程序中使用这套API,必须确保系统已经安装了MSTTS和Spchapi软件包。
Speech API可以作为类型库引用到Delphi中,方法是:打开Project选单下的Import Type Litrary,点击“Add”加入Windows/Speech目录下的Vtxauto.tlb文件,在Delphi的Import目录中就会生成VTxtAuto—TLB.pas文件,其中定义了VTxtAuto—TLB单元,把它加到Uses成员中来。设计如图2所示的窗口,定义全局变量:
图2
var VoTxt:IVTxtAuto;
然后在Form的OnCreate事件中加入:
VoTxt:=CoVTxtAuto_.Create;
VoTxt.Register(′′,′Speech Test′);{注册}
“Read”按钮代码为:
VoTxt.Speak(Memo1.Lines.Text,10);{朗读}
“Stop”按钮代码为:
VoTxt.StopSpeaking;
{停止朗读}
至此,应用程序已具有朗读功能,10表示使用普通语气。借住VoTxt的属性和方法,我们还可以控制阅读速度和语气,实现暂停、跳句等功能,Speech API编程就这么简单。
3.抓获全屏
根据Windows GDI与设备无关的特点,利用BitBlt或StretchBlt函数将显示设备上的位数据传输到目标设备上,然后在目标设备上创建兼容位图:
SourceDC:=CreateDC(′DISPLAY′,′′,′′,nil);{创建源设备环境,DISPLAY为显示器}
DestDC:=CreateCompatibleDC(SourceDC);
{创建和SourceDC兼容的目标设备环境}
BHandle:=CreateCompatibleBitmap(SourceDC,Screen.Width,Screen.Height)
{创建一个和SourceDC兼容的内存设备环境,并返回其设备句柄}
SelectObject(DestDC,BHandle);
BitBlt(DestDC,0,0,Screen.Width,Screen.Height,SourceDC,0,0,SRCCOPY)
{抓图}
Bitmap:=TBitmap.Create;
{Bitmap为TBitmap类型}
Bitmap.Handle:=BHandle;
Bitmap.SaveToStream(′C:/Mydo
cuments/FullScreen.bmp′) {保存到文件}
DeleteDC(DestDC)
ReleaseDC(BHandle,SourceDC)
{释放设备环境}
以上程序中,各设备环境的数据类型为Integer。
4.更改桌面墙纸
通过修改注册表,可以动态改变桌面墙纸及其显示方式(平铺还是居中):
Reg.OpenKey(′Control Panel/Desktop′,False);{打开Control Panel下的Desktop键}
Reg.WriteString(′Wallpaper′,′C:/Windows/Bubbles.Bmp′);{指定位图}
Reg.WriteString(′TileWallpaper′,′1′);{设置平铺方式}
Reg.CloseKey;{关闭键,Reg为Tregistry类型}
SystemParametersInfo(SPISETDESKWALLPAPER,0,nil,SPIF—SENDWININICHANGE)
{更新用户配置文件并刷新桌面}
5.隐藏桌面图标
原理:桌面也是一个窗口,将其设置为不可见即可达到隐藏桌面图标的目的。
Var hDesktop:THandle;
begin
hDesktop:= FindWindow(′Progman′, nil);
{获取桌面窗口句柄}
ShowWindow(hDesktop, SW—HIDE);{隐藏}
End
6.锁定鼠标
原理:利用ClipCursor函数将鼠标限制在某一矩形区域。
Var rect:TRect;
begin
rect.Left:=0;
rect.Top:=0;
rect.Right:=0;
rect.Bottom:=Screen.Height;
ClipCursor(@rect);
{将鼠标锁定在屏幕左侧}
end;
7.创建不规则窗口
原理:用CreateRectRgn、CreateEllipticRgn等函数创建一个区域,然后用SetWindowRgn函数将其设置为窗口的显示区域。如下程序创建一个椭圆窗口:
r1:=CreateEllipticRgn(0,0,form1.width,form1.height);
SetSindowRgn(Form1.Handle,r1,True);{r1为LongInt类型}
8.让应用程序自身删除
原理:在应用程序刚要退出之前创建一个Delse
lf.bat文件,让它先删除应用程序,然后删除自身。在Form的OnClose事件中加入下列代码:
AssignFile(F, ′delse
lf.bat′);Rewrite(F);{F为TextFile类型}
WriteLn(F,′del ′+ExtractFileName(Application.ExeName));
WriteLn(F,′del %0′);CloseFile(F);
WinExec(′delse
lf.bat′,SW—HIDE);
***************************
供你参考。我试过,可以用。