用VC6及BCB6创建特殊形状的窗口,还是相对麻烦的,现在BDS2007来了,操作起来简单多了!跟VS2005操作基本相同.通过设置透明色来实现.显示速度比自己用算法得出的还要快一些!
步骤:
创建一个窗体,放上一个TImage,找一个图形文件!将Image的align属性设置client,窗体边框设置为None,即无边框.


编译运行!如图!

图像周边的一些细节要处理好,不然有上图那些不平滑之处!
另外还要添加处理消息,比如关闭,退出.还有拖动!
以下代码实现拖动:
在头文件添加:
public: // User declarations
void __fastcall OnNcHitTest(TMessage &Message);
public: // User declarations
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(WM_NCHITTEST,TMessage,OnNcHitTest);
END_MESSAGE_MAP(TForm);
在实现文件添加函数的实现:
void __fastcall TForm1::OnNcHitTest(TMessage &Message)

...{
Message.Result=HTCAPTION;
return;
TPoint PT;
PT.x=LOWORD(Message.LParam);
PT.y=HIWORD(Message.LParam);
PT=ScreenToClient(PT);
RECT rect;
::SetRect(&rect,0,0,20,ClientHeight);
if(PtInRect(&rect,PT))

...{
Message.Result=HTCAPTION;
}
else

...{
DefaultHandler(&Message);
}
}
如果要处理其它消息,将KeyPreview属性设置True. 然后在OnKeyUp里面处理,或者重载消息处理过程!
总体来说BDS2007实现特殊窗口比原来简单了不少!