扮靓自己的女人——编程打造《美容秘笈》
编程爱好者
爱美之心人皆有之,可是如何让自己变的更漂亮呢?本期为大家介绍的《美容秘笈》将带给你丰富的美容知识。如果你能编写与生活相关的实用小程序,欢迎投稿到pcw-cjy@vip.sina.com,请在邮件主题处注明“程序生活”。投稿请附上源程序,我们将向读者提供下载。
本期为大家介绍的这个生活实用程序名叫《美容秘笈》(图1),它分为美容小常识、美容DIY、丰胸美体、护肤养颜、美发护发、护手美甲六个板块,把这款软件送给自己的女朋友或妻子也许能让她们意外地惊喜哟!下面我们一起来看看这款软件的功能和它的编程技巧,它采用Delphi7.0编写。

一、美容小常识
操作方法:
1.查看记录
点击图1所示界面上方的“美容小常识”图标后,界面下方显示此栏目下的第一条记录的标题和具体内容,点击相应图标可以查看此栏目的其他记录。
2.增加记录
点击“美容小常识”图标后,可以点击“+”来增加记录,所增加的记录就保存在“美容小常识”的表中,如图2所示。

在“1”中输入小常识的标题,在“2”中输入小常识的具体内容,输入完成检查无误后点击“∨”完成操作,系统就把所输入的记录保存到“美容小常识”表中了。
“美容DIY”、“丰胸美体”、“护肤养颜”、“美发护发”、“护手美甲”板块的操作和“美容小常识”的操作方法一样,这里就不作解释了。下面主要讲解不规则窗体的制作。
二、制作难点:不规则窗体的制作
在绝大多数的Windows应用程序中,其窗体都为矩形窗体。矩形窗体具有编程实现简单、风格简洁的优点,在普通应用程序中使用广泛。但在娱乐游戏程序中使用就略显呆板了些,这时若用不规则窗体替代原先的矩形窗体,将会使这类程序更添情趣。不规则窗体界面比传统的矩形界面友好很多,改变Windows千篇一律的“标准”界面,一定会给你带来一种清新的感觉。
不规则窗体的实现原理
所有的Windows窗体都位于一个“region”中,窗体的大小如果超出“region”的范围,Windows 会自动裁剪超出“region”范围那部分的窗体,使它不可见。所以,要创建不规则窗体有两个步骤:第一步就是创建不规则“region”,第二步就是将窗体放到“region”中。
创建”region”
方法:作图路径法创建“region”和根据图像创建”region”。使用作图路径法创建”region”的步骤是:第一步绘制所要创建的窗体形状。第二步将绘制的结果转成“region”。本文采用根据图像创建“region”。
首先用Photoshop准备一张含有目标窗体形状的图片,设置透明色即可将图片中部不属于窗体形状的部分标记成同一种颜色,例如绿色RGB(0,255,0),程序运行后先装入图片,然后逐个扫描图片的每个像素,如这个像素不属于透明色,则在相应位置创建一个只含一个像素的“region”然后将这些小“region”合并起来组成一个任意形状的“region”。
(1)启动Delphi,在private中写入:
function CreateRegion(wMask: TBitmap; wColor: TColor; hControl: THandle): HRGN;//创建region函数
(2)对上面的函数进行编码,也就是根据图像创建“region”。详细代码如下:
function Tform1.CreateRegion(wMask:TBitmap;wColor:TColor;hControl:THandle):HRGN;
var
dc, dc_c: HDC;
rgn: HRGN;
x, y: integer;
coord: TPoint;
line: boolean;
color: TColor;
begin
//获得所选控件的区域句柄
dc := GetWindowDC(hControl);
//创建一个与特定设备场景(上面所选控件)一致的内存设备场景;
dc_c := CreateCompatibleDC(dc);
//将wMask(图片)选进上面所创建的内存设备场景中;
SelectObject(dc_c, wMask.Handle);
//启动绘图
BeginPath(dc);
for x:=0 to wMask.Width-1 do
begin
line := false;
for y:=0 to wMask.Height-1 do
begin
//获得当前颜色
color := GetPixel(dc_c, x, y);
//如果不是所选颜色则绘图
if not (color = wColor) then
begin
if not line then
begin
line := true;
coord.x := x;
coord.y := y;
end;
end;
//如果是所选颜色则为nil
if (color = wColor) or (y=wMask.Height-1) then
begin
if line then
begin
line := false;
MoveToEx(dc, coord.x, coord.y, nil);
//绘边线
LineTo(dc, coord.x, y);
LineTo(dc, coord.x + 1, y);
LineTo(dc, coord.x + 1, coord.y);
CloseFigure(dc);
end;
end;
end;
end;
//完成绘图
EndPath(dc);
//获得内存中所绘图形;
rgn := PathToRegion(dc);
//释放所选控件图形内存,以便重新绘图
ReleaseDC(hControl, dc);
//释放内存
DeleteDC(dc_c) ;
Result := rgn;
end;
(3)将窗体放到创建的“region”中
procedure TForm1.FormCreate(Sender: TObject);
var
w1:TBitmap;
w2:TColor;
rgn: HRGN;
begin
w1:=TBitmap.Create;
w1.Assign(image10.Picture.Bitmap);
w2:=w1.Canvas.Pixels[0,0];
rgn := CreateRegion(w1,w2,Handle);
if rgn<>0 then
begin
//重绘所选图形区域
SetWindowRgn(Handle, rgn, true);
end;
w1.Free;
end;
(4)当然我们希望能点击此不规则窗体进行拖动:
procedure TForm1.Image10MouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMM
AND,$F012, 0);
end;
以上程序下载网址:http://www.cpcw.com/xz/42shenghuo.rar
此软件在数据库应用编程方面都属于基本操作,比较简单。关键技巧在于不规则窗体的制作,通过学习它,能加深大家对Windows下窗体的认识。