dephi中怎样把单个控件的透明度改变,该怎么解决

dephi中怎样把单个控件的透明度改变
dephi中怎样把单个控件的透明度改变,有相应的代码更好。
------解决方案--------------------
SetLayeredWindowAttributes可以对具有WS_EX_LAYERED属性的窗口设置透明度,具体用法可以百度。
像Edit、Button等控件一般是子窗口,不能有WS_EX_LAYERED属性,所以不能设置透明度;但是强制使他们变成非子窗口是可以的,所以可以这样:
  h:=Edit1.Handle;
  Windows.SetParent(h, GetDesktopWindow);//变成非子窗口
  SetWindowLong(h, GWL_EXSTYLE, GetWindowLong(h, GWL_EXSTYLE) or WS_EX_LAYERED);//加上WS_EX_LAYERED属性
  SetLayeredWindowAttributes(h, 0, 100, LWA_ALPHA);//设置透明度

然而这样改变了控件的父窗口,使得程序难以控制它(想通过先设置透明度然后恢复到原来的父窗口是徒劳的)。


ps:问题如果解决就请及时结贴!
------解决方案--------------------
Public Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long   函数的原型为   BOOL SetLayeredWindowAttributes(   HWND hwnd, // handle to the layered window   COLORREF crKey, // specifies the color key   BYTE bAlpha, // value for the blend function   DWORD dwFlags // action   );   其中   hWnd是透明窗体的句柄,   crKey为掩码的颜色,可以用RGB(r,g,b)来指定。   bAlpha是不透明度,取值范围是(0,255),其中0代表全透明,255代表不透明。   dwFlags是透明方式,可以取两个值:   当取值为LWA_ALPHA时,crKey参数无效,bAlpha参数有效;   当取值为LWA_COLORKEY时,窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。   LWA_ALPHA = 0x2   LWA_COLORKEY=0x1   也可以取两个值的组合:LWA_ALPHA Or LWA_COLORKEY。这样crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。   要使使窗体拥有透明效果,首先要有WS_EX_LAYERED扩展属性,方法:   先声明GetWindowLong和SetWindowLong   Dim rtn As Long  rtn = GetWindowLong(Me.hWnd, -20)  rtn = rtn Or WS_EX_LAYERED  SetWindowLong (Me.hWnd, -20, rtn)     (旧的sdk没有定义WS_EX_LAYERED,所以可以直接指定为&H80000). (VC6.0 中主函数开头加#define WS_EX_LAYERED 0x00080000即可)   WS_EX_LAYERED = &H80000   比如用C语言编windows SDK程序,实现透明窗口,在VC6.0中,开头加一句#define WS_EX_LAYERED 0x00080000