怎么将已经画上的东西给去掉? ( 积分: 50 )

  • 主题发起人 主题发起人 feitianbianfu16
  • 开始时间 开始时间
F

feitianbianfu16

Unregistered / Unconfirmed
GUEST, unregistred user!
我从TCustomControl继承 ,写了一个控件,在实现透明的时候,如果鼠标放上去就在控件上画一种颜色,如果鼠标不在上面的时候就是透明;现在我的透明实现了,但是鼠标不在上面是透明的,如果鼠标离开的画,刚刚画过的颜色自己没有擦除调,还有,所以就不是透明的了,不知道现在改如何去掉这个颜色?
本来想sendmessage一个WM_ERASEBKGND,但是没有效果!我的WM_ERASEBKGND是这样的:
procedure Txxxx.WMEraseBkGnd(var Message: TWMEraseBkGnd);
var
DC: hDC;
i:integer;
p:TPoint;
begin
if FTransparent then
begin
if Assigned(Parent) then
begin
DC:=Message.DC;
i:=SaveDC(DC);
p:=ClientOrigin;
Windows.ScreenToClient(Parent.Handle, p);
p.x:=-p.x;
p.y:=-p.y;
MoveWindowOrg(DC,p.x,p.y);
SendMessage(Parent.Handle,$0014,DC,0);
TCtrl(Parent).PaintControls(DC,nil);
RestoreDC(DC,i);
end;
end
else
inherited;
end;
 
我从TCustomControl继承 ,写了一个控件,在实现透明的时候,如果鼠标放上去就在控件上画一种颜色,如果鼠标不在上面的时候就是透明;现在我的透明实现了,但是鼠标不在上面是透明的,如果鼠标离开的画,刚刚画过的颜色自己没有擦除调,还有,所以就不是透明的了,不知道现在改如何去掉这个颜色?
本来想sendmessage一个WM_ERASEBKGND,但是没有效果!我的WM_ERASEBKGND是这样的:
procedure Txxxx.WMEraseBkGnd(var Message: TWMEraseBkGnd);
var
DC: hDC;
i:integer;
p:TPoint;
begin
if FTransparent then
begin
if Assigned(Parent) then
begin
DC:=Message.DC;
i:=SaveDC(DC);
p:=ClientOrigin;
Windows.ScreenToClient(Parent.Handle, p);
p.x:=-p.x;
p.y:=-p.y;
MoveWindowOrg(DC,p.x,p.y);
SendMessage(Parent.Handle,$0014,DC,0);
TCtrl(Parent).PaintControls(DC,nil);
RestoreDC(DC,i);
end;
end
else
inherited;
end;
 
我不太懂,用FillRect试试看
 
使用内部VCL消来处理
procedure cmmouseenter(var msg:tmessage);message cm_mouseenter;鼠标进入控件
procedure cmmouseenter(var msg:tmessage);message cm_mouseenter;鼠标离开控件
 
问题在于你画了一个东西怎么把他擦除掉呀!
 
用消息CM_MOUSEENTER和CM_MOUSELEAVE
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;进入
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;离开
然后在这里面写处理代码
 

你写了,当鼠标进入的时候画了,但是当你鼠标离开的时候如何那?该怎么写这段代码那?
我现在要的就是当鼠标离开的代码!
 
透明是怎么实现的呢?
鼠标离开的时候再照着透明实现的方法实现一次应该就可以了吧。
 
WM_ERASEBKGND消息事件在鼠标离开和进入的时候是不会被触发的
 
后退
顶部