情人节巨献——《爱情宝典》

编程爱好者

暗恋某个女孩(男孩)很久了吧,苦于没有恋爱经验,不敢轻易下手,怕一张嘴就遭到拒绝。眼看情人节快到了,有什么必杀技吗?本期为你介绍的《爱情宝典》介绍了大量有关求爱的高招,同时该软件也采用了一些独特的编程技巧,希望能成为你的好参谋。

本期为大家介绍的这个生活实用程序名叫《爱情宝典》,它分为男孩必读、女孩必读、恋爱技巧等七个板块。下面我们一起来看看这款软件和它的编程技巧,它采用Delphi7.0编写。

软件下载地址:http://www.cpcw.com/xz/05shenghuo.rar

一、操作方法

如图1,点击界面上方的“男孩必读”按钮后,界面中部显示此板块的第一条记录,点击界面左边的“上一条”按钮可以查看此板块的前一条记录,点击界面右边的“下一条”按钮可以查看此板块的后一条记录。

05-f19-02.jpg
图1

女孩必读、恋爱技巧、爱情文摘、浪漫情书、爱情故事、爱情笑话等六个板块的操作方法同上,这里不再赘述了。

二、制作难点

1.分行提示文本

把鼠标放在中间“爱情宝典”的图片上,就会出现一个特别的提示文本,如图2所示。

05-f19-03.jpg
图2

这种提示文本是如何制作出来的呢?其实Delphi为每个可视构件(而非快速按钮专属)都提供了Hint及ShowHint特性,其中Hint属性指定文本提示盒中的文本,而Showhint属性则决定鼠标指向构件时是否显示文本提示盒,当Showhint值为true时,显示文本提示盒。用户可在对象监视器(Objectinspector)的属性栏中设置或在程序中静态修改Hint及ShowHint属性。但Delphi提供的文本提示盒不能分行提示,而且不能改变提示盒的背景颜色,文本字型及字体都太小,既不美观亦不易看清,为此,我们需要进行一些处理:

(1)分行提示

由于Hint本身是一个字符串(string), Delphi显示该字符串时会自动处理其中的回车控制符,所以只要加上回车控制符就可以了。在Delphi中,回车控制符为“#13”,依此原理,我们还能做出别具一格的提示盒,比如等腰三角形、直角三角形等等。

procedure TForm1.FormShow(Sender: TObject);

begin

Image11.ShowHint:=true;

Image11.Hint:=' 爱'+#13+' 情'+#13+' 宝'+#13+' 典';

end;

(2)提示盒背景色的改变

Delphi在类TApplication中提供了HintColor来控制提示盒背景色,因此只要在代码中写:

Application.HintColor:= clYellow;//表示背景色为黄色

如果不使用标准的颜色,而使用浅蓝色作为背景颜色,那么怎么办呢?选择Form主窗体,双击Color属性,在弹出的颜色对话框中选择浅蓝颜色,如图3所示。

05-f19-04.jpg
图3

确定后图4的Clolor属性中就显示了浅蓝色的代码,用“00FF8080”代替“clYellow”。

05-f19-05.jpg
图4

即:Application.HintColor:=$00FF8080;

然后把Form窗体的颜色在属性中设置为默认的clBtnFace。

(3)设置提示盒的显示滞留时间,同样调用Delphi类TApplication:

Application.HintHidePause:=5000;//滞留时间设置为5000毫秒,也就是5秒

(4)设置提示盒的字体,这就需要利用Screen 对象:

Screen.HintFont.name:='楷体_GB2312' ;//设置字体为楷体

Screen.HintFont.size:=14;//设置字体大小为14

Screen.HintFont.color:=clYellow;//设置字体颜色为黄色

如果不使用标准的颜色作字体颜色,方法同设置背景颜色。

(5)经过上述设置后一个个性化的Hint就呈现在我们眼前了,源代码如下:

procedure TForm1.FormShow(Sender: TObject);

begin

Image11.ShowHint:=true;

Image11.Hint:=' 爱'+#13+' 情'+#13+' 宝'+#13+' 典';

Application.HintHidePause:=5000;

Application.HintColor:=$00FF8080;

Screen.HintFont.name:='楷体_GB2312' ;

Screen.HintFont.size:=14;

Screen.HintFont.color:=clYellow;

end;

2.透明窗体的制作

点击界面左边的“显示窗体”按钮即可把窗体全部显示出来,点击“隐藏窗体”按钮即可把窗体的空白区域剪切掉,实现透明窗体。

透明窗体的实现原理实际就是把窗体上所有控件的形状抠出来,窗体的空白区域剪切掉进行显示。

(1)首先定义两个过程:

procedure DoVisible; //显示整个窗体,包括窗体的空白区域

procedure DoInvisible; //把窗体的空白区域剪切掉,只显示窗体的可视控件

(2)定义全局变量

FullRgn, ClientRgn, CtlRgn : THandle;

(3)对显示窗体的可视控件的过程进行编码,也就视透明窗体的实现过程:

procedure TForm1.DoInvisible;

var

AControl : TControl;

A, Margin, X, Y, CtlX, CtlY : Integer;

begin

Margin := ( Width - ClientWidth ) div 2;

//取得Form区域

FullRgn := CreateRectRgn(0, 0, Width, Height);

//找到客户区

X := Margin;

Y := Height - ClientHeight - Margin;

ClientRgn := CreateRectRgn( X, Y, X + ClientWidth, Y + ClientHeight );

//遮罩客户区以外区域

CombineRgn( FullRgn, FullRgn, ClientRgn, RGN_DIFF );

//遍历窗体所有控件,于整个现存区域做OR操作

for A := 0 to ControlCount - 1 do be

gin

AControl := Controls[A];

if ( AControl is TWinControl ) or ( A

Control is TGraphicControl )

then with AControl do begin

if Visible then begin

CtlX := X + Left;

CtlY := Y + Top;

CtlRgn := CreateRectRgn( CtlX, Ct

lY, CtlX + Width, CtlY + Height );

CombineRgn( FullRgn, FullRgn, Ctl

Rgn, RGN_OR );

end;

end;

end;

//区域准备完毕,实现之

SetWindowRgn(Handle, FullRgn, TRUE);

end;

(4)对显示整个窗体的过程进行编码:

procedure TForm1.DoVisible;

begin

//恢复

FullRgn := CreateRectRgn(0, 0, Width, Height);

CombineRgn(FullRgn, FullRgn, Full

Rgn, RGN_COPY);

SetWindowRgn(Handle, FullRgn, TRUE);

end;

(5)在窗体关闭时要清空创建的区域,在窗体的OnDestroy事件中加入如下代码进行释放:

procedure TForm1.FormDestroy(Sender: TObject);

begin

//清空创建的区域

DeleteObject(ClientRgn);

DeleteObject(FullRgn);

DeleteObject(CtlRgn);

end;

编后

此软件主要向大家介绍了如何在Delphi中实现分行提示文本的制作和透明窗体的实现过程,其中透明窗体的原理虽然简单,但实现却并不算简单,需要大家多花功夫理解。