>var
DC: HDC; //设备描述表
R: TRect; //客户区
EnterBrush,OuterBrush,BorderBrush:HBRUSH; //画笔句柄,API
begin
DC:= GetWindowDC(Handle); //取得该组件的设备描述表
try
GetWindowRect(Handle, R); //取得该组件的客户区尺寸
OffsetRect(R, -R.Left, -R.Top); //左上偏移
//创建画笔,两个,分别代码边框,边框内,白色画笔
BorderBrush := CreateSolidBrush(ColorToRGB(FEdgeColor));
EnterBrush:= CreateSolidBrush(ColorToRGB(FEnterColor));
OuterBrush:=CreateSolidBrush(ColorToRGB(clWhite));
//not(csDesigning in ComponentState保证在设计期不变
if (not(csDesigning in ComponentState)) and
(MouseIn=true) then //如果鼠标进入
begin
//画一个矩形框,用BorderBrush画笔
FrameRect(DC, R, BorderBrush);
//把R缩小一个象素
InflateRect(R, -1, -1);
//画一个矩形框,用outerBrush画笔
FrameRect(DC, R, outerBrush);
InflateRect(R, -1, -1);
FrameRect(DC, R, EnterBrush);
end
else //如果鼠标没有进入
begin
FrameRect(DC, R, BorderBrush);
InflateRect(R, -1, -1);
FrameRect(DC, R, outerBrush);
InflateRect(R, -1, -1);
FrameRect(DC, R, outerBrush);
end;
finally
ReleaseDC(Handle, DC); //释放设备描述表
end;
DeleteObject(BorderBrush); //释放画笔
DeleteObject(EnterBrush);
DeleteObject(OuterBrush);
end;
end.
安装上去试试吧,比Memo1好看多了,功能也强多了。是吗。
至此已经做了三个组件了,其实不算很复杂,只要理清思绪。到这里似乎可以结束这次的组件制作之旅了,但是还没有。我们似乎还没有做过非可视化组件。所以我想最后一个,就是做一个非可视化组件。想知道是什么,往下看吧。
上一页 [1] [2] [3] [4] |