为自己请个小保姆——《生活小窍门》编程
编程爱好者
本期为大家介绍的这个生活实用程序名叫《生活小窍门》,它搜集了大量生活小窍门,涉及衣、食、住、行等方面,并提供了查询和增加条目功能。下面我们一起来看看这款软件,它采用Delphi7.0编写。
一、查看窍门
操作方法:运行软件,点击“窍门列表”按钮后,出现如图1界面:

左边目录树为软件搜集的所有生活小窍门,鼠标点击一行或者用键盘的方向键选择其中一行后界面右下方就显示此窍门的具体信息。如鼠标点击“巧剥蒜皮”,右下方就显示具体的操作方法。
制作要点:用第三方控件美化软件界面
此软件采用了第三方控件:皮肤控件,使用皮肤控件后,程序窗体不再是中规中矩的矩形块了,而且大家可以看到,界面右下方的Memo组件的滚动条也那么有特色,常见组件如Button、TreeView等外观都有了质的飞跃。那么我们如何安装和使用第三方控件呢?
安装第三方控件很简单,下载第三方控件后,启动Delphi,定位到第三方控件的文件夹,并打开扩展名为dpk的文件,然后在弹出的界面中点击“install”按钮即可。安装完成后就可以使用了,如果运行时报错找不到*.dcu(笔者曾经就遇到这种情况),控件就无法使用了,我们可以按下面4个步骤解决:
1.打开Delphi应用程序,点击菜单“Tools”→“Environment Options”,进入环境选项卡;
2.在弹出的对话框中,点击“Library Path”后面的“...”按钮(图2);

3.将弹出一个对话框,点击Greyed items denote invalid path 后面的“...”按钮;
4.在图3中,点击“...”按钮,定位到第三方控件的文件目录,最后点击“add”按钮结束,可以在下图的列表框中看到此控件的路径已经被添加了。

控件安装完成后,在组件面板中找到我们安装完毕的皮肤控件(图4)。

在程序界面上添加一个SkinData1,设置属性Skinstore为一个皮肤文件,如skin0076.skn,再设置其Active为true,运行后界面就如本软件的界面一样有特色了。
二、查询和增加条目
点击“查询窍门”按钮,在界面中输入生活窍门的标题,点击“查询”按钮即可。查询使用了模糊查询方法,比如输入“牙膏”,就把题目为牙膏的所有记录都读出来并显示第一条记录,按界面上的方向键可以翻看多条记录。
制作难点:模糊查询
关于模糊查询的编程技巧以前我们介绍过,这里就只介绍关键的SQL语句。
ADODataSet_Ser.CommandText:='select * from 01 where name like ''%'+tmp1+'%''';//在表中查询字段name是否有tmp1的记录
点击“增加窍门”按钮,在界面中分别输入窍门的标题和内容,点击“增加”按钮即可。
三、最小化窗口到托盘区
很多软件当点击最小化按钮后,软件不是传统的最小化到任务栏而是系统托盘区,比如Winamp,在系统托盘区里点击这个软件的图标后又显示在桌面上,这是怎么实现的呢?
注意:在窗体的属性中静态为程序设置一个ico图标,否则最小化后看不到图标!
在窗口最小化时,窗口会发出WM_SYSCOMMAND消息,只要截取Windo
ws的WM_SYSCOMMAND消息,在窗口最小化时隐藏窗口并调用WindowsAPI函数Shell_NotifyIcon将定义的图标添加到系统托盘上,Shell_NotifyIcon的函数定义为:
function Shell_NotifyIcon(dwMessage:DWORD; lpData: PNotifyIconData): BOOL;stdcall;
其中的参数dwMessage指定Shell_Notif
yIcon函数的操作,可以是NIM_ADD NIM_DELETE NIM_MODIFY三个值中的一个,分别对应添加图标、删除图标、修改图标的动作。
定义常量:
const
WM_BARICON=WM_USER+200;
在private中声明两个过程:
procedure WMSysCommand(var Message: TMessage); message WM_SYSCOMMAND;
procedure WMBarIcon(var Message:TMessage); message WM_BARICON;
代码如下:
procedure TForm1.WMSysCommand(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if Message.WParam = SC_ICON then
begin
//如果用户最小化窗口则将窗口隐藏并在任务栏上添加图标
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BAR
ICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_M
ESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_ADD,lpData);
dispose(lpData);
Form1.Visible := False;
end
else
begin
//如果是其它的SystemCommand消息则调用系统缺省处理函数处理之
DefWindowProc(Form1.Handle,Message.Msg,Message.WParam,Message.LParam);
end;
end;
procedure TForm1.WMBarIcon(var Message:TMessage);
var
lpData:PNotifyIconData;
begin
if (Message.LParam = WM_LBUTTONDOWN) then
begin
//如果用户点击任务栏图标则将图标删除并恢复窗口。
lpData := new(PNotifyIconDataA);
lpData.cbSize := 88;//SizeOf(PNotifyIconDataA);
lpData.Wnd := Form1.Handle;
lpData.hIcon := Form1.Icon.Handle;
lpData.uCallbackMessage := WM_BARICON;
lpData.uID :=0;
lpData.szTip := 'Samples';
lpData.uFlags := NIF_ICON or NIF_M
ESSAGE or NIF_TIP;
Shell_NotifyIcon(NIM_DELETE,lpData);
dispose(lpData);
Form1.Visible := True;
end;
end;
以上程序下载网址:http://www.cpcw.com/xz/41shenghuo.rar
本文教大家学会了如何安装使用第三方控件、模糊查询、最小化程序到系统托盘区域,这三大技巧都是Windows下编程经常用到的,希望大家能熟练掌握。