请个私人律师——《权益保护我知道》软件的编写
编程爱好者
本期为大家介绍的这个生活实用程序名叫《请个私人律师——权益保护我知道》,它分为《消费者权益保护法》法律条文、消费者常识、消费的典型案例解析、消费方面的热点关注、消费者权益论文五个板块(图1)。下面我们一起来看看这款软件并学习一些新的编程技巧,它采用Delphi7.0编写。

一、简单的操作
如图1,点击界面上方的“消费者权益保护法”图标后,界面显示具体的法律条文章节,点击某一章后,界面下方显示这一章包含的条文,点击右边的箭头按钮可以查看此章节的其余条文。
点击“消费者权益常识”后,界面显示此板块的第一条常识的标题和内容,点击界面右边的方向键按钮可以翻看其余的常识的具体内容,如果搜集到好的常识可以点击“+”按钮,在弹出的界面中输入常识的标题和内容,点击“√”按钮即可保存进去(图2)。消费者权益常识板块能让你懂得在合法权益受到侵害时如何去维护自己的权益。

点击“典型案例”后,界面显示此板块的第一条记录的标题和内容,点击界面右边的方向键按钮可以翻看其余记录的具体内容。热点关注、权益论文和典型案例的操作方法一致。
二、制作难点
1.飞跃式提示
点击“消费者权益保护法”后,鼠标指向界面下方的Memo,也就是某一章的具体内容时,将出现一个提示文本“效果2 消费者权益常识”(图3),这种提示叫漫画式飞跃提示,也叫气泡式飞跃提示,它活泼的形式赢得了很多朋友的喜欢,它的制作相对复杂些。下面详细讲解:

(1)定义常量,在use和type之间写下面代码
const
TTS_BALLOON = $40;
TTM_SETTITLE = (WM_USER + 32);
(2)定义变量
var
Form1: TForm1;
hTooltip: Cardinal;
ti: TToolInfo;
buffer : array[0..255] of char;
注意必须在use里添加Commctrl单元74,否则定义变量ti: TToolInfo;会出错。
(3)创建飞跃提示窗口
procedure CreateToolTips(hWnd: Cardi
nal);// hWnd参数是程序窗体的句柄
begin
hToolTip := CreateWindowEx(0, 'Toolti
ps_Class32', nil,
TTS_ALWAYSTIP or TTS_BALLOON,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
hWnd, 0, hInstance, nil); //创建一个具有扩展风格的子窗口作为飞跃提示用
if hToolTip <> 0 then
begin
SetWindowPos(hToolTip, HWND_TOP
MOST, 0, 0, 0, 0,
SWP_NOMOVE or SWP_NOSIZE or SWP_NOACTIVATE); //设置该子窗口的位置和大小
ti.cbSize := SizeOf(TToolInfo);
ti.uFlags := TTF_SUBCLASS;
ti.hInst := hInstance;
end;
end;
(4)定义一个过程AddToolTip用于实现飞跃提示——包括提示的标题、内容、图标等项目。
procedure AddToolTip(hwnd: DWORD; lpti: PToolInfo; IconType: Integer;Text, Title: PChar);
var
Item: THandle;
Rect: TRect;
begin
Item := hWnd; //hwnd是指需要实现漫画式飞跃提示的对象句柄
if (Item <> 0) and (GetClientRect(Item, Rect)) then
begin
lpti.hwnd := Item; //lpti是由CreateToolTips过程传递过来的指针
lpti.Rect := Rect;
lpti.lpszText := Text;
SendMessage(hToolTip, TTM_ADDTOO
L, 0, Integer(lpti));
FillChar(buffer, SizeOf(buffer), #0);
lstrcpy(buffer, Title);
if (IconType > 3) or (IconType < 0) then IconType := 0; //IconType是指飞跃提示的图标
SendMessage(hToolTip, TTM_SETTITL
E, IconType, Integer(@buffer));
end;
end;
(5)分别在窗体最上方的

、

等图片的OnMouseUp事件中添加如下代码:当点击这些图片后,鼠标指向相应的Memo后将显示不同风格的提示。
procedure TForm1.Image1MouseUp(Se
nder: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CreateToolTips(Form1.Handle);
AddToolTip(Memo1.Handle , @ti, 0, '效果1', '消费者权益保护');// 无图标的飞跃提示
AddToolTip(TreeView1.Handle , @ti, 0, '效果1', '消费者权益保护');//鼠标指向TreeView和Panel2也有提示信息显示
AddToolTip(Panel2.Handle , @ti, 0, '效果1', '消费者权益保护');
end;
procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CreateToolTips(Form1.Handle);
AddToolTip(Memo2.Handle , @ti, 1, '效果2', '消费者权益常识');// 蓝色信息提示图标的飞跃提示
AddToolTip(Panel3.Handle , @ti, 1, '效果2', '消费者权益常识');
end;
效果如图4:




2.隐藏和呼出窗体
点击界面最上方那一排图标的空白处即可隐藏窗体,按下组合键“Alt+F12”后显示窗体。
(1)隐藏窗体
点击界面最上方那一排图标的空白处即可隐藏窗体,代码如下:
procedure TForm1.Panel1DblClick(Sender: TObject);
begin
form1.Hide;
end;
(2)显示窗体
按下组合键“Alt+F12”后窗体就显示出来了,首先我们要注册热键“Alt+F12”,代码为:
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(handle,globaladdatom('hot key'),MOD_ALT,vk_F12);//在创建窗体时注册热键“Alt+F12”
end;
然后在form中声明一个函数(过程):procedure hotkey(var msg:tmessage);message wm_hotkey;
过程代码如下:
procedure TForm1.hotkey(var msg:tmes
sage);
begin
if (msg.LParamHi=VK_F12) and (msg.LParamLo=MOD_ALT) then//当按下热键时就显示窗体
begin
form1.show;
SetForegroundWindow(handle);
end;
end;
以上软件下载地址:http://www.cpcw.com/xz/43shenghuo.rar(由于下载用户过多,建议使用下载软件下载)
此软件主要教大家一些使软件更活泼友善的编程技巧——气泡式飞跃提示。另外,定义热键也是Windows编程中经常用到的技巧,寇豆希望大家能融会贯通,灵活运用。