怎么去掉透明Panel上的控件移动背景(50分)

  • 主题发起人 wengang16
  • 开始时间
W

wengang16

Unregistered / Unconfirmed
GUEST, unregistred user!
我用下面的语句做了一个透明的Panel,然后在panel上放了一个Button和一个Label,单击Button时,使得Label移动;虽然Panel是透明了,并且Label也可以移动,但移动Label后,会在透明Panel上显示灰色的轨迹背景,这个灰色轨迹背景我想去掉。麻烦高人指点一下,小第万分感谢!
Panel1.ControlStyle := Panel1.ControlStyle - [csOpaque];
SetWindowLong(Panel1.Handle, GWL_EXSTYLE, GetWindowLong(Panel1.Handle, GWL_EXSTYLE) OR WS_EX_TRANSPARENT);
SetWindowLong(Panel1.Parent.Handle, GWL_STYLE, GetWindowLong(Panel1.Parent.Handle, GWL_STYLE) and not WS_CLIPCHILDREN);
FOldProc := SetWindowLong(Panel1.Handle, GWL_WNDPROC, Longint(@NewWindowProc));
function NewWindowProc(hHwnd, Msg, wParam, lParam: LongWORD): Longint;
stdcall;
var
FoundStyle: TBrushStyle;
R: TRect;
begin
Case Msg of
WM_ERASEBKGND:
Result := 1;
else
CallWindowProc(Pointer(FOldProc), hHwnd, Msg, wParam, lParam);
end;
end;
 
D

Delphizhou

Unregistered / Unconfirmed
GUEST, unregistred user!
刷新一下....就可以没了..
 
W

wengang16

Unregistered / Unconfirmed
GUEST, unregistred user!
问题,就是怎么写代码刷新呀,麻烦明说
 
D

Dstorm

Unregistered / Unconfirmed
GUEST, unregistred user!
单击Button时
InvalidateRect( Panel1.Handle, nil, FALSE );
//我说一下nil,你可以具体到一个RECT,这样效率高点,不过我们一般用nil
UpdateWindow(Panel1.Handle);
试试!~
 
顶部